[{"data":1,"prerenderedAt":173437},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch06-css-yu-fa-yu-wen-ben-yang-shi":3,"wiki-doc-nav":611},{"id":4,"title":5,"body":6,"description":603,"extension":604,"meta":605,"navigation":606,"path":607,"seo":608,"stem":609,"__hash__":610},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":8,"toc":578},"minimark",[9,13,18,22,27,33,36,39,42,45,48,51,54,58,61,66,69,72,75,79,82,85,88,95,98,101,104,107,110,113,116,171,175,178,181,184,188,191,194,197,200,203,207,210,213,216,220,223,227,230,234,237,242,246,249,254,257,260,263,266,298,301,305,308,311,316,319,322,326,329,334,337,340,343,347,350,353,356,360,363,366,369,373,377,380,424,427,431,438,441,445,448,497,501,504,507,510,540,544,547,574],[10,11,5],"h1",{"id":12},"_6-css语法与文本样式",[14,15,17],"h2",{"id":16},"_61-css语法规范","6.1 css语法规范",[19,20,21],"p",{},"由两部分组成，选择器及一条或多条声明",[23,24],"img",{"style":25,"src":26},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,28,29],{},[30,31,32],"strong",{},"注意点：",[19,34,35],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,37,38],{},"②属性与属性值以“键值对”的形式出现",[19,40,41],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,43,44],{},"④属性和属性值之间用英文“;”分开",[23,46],{"style":25,"src":47},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[23,49],{"style":25,"src":50},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[23,52],{"style":25,"src":53},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,55,57],{"id":56},"_62-css选择器","6.2 css选择器",[19,59,60],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[62,63,65],"h3",{"id":64},"_621-标签选择器","6.2.1 标签选择器",[19,67,68],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,70,71],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[23,73],{"style":25,"src":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[62,76,78],{"id":77},"_622-类选择器","6.2.2 类选择器",[19,80,81],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,83,84],{},"②样例",[23,86],{"style":25,"src":87},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,89,90,91,94],{},"③ ",[30,92,93],{},"注意点"," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,96,97],{},"可以理解为给这个标签起了个名字，来表示；",[19,99,100],{},"长名称或词组可以使用横线来为选择器命名；",[19,102,103],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,105,106],{},"命名要有意义；",[23,108],{"style":25,"src":109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,111,112],{},"类选择器也可以指定特殊的元素p.center{}",[19,114,115],{},"p.center和.center都对",[117,118,123],"pre",{"className":119,"code":120,"language":121,"meta":122,"style":122},"language-Css shiki shiki-themes github-light github-dark","\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n","Css","",[124,125,126,135,149,165],"code",{"__ignoreMap":122},[127,128,131],"span",{"class":129,"line":130},"line",1,[127,132,134],{"class":133},"sJ8bj","\u002F* 类选择器指定特殊元素 *\u002F\n",[127,136,138,141,145],{"class":129,"line":137},2,[127,139,19],{"class":140},"s9eBZ",[127,142,144],{"class":143},"sScJk",".center",[127,146,148],{"class":147},"sVt8B"," {\n",[127,150,152,156,159,162],{"class":129,"line":151},3,[127,153,155],{"class":154},"sj4cs","  text-align",[127,157,158],{"class":147},": ",[127,160,161],{"class":154},"center",[127,163,164],{"class":147},";\n",[127,166,168],{"class":129,"line":167},4,[127,169,170],{"class":147},"}\n",[62,172,174],{"id":173},"_623-多类名使用","6.2.3 多类名使用",[19,176,177],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[23,179],{"style":25,"src":180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,182,183],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[62,185,187],{"id":186},"_624-id选择器","6.2.4 id选择器",[19,189,190],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,192,193],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[23,195],{"style":25,"src":196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,198,199],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,201,202],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[62,204,206],{"id":205},"_625-通配符选择器","6.2.5 通配符选择器",[19,208,209],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,211,212],{},"* {",[19,214,215],{},"color=\"red\"}",[62,217,219],{"id":218},"_626-总结","6.2.6 总结",[23,221],{"style":25,"src":222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,224,226],{"id":225},"_63-css字体属性","6.3 css字体属性",[19,228,229],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[62,231,233],{"id":232},"_631-字体系列","6.3.1 字体系列",[19,235,236],{},"font-family: '宋体';",[19,238,239,241],{},[30,240,32],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[62,243,245],{"id":244},"_632-字体大小","6.3.2 字体大小",[19,247,248],{},"font-size: 20px",[19,250,251,253],{},[30,252,93],{}," ：",[19,255,256],{},"①px（像素）大小是网页的最常用单位",[19,258,259],{},"②谷歌浏览器默认为16px",[19,261,262],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,264,265],{},"④可以给body指定整个页面的大小：会自动引用",[117,267,269],{"className":119,"code":268,"language":121,"meta":122,"style":122},"body {\n  font-size: 16px;\n}\n",[124,270,271,278,294],{"__ignoreMap":122},[127,272,273,276],{"class":129,"line":130},[127,274,275],{"class":140},"body",[127,277,148],{"class":147},[127,279,280,283,285,288,292],{"class":129,"line":137},[127,281,282],{"class":154},"  font-size",[127,284,158],{"class":147},[127,286,287],{"class":154},"16",[127,289,291],{"class":290},"szBVR","px",[127,293,164],{"class":147},[127,295,296],{"class":129,"line":151},[127,297,170],{"class":147},[19,299,300],{},"⑤标题标签比较特殊，需要单独指定大小",[62,302,304],{"id":303},"_633-字体粗细","6.3.3 字体粗细",[19,306,307],{},"font-weight: bold;",[19,309,310],{},"font-weight: 100；",[19,312,313,315],{},[30,314,32],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,317,318],{},"font-weight= 400;",[19,320,321],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[62,323,325],{"id":324},"_634-文字样式","6.3.4 文字样式",[19,327,328],{},"font-style: normal；",[19,330,331,253],{},[30,332,333],{},"属性值",[19,335,336],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,338,339],{},"②italic：浏览器会显示斜体的字体样式",[23,341],{"style":25,"src":342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[62,344,346],{"id":345},"_635-字体符合属性","6.3.5 字体符合属性",[23,348],{"style":25,"src":349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[23,351],{"style":25,"src":352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,354,355],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,357,358,253],{},[30,359,93],{},[19,361,362],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,364,365],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,367,368],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,370,372],{"id":371},"_64-css-test文本属性","6.4 css test文本属性",[62,374,376],{"id":375},"_641-文本颜色","6.4.1 文本颜色",[19,378,379],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[117,381,383],{"className":119,"code":382,"language":121,"meta":122,"style":122},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[124,384,385,390,396,408,413,419],{"__ignoreMap":122},[127,386,387],{"class":129,"line":130},[127,388,389],{"class":133},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[127,391,392,394],{"class":129,"line":137},[127,393,19],{"class":140},[127,395,148],{"class":147},[127,397,398,401,403,406],{"class":129,"line":151},[127,399,400],{"class":154},"  color",[127,402,158],{"class":147},[127,404,405],{"class":154},"red",[127,407,164],{"class":147},[127,409,410],{"class":129,"line":167},[127,411,412],{"class":133},"  \u002F* color: #ff0000; *\u002F\n",[127,414,416],{"class":129,"line":415},5,[127,417,418],{"class":133},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[127,420,422],{"class":129,"line":421},6,[127,423,170],{"class":147},[23,425],{"style":25,"src":426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[62,428,430],{"id":429},"_642-对齐文本","6.4.2 对齐文本",[19,432,433,434,437],{},"text-align属于用于设置元素内文本内容的 ",[30,435,436],{},"水平对齐"," 方式",[19,439,440],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[62,442,444],{"id":443},"_643-装饰文本","6.4.3 装饰文本",[19,446,447],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[117,449,451],{"className":119,"code":450,"language":121,"meta":122,"style":122},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[124,452,453,460,472,476,482,493],{"__ignoreMap":122},[127,454,455,458],{"class":129,"line":130},[127,456,457],{"class":140},"a",[127,459,148],{"class":147},[127,461,462,465,467,470],{"class":129,"line":137},[127,463,464],{"class":154},"  text-decoration",[127,466,158],{"class":147},[127,468,469],{"class":154},"none",[127,471,164],{"class":147},[127,473,474],{"class":129,"line":151},[127,475,170],{"class":147},[127,477,478,480],{"class":129,"line":167},[127,479,19],{"class":140},[127,481,148],{"class":147},[127,483,484,486,488,491],{"class":129,"line":415},[127,485,464],{"class":154},[127,487,158],{"class":147},[127,489,490],{"class":154},"underline",[127,492,164],{"class":147},[127,494,495],{"class":129,"line":421},[127,496,170],{"class":147},[62,498,500],{"id":499},"_644-文本缩进","6.4.4 文本缩进",[19,502,503],{},"实现文本的第一行首行缩进自己指定的距离",[19,505,506],{},"20px往右边走；-20px往左边走",[19,508,509],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[117,511,513],{"className":119,"code":512,"language":121,"meta":122,"style":122},"p {\n  text-indent: 2em;\n}\n",[124,514,515,521,536],{"__ignoreMap":122},[127,516,517,519],{"class":129,"line":130},[127,518,19],{"class":140},[127,520,148],{"class":147},[127,522,523,526,528,531,534],{"class":129,"line":137},[127,524,525],{"class":154},"  text-indent",[127,527,158],{"class":147},[127,529,530],{"class":154},"2",[127,532,533],{"class":290},"em",[127,535,164],{"class":147},[127,537,538],{"class":129,"line":151},[127,539,170],{"class":147},[62,541,543],{"id":542},"_645-行间距","6.4.5 行间距",[19,545,546],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[117,548,550],{"className":119,"code":549,"language":121,"meta":122,"style":122},"p {\n  line-height: 1.6;\n}\n",[124,551,552,558,570],{"__ignoreMap":122},[127,553,554,556],{"class":129,"line":130},[127,555,19],{"class":140},[127,557,148],{"class":147},[127,559,560,563,565,568],{"class":129,"line":137},[127,561,562],{"class":154},"  line-height",[127,564,158],{"class":147},[127,566,567],{"class":154},"1.6",[127,569,164],{"class":147},[127,571,572],{"class":129,"line":151},[127,573,170],{"class":147},[575,576,577],"style",{},"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":122,"searchDepth":137,"depth":137,"links":579},[580,581,589,596],{"id":16,"depth":137,"text":17},{"id":56,"depth":137,"text":57,"children":582},[583,584,585,586,587,588],{"id":64,"depth":151,"text":65},{"id":77,"depth":151,"text":78},{"id":173,"depth":151,"text":174},{"id":186,"depth":151,"text":187},{"id":205,"depth":151,"text":206},{"id":218,"depth":151,"text":219},{"id":225,"depth":137,"text":226,"children":590},[591,592,593,594,595],{"id":232,"depth":151,"text":233},{"id":244,"depth":151,"text":245},{"id":303,"depth":151,"text":304},{"id":324,"depth":151,"text":325},{"id":345,"depth":151,"text":346},{"id":371,"depth":137,"text":372,"children":597},[598,599,600,601,602],{"id":375,"depth":151,"text":376},{"id":429,"depth":151,"text":430},{"id":443,"depth":151,"text":444},{"id":499,"depth":151,"text":500},{"id":542,"depth":151,"text":543},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":5,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",[612,5704,6812,8232,11221,12572,14061,15150,23912,23924,24522,24548,24672,24913,24978,24996,25009,25056,25180,25349,25548,25728,25933,26069,26164,26201,26214,26524,27264,27972,27993,29013,30644,30795,30808,30820,31121,50933,50948,50965,50998,53865,77207,93352,93373,93486,93607,94377,95040,95401,95439,95545,95645,95688,95714,95775,97429,97530,97555,98046,98546,99626,99909,100651,101153,101165,103181,104845,106348,108046,109963,111882,113904,117374,117806,118269,119018,121962,122310,122332,122688,125995,126007,126410,126433,126580,126747,126951,127249,127671,128328,130259,131857,132506,134000,135431,136666,138360,140112,142522,142638,143573,143784,144669,145904,146132,146145,147300,149712,152080,155401,157878,159522,161299,163312,166364,168544,171071,173265],{"id":613,"title":614,"body":615,"description":122,"extension":604,"meta":5699,"navigation":606,"path":5700,"seo":5701,"stem":5702,"__hash__":5703},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":616,"toc":5671},[617,620,624,627,631,644,648,652,655,658,661,664,667,695,699,702,705,708,710,760,764,783,785,799,802,810,813,1673,1680,1697,1701,1788,1792,1798,1886,1890,1928,1932,1996,2000,2004,2010,2021,2025,2030,2034,2039,2043,2048,2052,2056,2061,2330,2335,2473,2478,2734,2737,2745,2749,2754,2857,2860,3166,3175,3276,3279,3282,3285,3288,3548,3553,3693,3696,3875,3878,4006,4009,4161,4165,4170,4173,4184,4192,4195,4302,4306,4310,4315,4365,4370,4375,4399,4404,4457,4460,4465,4642,4647,4932,4937,5334,5338,5343,5400,5405,5413,5416,5556,5559,5668],[10,618,614],{"id":619},"_1基础入门",[14,621,623],{"id":622},"_11注释","1.1注释",[19,625,626],{},"\u002F\u002F或者\u002F* *\u002F",[14,628,630],{"id":629},"_12命名","1.2命名",[632,633,634,638,641],"ol",{},[635,636,637],"li",{},"字母数字下划线",[635,639,640],{},"开头必须是字母或_",[635,642,643],{},"不能使用关键词",[14,645,647],{"id":646},"_13数据类型","1.3数据类型",[62,649,651],{"id":650},"_131整形","1.3.1整形",[19,653,654],{},"short 短整形 2",[19,656,657],{},"int 整形 4",[19,659,660],{},"long 长整形 win4 linux32位4 linux64位8",[19,662,663],{},"long long 长长整形 8",[19,665,666],{},"利用sizeof可以求数据类型占用的内存空间大小",[117,668,672],{"className":669,"code":670,"language":671,"meta":122,"style":122},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[124,673,674,688],{"__ignoreMap":122},[127,675,676,679,682,685],{"class":129,"line":130},[127,677,678],{"class":290},"sizeof",[127,680,681],{"class":147},"(",[127,683,684],{"class":290},"int",[127,686,687],{"class":147},")\n",[127,689,690,692],{"class":129,"line":137},[127,691,678],{"class":290},[127,693,694],{"class":147},"(num)\n",[62,696,698],{"id":697},"_132浮点型","1.3.2浮点型",[19,700,701],{},"float 单精度 4节 7位有效数字",[19,703,704],{},"double 双精度 8节 15-16有效数字",[19,706,707],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,709,32],{},[117,711,713],{"className":669,"code":712,"language":671,"meta":122,"style":122},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[124,714,715,738],{"__ignoreMap":122},[127,716,717,720,723,726,729,732,735],{"class":129,"line":130},[127,718,719],{"class":290},"float",[127,721,722],{"class":147}," f1",[127,724,725],{"class":290},"=",[127,727,728],{"class":154},"3.14",[127,730,731],{"class":290},"f",[127,733,734],{"class":147},";",[127,736,737],{"class":133}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[127,739,740,742,745,747,750,753,755,757],{"class":129,"line":137},[127,741,719],{"class":290},[127,743,744],{"class":147}," f2",[127,746,725],{"class":290},[127,748,749],{"class":154},"3",[127,751,752],{"class":290},"e",[127,754,530],{"class":154},[127,756,734],{"class":147},[127,758,759],{"class":133}," \u002F\u002F科学记数法\n",[62,761,763],{"id":762},"_133字符型","1.3.3字符型",[117,765,767],{"className":669,"code":766,"language":671,"meta":122,"style":122},"char ch='a'\n",[124,768,769],{"__ignoreMap":122},[127,770,771,774,777,779],{"class":129,"line":130},[127,772,773],{"class":290},"char",[127,775,776],{"class":147}," ch",[127,778,725],{"class":290},[127,780,782],{"class":781},"sZZnC","'a'\n",[19,784,32],{},[632,786,787,790,793,796],{},[635,788,789],{},"在显示字符型变量时，只能单引号，双引号x",[635,791,792],{},"单引号内只能一个字符，不能字符串",[635,794,795],{},"c和c++字符型变量只占用一个字符",[635,797,798],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,800,801],{},"ASCII码大致由以下两部分组成：",[632,803,804,807],{},[635,805,806],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[635,808,809],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,811,812],{},"ASCII码表格：",[814,815,816,859],"table",{},[817,818,819],"thead",{},[820,821,822,829,834,838,843,847,851,855],"tr",{},[823,824,825,828],"th",{},[30,826,827],{},"ASCII","值",[823,830,831],{},[30,832,833],{},"控制字符",[823,835,836,828],{},[30,837,827],{},[823,839,840],{},[30,841,842],{},"字符",[823,844,845,828],{},[30,846,827],{},[823,848,849],{},[30,850,842],{},[823,852,853,828],{},[30,854,827],{},[823,856,857],{},[30,858,842],{},[860,861,862,889,914,939,964,990,1015,1040,1066,1091,1117,1143,1169,1194,1220,1246,1272,1295,1320,1345,1370,1395,1420,1445,1470,1495,1520,1546,1571,1596,1621,1647],"tbody",{},[820,863,864,868,871,874,877,880,883,886],{},[865,866,867],"td",{},"0",[865,869,870],{},"NUT",[865,872,873],{},"32",[865,875,876],{},"(space)",[865,878,879],{},"64",[865,881,882],{},"@",[865,884,885],{},"96",[865,887,888],{},"、",[820,890,891,894,897,900,903,906,909,912],{},[865,892,893],{},"1",[865,895,896],{},"SOH",[865,898,899],{},"33",[865,901,902],{},"!",[865,904,905],{},"65",[865,907,908],{},"A",[865,910,911],{},"97",[865,913,457],{},[820,915,916,918,921,924,927,930,933,936],{},[865,917,530],{},[865,919,920],{},"STX",[865,922,923],{},"34",[865,925,926],{},"\"",[865,928,929],{},"66",[865,931,932],{},"B",[865,934,935],{},"98",[865,937,938],{},"b",[820,940,941,943,946,949,952,955,958,961],{},[865,942,749],{},[865,944,945],{},"ETX",[865,947,948],{},"35",[865,950,951],{},"#",[865,953,954],{},"67",[865,956,957],{},"C",[865,959,960],{},"99",[865,962,963],{},"c",[820,965,966,969,972,975,978,981,984,987],{},[865,967,968],{},"4",[865,970,971],{},"EOT",[865,973,974],{},"36",[865,976,977],{},"$",[865,979,980],{},"68",[865,982,983],{},"D",[865,985,986],{},"100",[865,988,989],{},"d",[820,991,992,995,998,1001,1004,1007,1010,1013],{},[865,993,994],{},"5",[865,996,997],{},"ENQ",[865,999,1000],{},"37",[865,1002,1003],{},"%",[865,1005,1006],{},"69",[865,1008,1009],{},"E",[865,1011,1012],{},"101",[865,1014,752],{},[820,1016,1017,1020,1023,1026,1029,1032,1035,1038],{},[865,1018,1019],{},"6",[865,1021,1022],{},"ACK",[865,1024,1025],{},"38",[865,1027,1028],{},"&",[865,1030,1031],{},"70",[865,1033,1034],{},"F",[865,1036,1037],{},"102",[865,1039,731],{},[820,1041,1042,1045,1048,1051,1054,1057,1060,1063],{},[865,1043,1044],{},"7",[865,1046,1047],{},"BEL",[865,1049,1050],{},"39",[865,1052,1053],{},",",[865,1055,1056],{},"71",[865,1058,1059],{},"G",[865,1061,1062],{},"103",[865,1064,1065],{},"g",[820,1067,1068,1071,1074,1077,1079,1082,1085,1088],{},[865,1069,1070],{},"8",[865,1072,1073],{},"BS",[865,1075,1076],{},"40",[865,1078,681],{},[865,1080,1081],{},"72",[865,1083,1084],{},"H",[865,1086,1087],{},"104",[865,1089,1090],{},"h",[820,1092,1093,1096,1099,1102,1105,1108,1111,1114],{},[865,1094,1095],{},"9",[865,1097,1098],{},"HT",[865,1100,1101],{},"41",[865,1103,1104],{},")",[865,1106,1107],{},"73",[865,1109,1110],{},"I",[865,1112,1113],{},"105",[865,1115,1116],{},"i",[820,1118,1119,1122,1125,1128,1131,1134,1137,1140],{},[865,1120,1121],{},"10",[865,1123,1124],{},"LF",[865,1126,1127],{},"42",[865,1129,1130],{},"*",[865,1132,1133],{},"74",[865,1135,1136],{},"J",[865,1138,1139],{},"106",[865,1141,1142],{},"j",[820,1144,1145,1148,1151,1154,1157,1160,1163,1166],{},[865,1146,1147],{},"11",[865,1149,1150],{},"VT",[865,1152,1153],{},"43",[865,1155,1156],{},"+",[865,1158,1159],{},"75",[865,1161,1162],{},"K",[865,1164,1165],{},"107",[865,1167,1168],{},"k",[820,1170,1171,1174,1177,1180,1182,1185,1188,1191],{},[865,1172,1173],{},"12",[865,1175,1176],{},"FF",[865,1178,1179],{},"44",[865,1181,1053],{},[865,1183,1184],{},"76",[865,1186,1187],{},"L",[865,1189,1190],{},"108",[865,1192,1193],{},"l",[820,1195,1196,1199,1202,1205,1208,1211,1214,1217],{},[865,1197,1198],{},"13",[865,1200,1201],{},"CR",[865,1203,1204],{},"45",[865,1206,1207],{},"-",[865,1209,1210],{},"77",[865,1212,1213],{},"M",[865,1215,1216],{},"109",[865,1218,1219],{},"m",[820,1221,1222,1225,1228,1231,1234,1237,1240,1243],{},[865,1223,1224],{},"14",[865,1226,1227],{},"SO",[865,1229,1230],{},"46",[865,1232,1233],{},".",[865,1235,1236],{},"78",[865,1238,1239],{},"N",[865,1241,1242],{},"110",[865,1244,1245],{},"n",[820,1247,1248,1251,1254,1257,1260,1263,1266,1269],{},[865,1249,1250],{},"15",[865,1252,1253],{},"SI",[865,1255,1256],{},"47",[865,1258,1259],{},"\u002F",[865,1261,1262],{},"79",[865,1264,1265],{},"O",[865,1267,1268],{},"111",[865,1270,1271],{},"o",[820,1273,1274,1276,1279,1282,1284,1287,1290,1293],{},[865,1275,287],{},[865,1277,1278],{},"DLE",[865,1280,1281],{},"48",[865,1283,867],{},[865,1285,1286],{},"80",[865,1288,1289],{},"P",[865,1291,1292],{},"112",[865,1294,19],{},[820,1296,1297,1300,1303,1306,1308,1311,1314,1317],{},[865,1298,1299],{},"17",[865,1301,1302],{},"DCI",[865,1304,1305],{},"49",[865,1307,893],{},[865,1309,1310],{},"81",[865,1312,1313],{},"Q",[865,1315,1316],{},"113",[865,1318,1319],{},"q",[820,1321,1322,1325,1328,1331,1333,1336,1339,1342],{},[865,1323,1324],{},"18",[865,1326,1327],{},"DC2",[865,1329,1330],{},"50",[865,1332,530],{},[865,1334,1335],{},"82",[865,1337,1338],{},"R",[865,1340,1341],{},"114",[865,1343,1344],{},"r",[820,1346,1347,1350,1353,1356,1358,1361,1364,1367],{},[865,1348,1349],{},"19",[865,1351,1352],{},"DC3",[865,1354,1355],{},"51",[865,1357,749],{},[865,1359,1360],{},"83",[865,1362,1363],{},"S",[865,1365,1366],{},"115",[865,1368,1369],{},"s",[820,1371,1372,1375,1378,1381,1383,1386,1389,1392],{},[865,1373,1374],{},"20",[865,1376,1377],{},"DC4",[865,1379,1380],{},"52",[865,1382,968],{},[865,1384,1385],{},"84",[865,1387,1388],{},"T",[865,1390,1391],{},"116",[865,1393,1394],{},"t",[820,1396,1397,1400,1403,1406,1408,1411,1414,1417],{},[865,1398,1399],{},"21",[865,1401,1402],{},"NAK",[865,1404,1405],{},"53",[865,1407,994],{},[865,1409,1410],{},"85",[865,1412,1413],{},"U",[865,1415,1416],{},"117",[865,1418,1419],{},"u",[820,1421,1422,1425,1428,1431,1433,1436,1439,1442],{},[865,1423,1424],{},"22",[865,1426,1427],{},"SYN",[865,1429,1430],{},"54",[865,1432,1019],{},[865,1434,1435],{},"86",[865,1437,1438],{},"V",[865,1440,1441],{},"118",[865,1443,1444],{},"v",[820,1446,1447,1450,1453,1456,1458,1461,1464,1467],{},[865,1448,1449],{},"23",[865,1451,1452],{},"TB",[865,1454,1455],{},"55",[865,1457,1044],{},[865,1459,1460],{},"87",[865,1462,1463],{},"W",[865,1465,1466],{},"119",[865,1468,1469],{},"w",[820,1471,1472,1475,1478,1481,1483,1486,1489,1492],{},[865,1473,1474],{},"24",[865,1476,1477],{},"CAN",[865,1479,1480],{},"56",[865,1482,1070],{},[865,1484,1485],{},"88",[865,1487,1488],{},"X",[865,1490,1491],{},"120",[865,1493,1494],{},"x",[820,1496,1497,1500,1503,1506,1508,1511,1514,1517],{},[865,1498,1499],{},"25",[865,1501,1502],{},"EM",[865,1504,1505],{},"57",[865,1507,1095],{},[865,1509,1510],{},"89",[865,1512,1513],{},"Y",[865,1515,1516],{},"121",[865,1518,1519],{},"y",[820,1521,1522,1525,1528,1531,1534,1537,1540,1543],{},[865,1523,1524],{},"26",[865,1526,1527],{},"SUB",[865,1529,1530],{},"58",[865,1532,1533],{},":",[865,1535,1536],{},"90",[865,1538,1539],{},"Z",[865,1541,1542],{},"122",[865,1544,1545],{},"z",[820,1547,1548,1551,1554,1557,1559,1562,1565,1568],{},[865,1549,1550],{},"27",[865,1552,1553],{},"ESC",[865,1555,1556],{},"59",[865,1558,734],{},[865,1560,1561],{},"91",[865,1563,1564],{},"[",[865,1566,1567],{},"123",[865,1569,1570],{},"{",[820,1572,1573,1576,1579,1582,1585,1588,1590,1593],{},[865,1574,1575],{},"28",[865,1577,1578],{},"FS",[865,1580,1581],{},"60",[865,1583,1584],{},"\u003C",[865,1586,1587],{},"92",[865,1589,1259],{},[865,1591,1592],{},"124",[865,1594,1595],{},"|",[820,1597,1598,1601,1604,1607,1609,1612,1615,1618],{},[865,1599,1600],{},"29",[865,1602,1603],{},"GS",[865,1605,1606],{},"61",[865,1608,725],{},[865,1610,1611],{},"93",[865,1613,1614],{},"]",[865,1616,1617],{},"125",[865,1619,1620],{},"}",[820,1622,1623,1626,1629,1632,1635,1638,1641,1644],{},[865,1624,1625],{},"30",[865,1627,1628],{},"RS",[865,1630,1631],{},"62",[865,1633,1634],{},">",[865,1636,1637],{},"94",[865,1639,1640],{},"^",[865,1642,1643],{},"126",[865,1645,1646],{},"`",[820,1648,1649,1652,1655,1658,1661,1664,1667,1670],{},[865,1650,1651],{},"31",[865,1653,1654],{},"US",[865,1656,1657],{},"63",[865,1659,1660],{},"?",[865,1662,1663],{},"95",[865,1665,1666],{},"_",[865,1668,1669],{},"127",[865,1671,1672],{},"DEL",[19,1674,1675,1676,1679],{},"ASCII 码大致由以下",[30,1677,1678],{},"两部分组","成：",[1681,1682,1683,1690],"ul",{},[635,1684,1685,1686,1689],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[30,1687,1688],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[635,1691,1692,1693,1696],{},"ASCII 打印字符：数字 ",[30,1694,1695],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[62,1698,1700],{"id":1699},"_134转义字符","1.3.4转义字符",[117,1702,1704],{"className":669,"code":1703,"language":671,"meta":122,"style":122},"\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",[124,1705,1706,1711,1727,1741,1746,1759,1764],{"__ignoreMap":122},[127,1707,1708],{"class":129,"line":130},[127,1709,1710],{"class":133},"\u002F\u002F换行符\n",[127,1712,1713,1716,1719,1722,1724],{"class":129,"line":137},[127,1714,1715],{"class":147},"cout ",[127,1717,1718],{"class":290},"\u003C\u003C",[127,1720,1721],{"class":781},"\"hello world\u002Fn\"",[127,1723,734],{"class":147},[127,1725,1726],{"class":133}," \u002F\u002F就等同于如下：\n",[127,1728,1729,1731,1733,1736,1738],{"class":129,"line":151},[127,1730,1715],{"class":147},[127,1732,1718],{"class":290},[127,1734,1735],{"class":781},"\"hello world\"",[127,1737,1718],{"class":290},[127,1739,1740],{"class":147},"endl;\n",[127,1742,1743],{"class":129,"line":167},[127,1744,1745],{"class":133},"\u002F\u002F反斜杠\n",[127,1747,1748,1750,1752,1755,1757],{"class":129,"line":415},[127,1749,1715],{"class":147},[127,1751,1718],{"class":290},[127,1753,1754],{"class":781},"\"\u002F\u002F\"",[127,1756,1718],{"class":290},[127,1758,1740],{"class":147},[127,1760,1761],{"class":129,"line":421},[127,1762,1763],{"class":133},"\u002F\u002F水平制表符\n",[127,1765,1767,1769,1771,1774,1777,1780,1782,1785],{"class":129,"line":1766},7,[127,1768,1715],{"class":147},[127,1770,1718],{"class":290},[127,1772,1773],{"class":781},"\"aaaa",[127,1775,1776],{"class":154},"\\t",[127,1778,1779],{"class":781},"helloworld\"",[127,1781,1718],{"class":290},[127,1783,1784],{"class":147},"endl;",[127,1786,1787],{"class":133}," \u002F\u002F输出窗口时有对齐效果\n",[62,1789,1791],{"id":1790},"_135字符串型","1.3.5字符串型",[19,1793,1794,1795,1797],{},"char 变量名",[127,1796],{},"=\"字符串值\"",[117,1799,1801],{"className":669,"code":1800,"language":671,"meta":122,"style":122},"\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",[124,1802,1803,1808,1813,1818,1823,1836,1849,1854,1860,1872],{"__ignoreMap":122},[127,1804,1805],{"class":129,"line":130},[127,1806,1807],{"class":133},"\u002F\u002Fc风格字符串\n",[127,1809,1810],{"class":129,"line":137},[127,1811,1812],{"class":133},"\u002F\u002F注意事项：\n",[127,1814,1815],{"class":129,"line":151},[127,1816,1817],{"class":133},"\u002F\u002F1.char字符串名[]\n",[127,1819,1820],{"class":129,"line":167},[127,1821,1822],{"class":133},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[127,1824,1825,1827,1830,1832,1834],{"class":129,"line":415},[127,1826,773],{"class":290},[127,1828,1829],{"class":147}," str[]",[127,1831,725],{"class":290},[127,1833,1735],{"class":781},[127,1835,164],{"class":147},[127,1837,1838,1840,1842,1845,1847],{"class":129,"line":421},[127,1839,1715],{"class":147},[127,1841,1718],{"class":290},[127,1843,1844],{"class":147},"str",[127,1846,1718],{"class":290},[127,1848,1740],{"class":147},[127,1850,1851],{"class":129,"line":1766},[127,1852,1853],{"class":133},"\u002F\u002Fc++风格字符串\n",[127,1855,1857],{"class":129,"line":1856},8,[127,1858,1859],{"class":133},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[127,1861,1863,1866,1868,1870],{"class":129,"line":1862},9,[127,1864,1865],{"class":147},"string str2",[127,1867,725],{"class":290},[127,1869,1735],{"class":781},[127,1871,164],{"class":147},[127,1873,1875,1877,1879,1882,1884],{"class":129,"line":1874},10,[127,1876,1715],{"class":147},[127,1878,1718],{"class":290},[127,1880,1881],{"class":147},"str2",[127,1883,1718],{"class":290},[127,1885,1740],{"class":147},[62,1887,1889],{"id":1888},"_136布尔类型bool","1.3.6布尔类型bool",[117,1891,1893],{"className":669,"code":1892,"language":671,"meta":122,"style":122},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[124,1894,1895,1910],{"__ignoreMap":122},[127,1896,1897,1900,1903,1905,1908],{"class":129,"line":130},[127,1898,1899],{"class":290},"bool",[127,1901,1902],{"class":147}," flag",[127,1904,725],{"class":290},[127,1906,1907],{"class":154},"true",[127,1909,164],{"class":147},[127,1911,1912,1915,1918,1921,1923,1925],{"class":129,"line":137},[127,1913,1914],{"class":147},"cout",[127,1916,1917],{"class":290},"\u003C\u003Csizeof",[127,1919,1920],{"class":147},"(flag)",[127,1922,1718],{"class":290},[127,1924,1784],{"class":147},[127,1926,1927],{"class":133}," \u002F\u002F查看布尔占内存空间\n",[14,1929,1931],{"id":1930},"_14键盘输入cin","1.4键盘输入cin",[117,1933,1935],{"className":669,"code":1934,"language":671,"meta":122,"style":122},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[124,1936,1937,1950,1967,1978],{"__ignoreMap":122},[127,1938,1939,1941,1944,1946,1948],{"class":129,"line":130},[127,1940,684],{"class":290},[127,1942,1943],{"class":147}," a",[127,1945,725],{"class":290},[127,1947,867],{"class":154},[127,1949,164],{"class":147},[127,1951,1952,1954,1956,1959,1961,1963,1965],{"class":129,"line":137},[127,1953,1914],{"class":147},[127,1955,1718],{"class":290},[127,1957,1958],{"class":781},"\"请给整型变量a赋值\"",[127,1960,1718],{"class":290},[127,1962,457],{"class":147},[127,1964,1718],{"class":290},[127,1966,1740],{"class":147},[127,1968,1969,1972,1975],{"class":129,"line":151},[127,1970,1971],{"class":147},"cin ",[127,1973,1974],{"class":290},">>",[127,1976,1977],{"class":147}," a;\n",[127,1979,1980,1982,1984,1987,1990,1992,1994],{"class":129,"line":167},[127,1981,1715],{"class":147},[127,1983,1718],{"class":290},[127,1985,1986],{"class":781}," \"整型变量a=\"",[127,1988,1989],{"class":290}," \u003C\u003C",[127,1991,457],{"class":147},[127,1993,1718],{"class":290},[127,1995,1740],{"class":147},[14,1997,1999],{"id":1998},"_15运算符","1.5运算符",[62,2001,2003],{"id":2002},"_151算术运算符","1.5.1算术运算符",[19,2005,2006,2009],{},[23,2007],{"alt":122,"src":2008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[632,2011,2012,2015,2018],{},[635,2013,2014],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[635,2016,2017],{},"两个小数不可以做取模运算",[635,2019,2020],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[62,2022,2024],{"id":2023},"_152赋值运算符","1.5.2赋值运算符",[19,2026,2027],{},[23,2028],{"alt":122,"src":2029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[62,2031,2033],{"id":2032},"_153比较运算符","1.5.3比较运算符",[19,2035,2036],{},[23,2037],{"alt":122,"src":2038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[62,2040,2042],{"id":2041},"_154逻辑运算符","1.5.4逻辑运算符",[19,2044,2045],{},[23,2046],{"alt":122,"src":2047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2049,2051],{"id":2050},"_16程序流程结构","1.6程序流程结构",[62,2053,2055],{"id":2054},"_161选择结构","1.6.1选择结构",[632,2057,2058],{},[635,2059,2060],{},"if语句\n单行、多行、多条件if语句",[117,2062,2064],{"className":669,"code":2063,"language":671,"meta":122,"style":122},"\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",[124,2065,2066,2071,2086,2091,2105,2109,2114,2123,2136,2140,2153,2158,2164,2169,2183,2188,2194,2215,2220,2234,2239,2268,2273,2290,2295,2300,2305,2319,2324],{"__ignoreMap":122},[127,2067,2068],{"class":129,"line":130},[127,2069,2070],{"class":133},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[127,2072,2073,2076,2079,2081,2084],{"class":129,"line":137},[127,2074,2075],{"class":290},"if",[127,2077,2078],{"class":147},"(score",[127,2080,1634],{"class":290},[127,2082,2083],{"class":154},"600",[127,2085,687],{"class":147},[127,2087,2088],{"class":129,"line":151},[127,2089,2090],{"class":147},"{\n",[127,2092,2093,2096,2098,2101,2103],{"class":129,"line":167},[127,2094,2095],{"class":147},"    cout",[127,2097,1718],{"class":290},[127,2099,2100],{"class":781},"'这是单行if语句'",[127,2102,1718],{"class":290},[127,2104,1740],{"class":147},[127,2106,2107],{"class":129,"line":415},[127,2108,170],{"class":147},[127,2110,2111],{"class":129,"line":421},[127,2112,2113],{"class":133},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[127,2115,2116,2118,2120],{"class":129,"line":1766},[127,2117,1971],{"class":147},[127,2119,1974],{"class":290},[127,2121,2122],{"class":147}," score\n",[127,2124,2125,2127,2129,2132,2134],{"class":129,"line":1856},[127,2126,2075],{"class":290},[127,2128,2078],{"class":147},[127,2130,2131],{"class":290},"\u003C=",[127,2133,2083],{"class":154},[127,2135,687],{"class":147},[127,2137,2138],{"class":129,"line":1862},[127,2139,2090],{"class":147},[127,2141,2142,2144,2146,2149,2151],{"class":129,"line":1874},[127,2143,2095],{"class":147},[127,2145,1974],{"class":290},[127,2147,2148],{"class":781},"\"小于等于600\"",[127,2150,1718],{"class":290},[127,2152,1740],{"class":147},[127,2154,2156],{"class":129,"line":2155},11,[127,2157,170],{"class":147},[127,2159,2161],{"class":129,"line":2160},12,[127,2162,2163],{"class":290},"else\n",[127,2165,2167],{"class":129,"line":2166},13,[127,2168,2090],{"class":147},[127,2170,2172,2174,2176,2179,2181],{"class":129,"line":2171},14,[127,2173,2095],{"class":147},[127,2175,1974],{"class":290},[127,2177,2178],{"class":781},"\"大于600\"",[127,2180,1974],{"class":290},[127,2182,1740],{"class":147},[127,2184,2186],{"class":129,"line":2185},15,[127,2187,170],{"class":147},[127,2189,2191],{"class":129,"line":2190},16,[127,2192,2193],{"class":133},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[127,2195,2197,2199,2202,2204,2206,2209,2211,2213],{"class":129,"line":2196},17,[127,2198,2075],{"class":290},[127,2200,2201],{"class":147}," (",[127,2203,867],{"class":154},[127,2205,1584],{"class":290},[127,2207,2208],{"class":147},"num",[127,2210,1584],{"class":290},[127,2212,986],{"class":154},[127,2214,687],{"class":147},[127,2216,2218],{"class":129,"line":2217},18,[127,2219,2090],{"class":147},[127,2221,2223,2225,2227,2230,2232],{"class":129,"line":2222},19,[127,2224,2095],{"class":147},[127,2226,1718],{"class":290},[127,2228,2229],{"class":781},"\"小于100\"",[127,2231,1718],{"class":290},[127,2233,1740],{"class":147},[127,2235,2237],{"class":129,"line":2236},20,[127,2238,170],{"class":147},[127,2240,2242,2245,2248,2251,2254,2256,2259,2261,2263,2266],{"class":129,"line":2241},21,[127,2243,2244],{"class":290},"else",[127,2246,2247],{"class":290}," if",[127,2249,2250],{"class":147}," (nmu",[127,2252,2253],{"class":290},">=",[127,2255,986],{"class":154},[127,2257,2258],{"class":290},"&&",[127,2260,2208],{"class":147},[127,2262,1584],{"class":290},[127,2264,2265],{"class":154},"200",[127,2267,687],{"class":147},[127,2269,2271],{"class":129,"line":2270},22,[127,2272,2090],{"class":147},[127,2274,2276,2278,2280,2283,2285,2287],{"class":129,"line":2275},23,[127,2277,2095],{"class":147},[127,2279,1718],{"class":290},[127,2281,2282],{"class":781},"\"不小于100且小于200\"",[127,2284,1718],{"class":290},[127,2286,1784],{"class":147},[127,2288,2289],{"class":133}," \u002F\u002F可以无限else if,python中是elif：\n",[127,2291,2293],{"class":129,"line":2292},24,[127,2294,170],{"class":147},[127,2296,2298],{"class":129,"line":2297},25,[127,2299,2163],{"class":290},[127,2301,2303],{"class":129,"line":2302},26,[127,2304,2090],{"class":147},[127,2306,2308,2310,2312,2315,2317],{"class":129,"line":2307},27,[127,2309,2095],{"class":147},[127,2311,1718],{"class":290},[127,2313,2314],{"class":781},"\"不小于200\"",[127,2316,1718],{"class":290},[127,2318,1740],{"class":147},[127,2320,2322],{"class":129,"line":2321},28,[127,2323,170],{"class":147},[127,2325,2327],{"class":129,"line":2326},29,[127,2328,2329],{"class":133},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[632,2331,2332],{"start":137},[635,2333,2334],{},"三目运算符",[117,2336,2338],{"className":669,"code":2337,"language":671,"meta":122,"style":122},"\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",[124,2339,2340,2345,2350,2376,2398,2415,2420,2443,2458],{"__ignoreMap":122},[127,2341,2342],{"class":129,"line":130},[127,2343,2344],{"class":133},"\u002F\u002F创建三个变量a,b,c\n",[127,2346,2347],{"class":129,"line":137},[127,2348,2349],{"class":133},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[127,2351,2352,2354,2356,2358,2360,2363,2365,2367,2370,2372,2374],{"class":129,"line":151},[127,2353,684],{"class":290},[127,2355,1943],{"class":147},[127,2357,725],{"class":290},[127,2359,1374],{"class":154},[127,2361,2362],{"class":147},",b",[127,2364,725],{"class":290},[127,2366,1121],{"class":154},[127,2368,2369],{"class":147},",c",[127,2371,725],{"class":290},[127,2373,867],{"class":154},[127,2375,164],{"class":147},[127,2377,2378,2380,2382,2385,2387,2389,2391,2393,2395],{"class":129,"line":167},[127,2379,963],{"class":147},[127,2381,725],{"class":290},[127,2383,2384],{"class":147},"(a",[127,2386,1634],{"class":290},[127,2388,938],{"class":147},[127,2390,1660],{"class":290},[127,2392,457],{"class":147},[127,2394,1533],{"class":290},[127,2396,2397],{"class":147},"b)\n",[127,2399,2400,2402,2404,2407,2409,2411,2413],{"class":129,"line":415},[127,2401,1914],{"class":147},[127,2403,1718],{"class":290},[127,2405,2406],{"class":781},"\"c=\"",[127,2408,1718],{"class":290},[127,2410,963],{"class":147},[127,2412,1718],{"class":290},[127,2414,1740],{"class":147},[127,2416,2417],{"class":129,"line":421},[127,2418,2419],{"class":133},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[127,2421,2422,2424,2426,2428,2430,2432,2434,2437,2439,2441],{"class":129,"line":1766},[127,2423,2384],{"class":147},[127,2425,1634],{"class":290},[127,2427,938],{"class":147},[127,2429,1660],{"class":290},[127,2431,457],{"class":147},[127,2433,1533],{"class":290},[127,2435,2436],{"class":147},"b)",[127,2438,725],{"class":290},[127,2440,986],{"class":154},[127,2442,164],{"class":147},[127,2444,2445,2447,2449,2451,2453,2455],{"class":129,"line":1856},[127,2446,1914],{"class":147},[127,2448,1718],{"class":290},[127,2450,457],{"class":147},[127,2452,1718],{"class":290},[127,2454,1784],{"class":147},[127,2456,2457],{"class":133}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[127,2459,2460,2462,2464,2466,2468,2470],{"class":129,"line":1862},[127,2461,1914],{"class":147},[127,2463,1718],{"class":290},[127,2465,938],{"class":147},[127,2467,1718],{"class":290},[127,2469,1784],{"class":147},[127,2471,2472],{"class":133}," \u002F\u002F10   a>b,b还是原值\n",[632,2474,2475],{"start":151},[635,2476,2477],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[117,2479,2481],{"className":669,"code":2480,"language":671,"meta":122,"style":122},"\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",[124,2482,2483,2488,2496,2509,2519,2523,2537,2550,2560,2568,2573,2598,2619,2641,2662,2684,2705,2725,2730],{"__ignoreMap":122},[127,2484,2485],{"class":129,"line":130},[127,2486,2487],{"class":133},"\u002F\u002F案例-电影打分\n",[127,2489,2490,2493],{"class":129,"line":137},[127,2491,2492],{"class":290},"#include",[127,2494,2495],{"class":781},"\u003Ciostream>\n",[127,2497,2498,2501,2504,2507],{"class":129,"line":151},[127,2499,2500],{"class":290},"using",[127,2502,2503],{"class":290}," namespace",[127,2505,2506],{"class":143}," std",[127,2508,164],{"class":147},[127,2510,2511,2513,2516],{"class":129,"line":167},[127,2512,684],{"class":290},[127,2514,2515],{"class":143}," main",[127,2517,2518],{"class":147},"()\n",[127,2520,2521],{"class":129,"line":415},[127,2522,2090],{"class":147},[127,2524,2525,2528,2531,2533,2535],{"class":129,"line":421},[127,2526,2527],{"class":290},"    int",[127,2529,2530],{"class":147}," score",[127,2532,725],{"class":290},[127,2534,867],{"class":154},[127,2536,164],{"class":147},[127,2538,2539,2541,2543,2546,2548],{"class":129,"line":1766},[127,2540,2095],{"class":147},[127,2542,1718],{"class":290},[127,2544,2545],{"class":781},"\"电影打分：\"",[127,2547,1718],{"class":290},[127,2549,1740],{"class":147},[127,2551,2552,2555,2557],{"class":129,"line":1856},[127,2553,2554],{"class":147},"    cin",[127,2556,1974],{"class":290},[127,2558,2559],{"class":147},"score;\n",[127,2561,2562,2565],{"class":129,"line":1862},[127,2563,2564],{"class":290},"    switch",[127,2566,2567],{"class":147},"(score)\n",[127,2569,2570],{"class":129,"line":1874},[127,2571,2572],{"class":147},"    {\n",[127,2574,2575,2578,2581,2584,2586,2589,2591,2593,2596],{"class":129,"line":2155},[127,2576,2577],{"class":290},"        case",[127,2579,2580],{"class":154}," 10",[127,2582,2583],{"class":147},":cout",[127,2585,1718],{"class":290},[127,2587,2588],{"class":781},"\"经典\"",[127,2590,1718],{"class":290},[127,2592,1784],{"class":147},[127,2594,2595],{"class":290},"break",[127,2597,164],{"class":147},[127,2599,2600,2602,2605,2607,2609,2611,2613,2615,2617],{"class":129,"line":2160},[127,2601,2577],{"class":290},[127,2603,2604],{"class":154}," 9",[127,2606,2583],{"class":147},[127,2608,1718],{"class":290},[127,2610,2588],{"class":781},[127,2612,1718],{"class":290},[127,2614,1784],{"class":147},[127,2616,2595],{"class":290},[127,2618,164],{"class":147},[127,2620,2621,2623,2626,2628,2630,2633,2635,2637,2639],{"class":129,"line":2166},[127,2622,2577],{"class":290},[127,2624,2625],{"class":154}," 8",[127,2627,2583],{"class":147},[127,2629,1718],{"class":290},[127,2631,2632],{"class":781},"\"非常好\"",[127,2634,1718],{"class":290},[127,2636,1784],{"class":147},[127,2638,2595],{"class":290},[127,2640,164],{"class":147},[127,2642,2643,2645,2648,2650,2652,2654,2656,2658,2660],{"class":129,"line":2171},[127,2644,2577],{"class":290},[127,2646,2647],{"class":154}," 7",[127,2649,2583],{"class":147},[127,2651,1718],{"class":290},[127,2653,2632],{"class":781},[127,2655,1718],{"class":290},[127,2657,1784],{"class":147},[127,2659,2595],{"class":290},[127,2661,164],{"class":147},[127,2663,2664,2666,2669,2671,2673,2676,2678,2680,2682],{"class":129,"line":2185},[127,2665,2577],{"class":290},[127,2667,2668],{"class":154}," 6",[127,2670,2583],{"class":147},[127,2672,1718],{"class":290},[127,2674,2675],{"class":781},"\"一般\"",[127,2677,1718],{"class":290},[127,2679,1784],{"class":147},[127,2681,2595],{"class":290},[127,2683,164],{"class":147},[127,2685,2686,2688,2691,2693,2695,2697,2699,2701,2703],{"class":129,"line":2190},[127,2687,2577],{"class":290},[127,2689,2690],{"class":154}," 5",[127,2692,2583],{"class":147},[127,2694,1718],{"class":290},[127,2696,2675],{"class":781},[127,2698,1718],{"class":290},[127,2700,1784],{"class":147},[127,2702,2595],{"class":290},[127,2704,164],{"class":147},[127,2706,2707,2710,2712,2714,2717,2719,2721,2723],{"class":129,"line":2196},[127,2708,2709],{"class":290},"        default",[127,2711,2583],{"class":147},[127,2713,1718],{"class":290},[127,2715,2716],{"class":781},"\"烂片\"",[127,2718,1718],{"class":290},[127,2720,1784],{"class":147},[127,2722,2595],{"class":290},[127,2724,164],{"class":147},[127,2726,2727],{"class":129,"line":2217},[127,2728,2729],{"class":147},"    }\n",[127,2731,2732],{"class":129,"line":2222},[127,2733,170],{"class":147},[19,2735,2736],{},"if和switch区别：",[1681,2738,2739,2742],{},[635,2740,2741],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[635,2743,2744],{},"switch优点：结构清晰，执行效率高",[62,2746,2748],{"id":2747},"_162循环结构","1.6.2循环结构",[632,2750,2751],{},[635,2752,2753],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[117,2755,2757],{"className":669,"code":2756,"language":671,"meta":122,"style":122},"\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",[124,2758,2759,2764,2772,2776,2789,2803,2807,2827,2837,2841,2853],{"__ignoreMap":122},[127,2760,2761],{"class":129,"line":130},[127,2762,2763],{"class":133},"\u002F\u002F打印0-9数字\n",[127,2765,2766,2768,2770],{"class":129,"line":137},[127,2767,684],{"class":290},[127,2769,2515],{"class":143},[127,2771,2518],{"class":147},[127,2773,2774],{"class":129,"line":151},[127,2775,2090],{"class":147},[127,2777,2778,2780,2783,2785,2787],{"class":129,"line":167},[127,2779,2527],{"class":290},[127,2781,2782],{"class":147}," num",[127,2784,725],{"class":290},[127,2786,867],{"class":154},[127,2788,164],{"class":147},[127,2790,2791,2794,2797,2799,2801],{"class":129,"line":415},[127,2792,2793],{"class":290},"    while",[127,2795,2796],{"class":147},"(num",[127,2798,1584],{"class":290},[127,2800,1121],{"class":154},[127,2802,687],{"class":147},[127,2804,2805],{"class":129,"line":421},[127,2806,2572],{"class":147},[127,2808,2809,2812,2815,2817,2819,2821,2824],{"class":129,"line":1766},[127,2810,2811],{"class":143},"       std",[127,2813,2814],{"class":147},"::cout",[127,2816,1718],{"class":290},[127,2818,2208],{"class":147},[127,2820,1718],{"class":290},[127,2822,2823],{"class":143},"std",[127,2825,2826],{"class":147},"::endl;\n",[127,2828,2829,2832,2835],{"class":129,"line":1856},[127,2830,2831],{"class":147},"        num",[127,2833,2834],{"class":290},"++",[127,2836,164],{"class":147},[127,2838,2839],{"class":129,"line":1862},[127,2840,2729],{"class":147},[127,2842,2843,2846,2848,2851],{"class":129,"line":1874},[127,2844,2845],{"class":143},"    system",[127,2847,681],{"class":147},[127,2849,2850],{"class":781},"\"pause\"",[127,2852,687],{"class":147},[127,2854,2855],{"class":129,"line":2155},[127,2856,170],{"class":147},[19,2858,2859],{},"注意：写好循环条件，避免死循环情况",[117,2861,2863],{"className":669,"code":2862,"language":671,"meta":122,"style":122},"\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",[124,2864,2865,2870,2877,2884,2894,2902,2906,2911,2938,2943,2948,2956,2983,2988,2993,3006,3016,3020,3030,3035,3048,3053,3067,3072,3087,3091,3104,3108,3113,3117,3131,3139,3144,3150,3156,3161],{"__ignoreMap":122},[127,2866,2867],{"class":129,"line":130},[127,2868,2869],{"class":133},"\u002F\u002F循环结构-猜数字\n",[127,2871,2872,2874],{"class":129,"line":137},[127,2873,2492],{"class":290},[127,2875,2876],{"class":781}," \u003Ciostream>\n",[127,2878,2879,2881],{"class":129,"line":151},[127,2880,2492],{"class":290},[127,2882,2883],{"class":781}," \u003Cctime>\n",[127,2885,2886,2888,2890,2892],{"class":129,"line":167},[127,2887,2500],{"class":290},[127,2889,2503],{"class":290},[127,2891,2506],{"class":143},[127,2893,164],{"class":147},[127,2895,2896,2898,2900],{"class":129,"line":415},[127,2897,684],{"class":290},[127,2899,2515],{"class":143},[127,2901,2518],{"class":147},[127,2903,2904],{"class":129,"line":421},[127,2905,2090],{"class":147},[127,2907,2908],{"class":129,"line":1766},[127,2909,2910],{"class":133},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[127,2912,2913,2916,2919,2922,2925,2927,2930,2932,2935],{"class":129,"line":1856},[127,2914,2915],{"class":143},"    srand",[127,2917,2918],{"class":147},"((",[127,2920,2921],{"class":290},"unsigned",[127,2923,2924],{"class":290}," int",[127,2926,1104],{"class":147},[127,2928,2929],{"class":143},"time",[127,2931,681],{"class":147},[127,2933,2934],{"class":154},"NULL",[127,2936,2937],{"class":147},"));\n",[127,2939,2940],{"class":129,"line":1862},[127,2941,2942],{"emptyLinePlaceholder":606},"\n",[127,2944,2945],{"class":129,"line":1874},[127,2946,2947],{"class":133},"    \u002F\u002F1.系统生成随机数\n",[127,2949,2950,2953],{"class":129,"line":2155},[127,2951,2952],{"class":133},"    \u002F\u002Frand()%100",[127,2954,2955],{"class":133}," \u002F\u002F生成0-99的随机数\n",[127,2957,2958,2960,2962,2964,2967,2970,2972,2974,2976,2978,2980],{"class":129,"line":2160},[127,2959,2527],{"class":290},[127,2961,2782],{"class":147},[127,2963,725],{"class":290},[127,2965,2966],{"class":143},"rand",[127,2968,2969],{"class":147},"()",[127,2971,1003],{"class":290},[127,2973,986],{"class":154},[127,2975,1156],{"class":290},[127,2977,893],{"class":154},[127,2979,734],{"class":147},[127,2981,2982],{"class":133}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[127,2984,2985],{"class":129,"line":2166},[127,2986,2987],{"class":133},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[127,2989,2990],{"class":129,"line":2171},[127,2991,2992],{"class":133},"    \u002F\u002F2.玩家猜测\n",[127,2994,2995,2997,3000,3002,3004],{"class":129,"line":2185},[127,2996,2527],{"class":290},[127,2998,2999],{"class":147}," val",[127,3001,725],{"class":290},[127,3003,867],{"class":154},[127,3005,164],{"class":147},[127,3007,3008,3010,3012,3014],{"class":129,"line":2190},[127,3009,2793],{"class":290},[127,3011,2201],{"class":147},[127,3013,893],{"class":154},[127,3015,687],{"class":147},[127,3017,3018],{"class":129,"line":2196},[127,3019,2572],{"class":147},[127,3021,3022,3025,3027],{"class":129,"line":2217},[127,3023,3024],{"class":147},"        cin",[127,3026,1974],{"class":290},[127,3028,3029],{"class":147},"val;\n",[127,3031,3032],{"class":129,"line":2222},[127,3033,3034],{"class":133},"        \u002F\u002F3.判断玩家猜测\n",[127,3036,3037,3040,3043,3045],{"class":129,"line":2236},[127,3038,3039],{"class":290},"        if",[127,3041,3042],{"class":147},"(val",[127,3044,1584],{"class":290},[127,3046,3047],{"class":147},"num) \n",[127,3049,3050],{"class":129,"line":2241},[127,3051,3052],{"class":147},"        {\n",[127,3054,3055,3058,3060,3063,3065],{"class":129,"line":2270},[127,3056,3057],{"class":147},"            cout",[127,3059,1718],{"class":290},[127,3061,3062],{"class":781},"\"猜小了！\"",[127,3064,1718],{"class":290},[127,3066,1740],{"class":147},[127,3068,3069],{"class":129,"line":2275},[127,3070,3071],{"class":147},"        }\n",[127,3073,3074,3077,3079,3082,3084],{"class":129,"line":2292},[127,3075,3076],{"class":290},"        else",[127,3078,2247],{"class":290},[127,3080,3081],{"class":147}," (val",[127,3083,1634],{"class":290},[127,3085,3086],{"class":147},"num)\n",[127,3088,3089],{"class":129,"line":2297},[127,3090,3052],{"class":147},[127,3092,3093,3095,3097,3100,3102],{"class":129,"line":2302},[127,3094,3057],{"class":147},[127,3096,1718],{"class":290},[127,3098,3099],{"class":781},"\"猜大了！\"",[127,3101,1718],{"class":290},[127,3103,1740],{"class":147},[127,3105,3106],{"class":129,"line":2307},[127,3107,3071],{"class":147},[127,3109,3110],{"class":129,"line":2321},[127,3111,3112],{"class":290},"        else\n",[127,3114,3115],{"class":129,"line":2326},[127,3116,3052],{"class":147},[127,3118,3120,3122,3124,3127,3129],{"class":129,"line":3119},30,[127,3121,3057],{"class":147},[127,3123,1718],{"class":290},[127,3125,3126],{"class":781},"\"猜对了！\"",[127,3128,1718],{"class":290},[127,3130,1740],{"class":147},[127,3132,3134,3137],{"class":129,"line":3133},31,[127,3135,3136],{"class":290},"            break",[127,3138,164],{"class":147},[127,3140,3142],{"class":129,"line":3141},32,[127,3143,3071],{"class":147},[127,3145,3147],{"class":129,"line":3146},33,[127,3148,3149],{"class":133},"        \u002F\u002F猜对 退出游戏\n",[127,3151,3153],{"class":129,"line":3152},34,[127,3154,3155],{"class":133},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[127,3157,3159],{"class":129,"line":3158},35,[127,3160,2729],{"class":147},[127,3162,3164],{"class":129,"line":3163},36,[127,3165,170],{"class":147},[632,3167,3168],{"start":137},[635,3169,3170,3171,3174],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[30,3172,3173],{},"do...while会先执行一次循环语句","，在判断循环语句",[117,3176,3178],{"className":669,"code":3177,"language":671,"meta":122,"style":122},"\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",[124,3179,3180,3185,3193,3197,3209,3217,3221,3238,3245,3249,3262,3272],{"__ignoreMap":122},[127,3181,3182],{"class":129,"line":130},[127,3183,3184],{"class":133},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[127,3186,3187,3189,3191],{"class":129,"line":137},[127,3188,684],{"class":290},[127,3190,2515],{"class":143},[127,3192,2518],{"class":147},[127,3194,3195],{"class":129,"line":151},[127,3196,2090],{"class":147},[127,3198,3199,3201,3203,3205,3207],{"class":129,"line":167},[127,3200,2527],{"class":290},[127,3202,2782],{"class":147},[127,3204,725],{"class":290},[127,3206,867],{"class":154},[127,3208,164],{"class":147},[127,3210,3211,3214],{"class":129,"line":415},[127,3212,3213],{"class":290},"    do",[127,3215,3216],{"class":147}," \n",[127,3218,3219],{"class":129,"line":421},[127,3220,2572],{"class":147},[127,3222,3223,3226,3228,3230,3232,3234,3236],{"class":129,"line":1766},[127,3224,3225],{"class":143},"        std",[127,3227,2814],{"class":147},[127,3229,1718],{"class":290},[127,3231,2208],{"class":147},[127,3233,1718],{"class":290},[127,3235,2823],{"class":143},[127,3237,2826],{"class":147},[127,3239,3240,3242],{"class":129,"line":1856},[127,3241,2831],{"class":147},[127,3243,3244],{"class":290},"++\n",[127,3246,3247],{"class":129,"line":1862},[127,3248,2729],{"class":147},[127,3250,3251,3253,3255,3257,3259],{"class":129,"line":1874},[127,3252,2793],{"class":290},[127,3254,2796],{"class":147},[127,3256,1584],{"class":290},[127,3258,1121],{"class":154},[127,3260,3261],{"class":147},");\n",[127,3263,3264,3266,3268,3270],{"class":129,"line":2155},[127,3265,2845],{"class":143},[127,3267,681],{"class":147},[127,3269,2850],{"class":781},[127,3271,3261],{"class":147},[127,3273,3274],{"class":129,"line":2160},[127,3275,170],{"class":147},[19,3277,3278],{},"案例-水仙花数",[19,3280,3281],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3283,3284],{},"例如：1^3+5^3+3^3=153",[19,3286,3287],{},"请用do...while语句，求出所有3位数的水仙花数",[117,3289,3291],{"className":669,"code":3290,"language":671,"meta":122,"style":122},"#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",[124,3292,3293,3299,3309,3317,3321,3326,3338,3344,3348,3353,3369,3385,3401,3416,3435,3450,3498,3502,3514,3518,3526,3530,3544],{"__ignoreMap":122},[127,3294,3295,3297],{"class":129,"line":130},[127,3296,2492],{"class":290},[127,3298,2876],{"class":781},[127,3300,3301,3303,3305,3307],{"class":129,"line":137},[127,3302,2500],{"class":290},[127,3304,2503],{"class":290},[127,3306,2506],{"class":143},[127,3308,164],{"class":147},[127,3310,3311,3313,3315],{"class":129,"line":151},[127,3312,684],{"class":290},[127,3314,2515],{"class":143},[127,3316,2518],{"class":147},[127,3318,3319],{"class":129,"line":167},[127,3320,2090],{"class":147},[127,3322,3323],{"class":129,"line":415},[127,3324,3325],{"class":133},"    \u002F\u002F1.先打印所有三位数字\n",[127,3327,3328,3330,3332,3334,3336],{"class":129,"line":421},[127,3329,2527],{"class":290},[127,3331,2782],{"class":147},[127,3333,725],{"class":290},[127,3335,986],{"class":154},[127,3337,164],{"class":147},[127,3339,3340,3342],{"class":129,"line":1766},[127,3341,3213],{"class":290},[127,3343,3216],{"class":147},[127,3345,3346],{"class":129,"line":1856},[127,3347,2572],{"class":147},[127,3349,3350],{"class":129,"line":1862},[127,3351,3352],{"class":133},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[127,3354,3355,3358,3360,3362,3364,3366],{"class":129,"line":1874},[127,3356,3357],{"class":290},"        int",[127,3359,1943],{"class":147},[127,3361,725],{"class":290},[127,3363,867],{"class":154},[127,3365,734],{"class":147},[127,3367,3368],{"class":133}," \u002F\u002F个位\n",[127,3370,3371,3373,3376,3378,3380,3382],{"class":129,"line":2155},[127,3372,3357],{"class":290},[127,3374,3375],{"class":147}," b",[127,3377,725],{"class":290},[127,3379,867],{"class":154},[127,3381,734],{"class":147},[127,3383,3384],{"class":133}," \u002F\u002F十位\n",[127,3386,3387,3389,3392,3394,3396,3398],{"class":129,"line":2160},[127,3388,3357],{"class":290},[127,3390,3391],{"class":147}," c",[127,3393,725],{"class":290},[127,3395,867],{"class":154},[127,3397,734],{"class":147},[127,3399,3400],{"class":133}," \u002F\u002F百位\n",[127,3402,3403,3406,3408,3410,3412,3414],{"class":129,"line":2166},[127,3404,3405],{"class":147},"        a",[127,3407,725],{"class":290},[127,3409,2208],{"class":147},[127,3411,1003],{"class":290},[127,3413,1121],{"class":154},[127,3415,164],{"class":147},[127,3417,3418,3421,3423,3425,3427,3429,3431,3433],{"class":129,"line":2171},[127,3419,3420],{"class":147},"        b",[127,3422,725],{"class":290},[127,3424,2208],{"class":147},[127,3426,1259],{"class":290},[127,3428,1121],{"class":154},[127,3430,1003],{"class":290},[127,3432,1121],{"class":154},[127,3434,164],{"class":147},[127,3436,3437,3440,3442,3444,3446,3448],{"class":129,"line":2185},[127,3438,3439],{"class":147},"        c",[127,3441,725],{"class":290},[127,3443,2208],{"class":147},[127,3445,1259],{"class":290},[127,3447,986],{"class":154},[127,3449,164],{"class":147},[127,3451,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3489,3492,3495],{"class":129,"line":2190},[127,3453,3039],{"class":290},[127,3455,2384],{"class":147},[127,3457,1130],{"class":290},[127,3459,457],{"class":147},[127,3461,1130],{"class":290},[127,3463,457],{"class":147},[127,3465,1156],{"class":290},[127,3467,938],{"class":147},[127,3469,1130],{"class":290},[127,3471,938],{"class":147},[127,3473,1130],{"class":290},[127,3475,938],{"class":147},[127,3477,1156],{"class":290},[127,3479,963],{"class":147},[127,3481,1130],{"class":290},[127,3483,963],{"class":147},[127,3485,1130],{"class":290},[127,3487,3488],{"class":147},"c ",[127,3490,3491],{"class":290},"==",[127,3493,3494],{"class":147}," num)",[127,3496,3497],{"class":133}," \u002F\u002F如果是水仙花数，才打印\n",[127,3499,3500],{"class":129,"line":2196},[127,3501,3052],{"class":147},[127,3503,3504,3506,3508,3510,3512],{"class":129,"line":2217},[127,3505,3057],{"class":147},[127,3507,1718],{"class":290},[127,3509,2208],{"class":147},[127,3511,1718],{"class":290},[127,3513,1740],{"class":147},[127,3515,3516],{"class":129,"line":2222},[127,3517,3071],{"class":147},[127,3519,3520,3522,3524],{"class":129,"line":2236},[127,3521,2831],{"class":147},[127,3523,2834],{"class":290},[127,3525,164],{"class":147},[127,3527,3528],{"class":129,"line":2241},[127,3529,2729],{"class":147},[127,3531,3532,3534,3537,3539,3542],{"class":129,"line":2270},[127,3533,2793],{"class":290},[127,3535,3536],{"class":147}," (num ",[127,3538,1584],{"class":290},[127,3540,3541],{"class":154}," 1000",[127,3543,3261],{"class":147},[127,3545,3546],{"class":129,"line":2275},[127,3547,170],{"class":147},[632,3549,3550],{"start":151},[635,3551,3552],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[117,3554,3556],{"className":669,"code":3555,"language":671,"meta":122,"style":122},"\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",[124,3557,3558,3563,3592,3596,3608,3612,3617,3628,3635,3639,3653,3657,3664,3668,3680,3689],{"__ignoreMap":122},[127,3559,3560],{"class":129,"line":130},[127,3561,3562],{"class":133},"\u002F\u002F从数字0-9打印\n",[127,3564,3565,3568,3570,3572,3575,3577,3579,3582,3584,3586,3588,3590],{"class":129,"line":137},[127,3566,3567],{"class":290},"for",[127,3569,681],{"class":147},[127,3571,684],{"class":290},[127,3573,3574],{"class":147}," i",[127,3576,725],{"class":290},[127,3578,867],{"class":154},[127,3580,3581],{"class":147},";i",[127,3583,1584],{"class":290},[127,3585,1121],{"class":154},[127,3587,3581],{"class":147},[127,3589,2834],{"class":290},[127,3591,687],{"class":147},[127,3593,3594],{"class":129,"line":151},[127,3595,2090],{"class":147},[127,3597,3598,3600,3602,3604,3606],{"class":129,"line":167},[127,3599,2095],{"class":147},[127,3601,1718],{"class":290},[127,3603,1116],{"class":147},[127,3605,1718],{"class":290},[127,3607,1740],{"class":147},[127,3609,3610],{"class":129,"line":415},[127,3611,170],{"class":147},[127,3613,3614],{"class":129,"line":421},[127,3615,3616],{"class":133},"\u002F\u002F上式可以进行拆分\n",[127,3618,3619,3621,3623,3625],{"class":129,"line":1766},[127,3620,684],{"class":290},[127,3622,3574],{"class":147},[127,3624,725],{"class":290},[127,3626,3627],{"class":154},"0\n",[127,3629,3630,3632],{"class":129,"line":1856},[127,3631,3567],{"class":290},[127,3633,3634],{"class":147},"(;;;)\n",[127,3636,3637],{"class":129,"line":1862},[127,3638,2090],{"class":147},[127,3640,3641,3644,3647,3649,3651],{"class":129,"line":1874},[127,3642,3643],{"class":290},"    if",[127,3645,3646],{"class":147},"(i",[127,3648,2253],{"class":290},[127,3650,1121],{"class":154},[127,3652,687],{"class":147},[127,3654,3655],{"class":129,"line":2155},[127,3656,2572],{"class":147},[127,3658,3659,3662],{"class":129,"line":2160},[127,3660,3661],{"class":290},"        break",[127,3663,164],{"class":147},[127,3665,3666],{"class":129,"line":2166},[127,3667,2729],{"class":147},[127,3669,3670,3672,3674,3676,3678],{"class":129,"line":2171},[127,3671,2095],{"class":147},[127,3673,1718],{"class":290},[127,3675,1116],{"class":147},[127,3677,1718],{"class":290},[127,3679,1740],{"class":147},[127,3681,3682,3685,3687],{"class":129,"line":2185},[127,3683,3684],{"class":147},"    i",[127,3686,2834],{"class":290},[127,3688,164],{"class":147},[127,3690,3691],{"class":129,"line":2190},[127,3692,170],{"class":147},[19,3694,3695],{},"小练习",[117,3697,3699],{"className":669,"code":3698,"language":671,"meta":122,"style":122},"#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",[124,3700,3701,3707,3717,3725,3729,3734,3739,3767,3771,3776,3781,3822,3826,3839,3843,3847,3851,3863,3867,3871],{"__ignoreMap":122},[127,3702,3703,3705],{"class":129,"line":130},[127,3704,2492],{"class":290},[127,3706,2495],{"class":781},[127,3708,3709,3711,3713,3715],{"class":129,"line":137},[127,3710,2500],{"class":290},[127,3712,2503],{"class":290},[127,3714,2506],{"class":143},[127,3716,164],{"class":147},[127,3718,3719,3721,3723],{"class":129,"line":151},[127,3720,684],{"class":290},[127,3722,2515],{"class":143},[127,3724,2518],{"class":147},[127,3726,3727],{"class":129,"line":167},[127,3728,2090],{"class":147},[127,3730,3731],{"class":129,"line":415},[127,3732,3733],{"class":133},"    \u002F\u002F敲桌子案例\n",[127,3735,3736],{"class":129,"line":421},[127,3737,3738],{"class":133},"    \u002F\u002F1.先输出1-100的数字\n",[127,3740,3741,3744,3746,3748,3750,3752,3754,3757,3759,3761,3763,3765],{"class":129,"line":1766},[127,3742,3743],{"class":290},"    for",[127,3745,681],{"class":147},[127,3747,684],{"class":290},[127,3749,3574],{"class":147},[127,3751,725],{"class":290},[127,3753,893],{"class":154},[127,3755,3756],{"class":147},"; i",[127,3758,2131],{"class":290},[127,3760,986],{"class":154},[127,3762,3756],{"class":147},[127,3764,2834],{"class":290},[127,3766,687],{"class":147},[127,3768,3769],{"class":129,"line":1856},[127,3770,2572],{"class":147},[127,3772,3773],{"class":129,"line":1862},[127,3774,3775],{"class":133},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[127,3777,3778],{"class":129,"line":1874},[127,3779,3780],{"class":133},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[127,3782,3783,3785,3787,3789,3791,3793,3795,3798,3800,3802,3804,3806,3808,3810,3812,3814,3816,3818,3820],{"class":129,"line":2155},[127,3784,3039],{"class":290},[127,3786,3646],{"class":147},[127,3788,1003],{"class":290},[127,3790,1044],{"class":154},[127,3792,3491],{"class":290},[127,3794,867],{"class":154},[127,3796,3797],{"class":290}," ||",[127,3799,3574],{"class":147},[127,3801,1003],{"class":290},[127,3803,1121],{"class":154},[127,3805,3491],{"class":290},[127,3807,1044],{"class":154},[127,3809,3797],{"class":290},[127,3811,3574],{"class":147},[127,3813,1259],{"class":290},[127,3815,1121],{"class":154},[127,3817,3491],{"class":290},[127,3819,1044],{"class":154},[127,3821,687],{"class":147},[127,3823,3824],{"class":129,"line":2160},[127,3825,3052],{"class":147},[127,3827,3828,3830,3832,3835,3837],{"class":129,"line":2166},[127,3829,3057],{"class":147},[127,3831,1718],{"class":290},[127,3833,3834],{"class":781},"\"敲桌子\"",[127,3836,1718],{"class":290},[127,3838,1740],{"class":147},[127,3840,3841],{"class":129,"line":2171},[127,3842,3071],{"class":147},[127,3844,3845],{"class":129,"line":2185},[127,3846,3112],{"class":290},[127,3848,3849],{"class":129,"line":2190},[127,3850,3052],{"class":147},[127,3852,3853,3855,3857,3859,3861],{"class":129,"line":2196},[127,3854,3057],{"class":147},[127,3856,1718],{"class":290},[127,3858,1116],{"class":147},[127,3860,1718],{"class":290},[127,3862,1740],{"class":147},[127,3864,3865],{"class":129,"line":2217},[127,3866,3071],{"class":147},[127,3868,3869],{"class":129,"line":2222},[127,3870,2729],{"class":147},[127,3872,3873],{"class":129,"line":2236},[127,3874,170],{"class":147},[19,3876,3877],{},"嵌套实现星图",[117,3879,3881],{"className":669,"code":3880,"language":671,"meta":122,"style":122},"#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",[124,3882,3883,3889,3899,3907,3911,3937,3941,3970,3974,3985,3989,3998,4002],{"__ignoreMap":122},[127,3884,3885,3887],{"class":129,"line":130},[127,3886,2492],{"class":290},[127,3888,2495],{"class":781},[127,3890,3891,3893,3895,3897],{"class":129,"line":137},[127,3892,2500],{"class":290},[127,3894,2503],{"class":290},[127,3896,2506],{"class":143},[127,3898,164],{"class":147},[127,3900,3901,3903,3905],{"class":129,"line":151},[127,3902,684],{"class":290},[127,3904,2515],{"class":143},[127,3906,2518],{"class":147},[127,3908,3909],{"class":129,"line":167},[127,3910,2090],{"class":147},[127,3912,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3933,3935],{"class":129,"line":415},[127,3914,3743],{"class":290},[127,3916,2201],{"class":147},[127,3918,684],{"class":290},[127,3920,3574],{"class":147},[127,3922,725],{"class":290},[127,3924,867],{"class":154},[127,3926,3581],{"class":147},[127,3928,1584],{"class":290},[127,3930,1121],{"class":154},[127,3932,3581],{"class":147},[127,3934,2834],{"class":290},[127,3936,687],{"class":147},[127,3938,3939],{"class":129,"line":421},[127,3940,2572],{"class":147},[127,3942,3943,3946,3948,3950,3953,3955,3957,3960,3962,3964,3966,3968],{"class":129,"line":1766},[127,3944,3945],{"class":290},"        for",[127,3947,2201],{"class":147},[127,3949,684],{"class":290},[127,3951,3952],{"class":147}," j",[127,3954,725],{"class":290},[127,3956,867],{"class":154},[127,3958,3959],{"class":147},";j",[127,3961,1584],{"class":290},[127,3963,1121],{"class":154},[127,3965,3959],{"class":147},[127,3967,2834],{"class":290},[127,3969,687],{"class":147},[127,3971,3972],{"class":129,"line":1856},[127,3973,3052],{"class":147},[127,3975,3976,3978,3980,3983],{"class":129,"line":1862},[127,3977,3057],{"class":147},[127,3979,1718],{"class":290},[127,3981,3982],{"class":781},"\"*\"",[127,3984,164],{"class":147},[127,3986,3987],{"class":129,"line":1874},[127,3988,3071],{"class":147},[127,3990,3991,3994,3996],{"class":129,"line":2155},[127,3992,3993],{"class":147},"        cout",[127,3995,1718],{"class":290},[127,3997,1740],{"class":147},[127,3999,4000],{"class":129,"line":2160},[127,4001,2729],{"class":147},[127,4003,4004],{"class":129,"line":2166},[127,4005,170],{"class":147},[19,4007,4008],{},"乘法口诀表",[117,4010,4012],{"className":669,"code":4011,"language":671,"meta":122,"style":122},"#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",[124,4013,4014,4020,4030,4038,4042,4068,4072,4097,4101,4141,4145,4153,4157],{"__ignoreMap":122},[127,4015,4016,4018],{"class":129,"line":130},[127,4017,2492],{"class":290},[127,4019,2876],{"class":781},[127,4021,4022,4024,4026,4028],{"class":129,"line":137},[127,4023,2500],{"class":290},[127,4025,2503],{"class":290},[127,4027,2506],{"class":143},[127,4029,164],{"class":147},[127,4031,4032,4034,4036],{"class":129,"line":151},[127,4033,684],{"class":290},[127,4035,2515],{"class":143},[127,4037,2518],{"class":147},[127,4039,4040],{"class":129,"line":167},[127,4041,2090],{"class":147},[127,4043,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066],{"class":129,"line":415},[127,4045,3743],{"class":290},[127,4047,681],{"class":147},[127,4049,684],{"class":290},[127,4051,3574],{"class":147},[127,4053,725],{"class":290},[127,4055,893],{"class":154},[127,4057,3581],{"class":147},[127,4059,1584],{"class":290},[127,4061,1121],{"class":154},[127,4063,3581],{"class":147},[127,4065,2834],{"class":290},[127,4067,687],{"class":147},[127,4069,4070],{"class":129,"line":421},[127,4071,2572],{"class":147},[127,4073,4074,4076,4078,4080,4082,4084,4086,4088,4090,4093,4095],{"class":129,"line":1766},[127,4075,3945],{"class":290},[127,4077,681],{"class":147},[127,4079,684],{"class":290},[127,4081,3952],{"class":147},[127,4083,725],{"class":290},[127,4085,893],{"class":154},[127,4087,3959],{"class":147},[127,4089,2131],{"class":290},[127,4091,4092],{"class":147},"i;j",[127,4094,2834],{"class":290},[127,4096,687],{"class":147},[127,4098,4099],{"class":129,"line":1856},[127,4100,3052],{"class":147},[127,4102,4103,4105,4107,4109,4111,4113,4115,4117,4119,4122,4124,4126,4128,4130,4132,4135,4137,4139],{"class":129,"line":1862},[127,4104,3057],{"class":147},[127,4106,1718],{"class":290},[127,4108,1142],{"class":147},[127,4110,1718],{"class":290},[127,4112,3982],{"class":781},[127,4114,1718],{"class":290},[127,4116,1116],{"class":147},[127,4118,1718],{"class":290},[127,4120,4121],{"class":781},"\"=\"",[127,4123,1718],{"class":290},[127,4125,1116],{"class":147},[127,4127,1130],{"class":290},[127,4129,1142],{"class":147},[127,4131,1718],{"class":290},[127,4133,4134],{"class":781},"'",[127,4136,1776],{"class":154},[127,4138,4134],{"class":781},[127,4140,164],{"class":147},[127,4142,4143],{"class":129,"line":1874},[127,4144,3071],{"class":147},[127,4146,4147,4149,4151],{"class":129,"line":2155},[127,4148,3993],{"class":147},[127,4150,1718],{"class":290},[127,4152,1740],{"class":147},[127,4154,4155],{"class":129,"line":2160},[127,4156,2729],{"class":147},[127,4158,4159],{"class":129,"line":2166},[127,4160,170],{"class":147},[62,4162,4164],{"id":4163},"_163跳出语句","1.6.3跳出语句",[632,4166,4167],{},[635,4168,4169],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4171,4172],{},"break使用时机：",[1681,4174,4175,4178,4181],{},[635,4176,4177],{},"出现在switch条件语句中，作用是终止case并跳出switch",[635,4179,4180],{},"出现在循环结构中，作用是跳出当前的循环结构",[635,4182,4183],{},"出现在嵌套循环中，跳出最近的内层循环语句",[632,4185,4186,4189],{"start":137},[635,4187,4188],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[635,4190,4191],{},"goto语句\n语法：goto 标记;",[19,4193,4194],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[117,4196,4198],{"className":669,"code":4197,"language":671,"meta":122,"style":122},"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",[124,4199,4200,4208,4212,4225,4235,4248,4261,4274,4282,4298],{"__ignoreMap":122},[127,4201,4202,4204,4206],{"class":129,"line":130},[127,4203,684],{"class":290},[127,4205,2515],{"class":143},[127,4207,2518],{"class":147},[127,4209,4210],{"class":129,"line":137},[127,4211,2090],{"class":147},[127,4213,4214,4216,4218,4221,4223],{"class":129,"line":151},[127,4215,2095],{"class":147},[127,4217,1718],{"class":290},[127,4219,4220],{"class":781},"\"1\"",[127,4222,1718],{"class":290},[127,4224,1740],{"class":147},[127,4226,4227,4230,4233],{"class":129,"line":167},[127,4228,4229],{"class":290},"    goto",[127,4231,4232],{"class":143}," FLAG",[127,4234,164],{"class":147},[127,4236,4237,4239,4241,4244,4246],{"class":129,"line":415},[127,4238,2095],{"class":147},[127,4240,1718],{"class":290},[127,4242,4243],{"class":781},"\"2\"",[127,4245,1718],{"class":290},[127,4247,1740],{"class":147},[127,4249,4250,4252,4254,4257,4259],{"class":129,"line":421},[127,4251,2095],{"class":147},[127,4253,1718],{"class":290},[127,4255,4256],{"class":781},"\"3\"",[127,4258,1718],{"class":290},[127,4260,1740],{"class":147},[127,4262,4263,4265,4267,4270,4272],{"class":129,"line":1766},[127,4264,2095],{"class":147},[127,4266,1718],{"class":290},[127,4268,4269],{"class":781},"\"4\"",[127,4271,1718],{"class":290},[127,4273,1740],{"class":147},[127,4275,4276,4279],{"class":129,"line":1856},[127,4277,4278],{"class":143},"    FLAG",[127,4280,4281],{"class":147},":\n",[127,4283,4284,4286,4288,4291,4293,4295],{"class":129,"line":1862},[127,4285,2095],{"class":147},[127,4287,1718],{"class":290},[127,4289,4290],{"class":781},"\"5\"",[127,4292,1718],{"class":290},[127,4294,1784],{"class":147},[127,4296,4297],{"class":133},"\u002F\u002F跳过了2,3,4,直接到5\n",[127,4299,4300],{"class":129,"line":1874},[127,4301,170],{"class":147},[14,4303,4305],{"id":4304},"_17数组","1.7数组",[62,4307,4309],{"id":4308},"_171一维数组","1.7.1一维数组",[632,4311,4312],{},[635,4313,4314],{},"一维数组定义方式",[814,4316,4317,4327],{},[817,4318,4319],{},[820,4320,4321,4324],{},[823,4322,4323],{},"方式",[823,4325,4326],{},"注意事项",[860,4328,4329,4343,4353],{},[820,4330,4331,4337],{},[865,4332,4333,4334,734],{},"数据类型 数组名",[127,4335,4336],{},"数组长度",[865,4338,4339,4340,4342],{},"这种方式是先定义再arr",[127,4341,1116],{},"赋值",[820,4344,4345,4350],{},[865,4346,4333,4347,4349],{},[127,4348,4336],{},"={值1,值2....};",[865,4351,4352],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[820,4354,4355,4359],{},[865,4356,4333,4357,4349],{},[127,4358],{},[865,4360,4361,4362,4364],{},"int arr",[127,4363],{},";这是不正确的，按照这样的方式定义必须有初始长度",[632,4366,4367],{"start":137},[635,4368,4369],{},"一维数组数组名\n用途：",[1681,4371,4372],{},[635,4373,4374],{},"1.可以统计整个数组在内存中的长度：",[117,4376,4378],{"className":669,"code":4377,"language":671,"meta":122,"style":122},"sizeof(arr);\nsizeof(arr[0]);\n",[124,4379,4380,4387],{"__ignoreMap":122},[127,4381,4382,4384],{"class":129,"line":130},[127,4383,678],{"class":290},[127,4385,4386],{"class":147},"(arr);\n",[127,4388,4389,4391,4394,4396],{"class":129,"line":137},[127,4390,678],{"class":290},[127,4392,4393],{"class":147},"(arr[",[127,4395,867],{"class":154},[127,4397,4398],{"class":147},"]);\n",[1681,4400,4401],{},[635,4402,4403],{},"2.可以获取数组在内存中的首地址:",[117,4405,4407],{"className":669,"code":4406,"language":671,"meta":122,"style":122},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[124,4408,4409,4414,4427,4432],{"__ignoreMap":122},[127,4410,4411],{"class":129,"line":130},[127,4412,4413],{"class":133},"\u002F\u002F查看16进制的首地址\n",[127,4415,4416,4418,4420,4423,4425],{"class":129,"line":137},[127,4417,1914],{"class":147},[127,4419,1718],{"class":290},[127,4421,4422],{"class":147},"arr",[127,4424,1718],{"class":290},[127,4426,1740],{"class":147},[127,4428,4429],{"class":129,"line":151},[127,4430,4431],{"class":133},"\u002F\u002F看10进制数\n",[127,4433,4434,4436,4438,4440,4442,4444,4446,4449,4451,4453,4455],{"class":129,"line":167},[127,4435,1914],{"class":147},[127,4437,1718],{"class":290},[127,4439,681],{"class":147},[127,4441,684],{"class":290},[127,4443,1104],{"class":147},[127,4445,1028],{"class":290},[127,4447,4448],{"class":147},"arr[",[127,4450,867],{"class":154},[127,4452,1614],{"class":147},[127,4454,1718],{"class":290},[127,4456,1740],{"class":147},[19,4458,4459],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1681,4461,4462],{},[635,4463,4464],{},"1️⃣五只小猪称体重",[117,4466,4468],{"className":669,"code":4467,"language":671,"meta":122,"style":122},"#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",[124,4469,4470,4476,4486,4494,4498,4538,4551,4577,4581,4593,4597,4607,4611,4615,4628,4638],{"__ignoreMap":122},[127,4471,4472,4474],{"class":129,"line":130},[127,4473,2492],{"class":290},[127,4475,2495],{"class":781},[127,4477,4478,4480,4482,4484],{"class":129,"line":137},[127,4479,2500],{"class":290},[127,4481,2503],{"class":290},[127,4483,2506],{"class":143},[127,4485,164],{"class":147},[127,4487,4488,4490,4492],{"class":129,"line":151},[127,4489,684],{"class":290},[127,4491,2515],{"class":143},[127,4493,2518],{"class":147},[127,4495,4496],{"class":129,"line":167},[127,4497,2090],{"class":147},[127,4499,4500,4502,4505,4507,4509,4511,4513,4516,4518,4521,4523,4525,4527,4530,4532,4535],{"class":129,"line":415},[127,4501,2527],{"class":290},[127,4503,4504],{"class":147}," arr[",[127,4506,994],{"class":154},[127,4508,1614],{"class":147},[127,4510,725],{"class":290},[127,4512,1570],{"class":147},[127,4514,4515],{"class":154},"300",[127,4517,1053],{"class":147},[127,4519,4520],{"class":154},"350",[127,4522,1053],{"class":147},[127,4524,2265],{"class":154},[127,4526,1053],{"class":147},[127,4528,4529],{"class":154},"400",[127,4531,1053],{"class":147},[127,4533,4534],{"class":154},"250",[127,4536,4537],{"class":147},"};\n",[127,4539,4540,4542,4545,4547,4549],{"class":129,"line":421},[127,4541,2527],{"class":290},[127,4543,4544],{"class":147}," tmp",[127,4546,725],{"class":290},[127,4548,867],{"class":154},[127,4550,164],{"class":147},[127,4552,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575],{"class":129,"line":1766},[127,4554,3743],{"class":290},[127,4556,2201],{"class":147},[127,4558,684],{"class":290},[127,4560,3574],{"class":147},[127,4562,725],{"class":290},[127,4564,867],{"class":154},[127,4566,3581],{"class":147},[127,4568,1584],{"class":290},[127,4570,994],{"class":154},[127,4572,3581],{"class":147},[127,4574,2834],{"class":290},[127,4576,687],{"class":147},[127,4578,4579],{"class":129,"line":1856},[127,4580,2572],{"class":147},[127,4582,4583,4585,4588,4590],{"class":129,"line":1862},[127,4584,3039],{"class":290},[127,4586,4587],{"class":147},"(tmp",[127,4589,1584],{"class":290},[127,4591,4592],{"class":147},"arr[i])\n",[127,4594,4595],{"class":129,"line":1874},[127,4596,3052],{"class":147},[127,4598,4599,4602,4604],{"class":129,"line":2155},[127,4600,4601],{"class":147},"            tmp",[127,4603,725],{"class":290},[127,4605,4606],{"class":147},"arr[i];\n",[127,4608,4609],{"class":129,"line":2160},[127,4610,3071],{"class":147},[127,4612,4613],{"class":129,"line":2166},[127,4614,2729],{"class":147},[127,4616,4617,4619,4621,4624,4626],{"class":129,"line":2171},[127,4618,2095],{"class":147},[127,4620,1718],{"class":290},[127,4622,4623],{"class":147},"tmp",[127,4625,1718],{"class":290},[127,4627,1740],{"class":147},[127,4629,4630,4633,4636],{"class":129,"line":2185},[127,4631,4632],{"class":290},"    return",[127,4634,4635],{"class":154}," 0",[127,4637,164],{"class":147},[127,4639,4640],{"class":129,"line":2190},[127,4641,170],{"class":147},[1681,4643,4644],{},[635,4645,4646],{},"2️⃣数组元素逆置",[117,4648,4650],{"className":669,"code":4649,"language":671,"meta":122,"style":122},"\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",[124,4651,4652,4657,4663,4673,4681,4685,4720,4736,4768,4781,4786,4791,4803,4813,4823,4828,4837,4847,4852,4857,4884,4888,4904,4908,4919,4928],{"__ignoreMap":122},[127,4653,4654],{"class":129,"line":130},[127,4655,4656],{"class":133},"\u002F\u002F元素逆置\n",[127,4658,4659,4661],{"class":129,"line":137},[127,4660,2492],{"class":290},[127,4662,2495],{"class":781},[127,4664,4665,4667,4669,4671],{"class":129,"line":151},[127,4666,2500],{"class":290},[127,4668,2503],{"class":290},[127,4670,2506],{"class":143},[127,4672,164],{"class":147},[127,4674,4675,4677,4679],{"class":129,"line":167},[127,4676,684],{"class":290},[127,4678,2515],{"class":143},[127,4680,2518],{"class":147},[127,4682,4683],{"class":129,"line":415},[127,4684,2090],{"class":147},[127,4686,4687,4690,4692,4694,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718],{"class":129,"line":421},[127,4688,4689],{"class":290},"   int",[127,4691,4504],{"class":147},[127,4693,994],{"class":154},[127,4695,1614],{"class":147},[127,4697,725],{"class":290},[127,4699,1570],{"class":147},[127,4701,893],{"class":154},[127,4703,1053],{"class":147},[127,4705,530],{"class":154},[127,4707,1053],{"class":147},[127,4709,749],{"class":154},[127,4711,1053],{"class":147},[127,4713,968],{"class":154},[127,4715,1053],{"class":147},[127,4717,994],{"class":154},[127,4719,4537],{"class":147},[127,4721,4722,4724,4727,4729,4731,4733],{"class":129,"line":1766},[127,4723,4689],{"class":290},[127,4725,4726],{"class":147}," start",[127,4728,725],{"class":290},[127,4730,867],{"class":154},[127,4732,734],{"class":147},[127,4734,4735],{"class":133},"\u002F\u002F起始下标\n",[127,4737,4738,4740,4743,4746,4749,4752,4754,4756,4759,4761,4763,4765],{"class":129,"line":1856},[127,4739,4689],{"class":290},[127,4741,4742],{"class":147}," end",[127,4744,4745],{"class":290},"=sizeof",[127,4747,4748],{"class":147},"(arr)",[127,4750,4751],{"class":290},"\u002Fsizeof",[127,4753,4393],{"class":147},[127,4755,867],{"class":154},[127,4757,4758],{"class":147},"])",[127,4760,1207],{"class":290},[127,4762,893],{"class":154},[127,4764,734],{"class":147},[127,4766,4767],{"class":133},"\u002F\u002F结束下标\n",[127,4769,4770,4773,4776,4778],{"class":129,"line":1862},[127,4771,4772],{"class":290},"   while",[127,4774,4775],{"class":147}," (start",[127,4777,1584],{"class":290},[127,4779,4780],{"class":147},"end)\n",[127,4782,4783],{"class":129,"line":1874},[127,4784,4785],{"class":147},"   {\n",[127,4787,4788],{"class":129,"line":2155},[127,4789,4790],{"class":133},"    \u002F\u002F实现元素互换代码\n",[127,4792,4793,4795,4798,4800],{"class":129,"line":2160},[127,4794,2527],{"class":290},[127,4796,4797],{"class":147}," temp",[127,4799,725],{"class":290},[127,4801,4802],{"class":147},"arr[start];\n",[127,4804,4805,4808,4810],{"class":129,"line":2166},[127,4806,4807],{"class":147},"    arr[start]",[127,4809,725],{"class":290},[127,4811,4812],{"class":147},"arr[end];\n",[127,4814,4815,4818,4820],{"class":129,"line":2171},[127,4816,4817],{"class":147},"    arr[end]",[127,4819,725],{"class":290},[127,4821,4822],{"class":147},"temp;\n",[127,4824,4825],{"class":129,"line":2185},[127,4826,4827],{"class":133},"    \u002F\u002F下标更新\n",[127,4829,4830,4833,4835],{"class":129,"line":2190},[127,4831,4832],{"class":147},"    start",[127,4834,2834],{"class":290},[127,4836,164],{"class":147},[127,4838,4839,4842,4845],{"class":129,"line":2196},[127,4840,4841],{"class":147},"    end",[127,4843,4844],{"class":290},"--",[127,4846,164],{"class":147},[127,4848,4849],{"class":129,"line":2217},[127,4850,4851],{"class":147},"   }\n",[127,4853,4854],{"class":129,"line":2222},[127,4855,4856],{"class":133},"   \u002F\u002F输出逆置后的数组\n",[127,4858,4859,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880,4882],{"class":129,"line":2236},[127,4860,4861],{"class":290},"   for",[127,4863,2201],{"class":147},[127,4865,684],{"class":290},[127,4867,3574],{"class":147},[127,4869,725],{"class":290},[127,4871,867],{"class":154},[127,4873,3581],{"class":147},[127,4875,1584],{"class":290},[127,4877,994],{"class":154},[127,4879,3581],{"class":147},[127,4881,2834],{"class":290},[127,4883,687],{"class":147},[127,4885,4886],{"class":129,"line":2241},[127,4887,4785],{"class":147},[127,4889,4890,4892,4894,4897,4899,4902],{"class":129,"line":2270},[127,4891,2095],{"class":147},[127,4893,1718],{"class":290},[127,4895,4896],{"class":147},"arr[i]",[127,4898,1718],{"class":290},[127,4900,4901],{"class":781},"\" \"",[127,4903,164],{"class":147},[127,4905,4906],{"class":129,"line":2275},[127,4907,4851],{"class":147},[127,4909,4910,4913,4915,4917],{"class":129,"line":2292},[127,4911,4912],{"class":143},"   system",[127,4914,681],{"class":147},[127,4916,2850],{"class":781},[127,4918,3261],{"class":147},[127,4920,4921,4924,4926],{"class":129,"line":2297},[127,4922,4923],{"class":290},"   return",[127,4925,4635],{"class":154},[127,4927,164],{"class":147},[127,4929,4930],{"class":129,"line":2302},[127,4931,170],{"class":147},[1681,4933,4934],{},[635,4935,4936],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[117,4938,4940],{"className":669,"code":4939,"language":671,"meta":122,"style":122},"\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",[124,4941,4942,4947,4953,4963,4971,4975,5027,5040,5066,5070,5084,5088,5093,5098,5128,5132,5137,5171,5175,5180,5200,5205,5217,5233,5248,5253,5257,5261,5274,5300,5304,5318,5322,5330],{"__ignoreMap":122},[127,4943,4944],{"class":129,"line":130},[127,4945,4946],{"class":133},"\u002F\u002F冒泡排序,升序\n",[127,4948,4949,4951],{"class":129,"line":137},[127,4950,2492],{"class":290},[127,4952,2495],{"class":781},[127,4954,4955,4957,4959,4961],{"class":129,"line":151},[127,4956,2500],{"class":290},[127,4958,2503],{"class":290},[127,4960,2506],{"class":143},[127,4962,164],{"class":147},[127,4964,4965,4967,4969],{"class":129,"line":167},[127,4966,684],{"class":290},[127,4968,2515],{"class":143},[127,4970,2518],{"class":147},[127,4972,4973],{"class":129,"line":415},[127,4974,2090],{"class":147},[127,4976,4977,4979,4981,4983,4986,4988,4991,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015,5017,5019,5021,5023,5025],{"class":129,"line":421},[127,4978,2527],{"class":290},[127,4980,4504],{"class":147},[127,4982,1095],{"class":154},[127,4984,4985],{"class":147},"] ",[127,4987,725],{"class":290},[127,4989,4990],{"class":147}," {",[127,4992,968],{"class":154},[127,4994,1053],{"class":147},[127,4996,530],{"class":154},[127,4998,1053],{"class":147},[127,5000,1070],{"class":154},[127,5002,1053],{"class":147},[127,5004,867],{"class":154},[127,5006,1053],{"class":147},[127,5008,994],{"class":154},[127,5010,1053],{"class":147},[127,5012,1044],{"class":154},[127,5014,1053],{"class":147},[127,5016,893],{"class":154},[127,5018,1053],{"class":147},[127,5020,749],{"class":154},[127,5022,1053],{"class":147},[127,5024,1095],{"class":154},[127,5026,4537],{"class":147},[127,5028,5029,5031,5033,5036,5038],{"class":129,"line":1766},[127,5030,2095],{"class":147},[127,5032,1718],{"class":290},[127,5034,5035],{"class":781},"\"排序前：\"",[127,5037,1718],{"class":290},[127,5039,1740],{"class":147},[127,5041,5042,5044,5046,5048,5050,5052,5054,5056,5058,5060,5062,5064],{"class":129,"line":1856},[127,5043,3743],{"class":290},[127,5045,2201],{"class":147},[127,5047,684],{"class":290},[127,5049,3574],{"class":147},[127,5051,725],{"class":290},[127,5053,867],{"class":154},[127,5055,3581],{"class":147},[127,5057,1584],{"class":290},[127,5059,1095],{"class":154},[127,5061,3581],{"class":147},[127,5063,2834],{"class":290},[127,5065,687],{"class":147},[127,5067,5068],{"class":129,"line":1862},[127,5069,2572],{"class":147},[127,5071,5072,5074,5076,5078,5080,5082],{"class":129,"line":1874},[127,5073,3993],{"class":147},[127,5075,1718],{"class":290},[127,5077,4896],{"class":147},[127,5079,1718],{"class":290},[127,5081,4901],{"class":781},[127,5083,164],{"class":147},[127,5085,5086],{"class":129,"line":2155},[127,5087,2729],{"class":147},[127,5089,5090],{"class":129,"line":2160},[127,5091,5092],{"class":133},"    \u002F\u002F开始冒泡排序\n",[127,5094,5095],{"class":129,"line":2166},[127,5096,5097],{"class":133},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[127,5099,5100,5102,5104,5106,5108,5110,5112,5114,5116,5118,5120,5122,5124,5126],{"class":129,"line":2171},[127,5101,3743],{"class":290},[127,5103,2201],{"class":147},[127,5105,684],{"class":290},[127,5107,3574],{"class":147},[127,5109,725],{"class":290},[127,5111,867],{"class":154},[127,5113,3581],{"class":147},[127,5115,1584],{"class":290},[127,5117,1095],{"class":154},[127,5119,1207],{"class":290},[127,5121,893],{"class":154},[127,5123,3581],{"class":147},[127,5125,2834],{"class":290},[127,5127,687],{"class":147},[127,5129,5130],{"class":129,"line":2185},[127,5131,2572],{"class":147},[127,5133,5134],{"class":129,"line":2190},[127,5135,5136],{"class":133},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[127,5138,5139,5141,5143,5145,5147,5149,5151,5153,5155,5157,5159,5161,5163,5165,5167,5169],{"class":129,"line":2196},[127,5140,3945],{"class":290},[127,5142,2201],{"class":147},[127,5144,684],{"class":290},[127,5146,3952],{"class":147},[127,5148,725],{"class":290},[127,5150,867],{"class":154},[127,5152,3959],{"class":147},[127,5154,1584],{"class":290},[127,5156,1095],{"class":154},[127,5158,1207],{"class":290},[127,5160,1116],{"class":147},[127,5162,1207],{"class":290},[127,5164,893],{"class":154},[127,5166,3959],{"class":147},[127,5168,2834],{"class":290},[127,5170,687],{"class":147},[127,5172,5173],{"class":129,"line":2217},[127,5174,3052],{"class":147},[127,5176,5177],{"class":129,"line":2222},[127,5178,5179],{"class":133},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[127,5181,5182,5185,5188,5190,5193,5195,5197],{"class":129,"line":2236},[127,5183,5184],{"class":290},"            if",[127,5186,5187],{"class":147},"(arr[j]",[127,5189,1634],{"class":290},[127,5191,5192],{"class":147},"arr[j",[127,5194,1156],{"class":290},[127,5196,893],{"class":154},[127,5198,5199],{"class":147},"])\n",[127,5201,5202],{"class":129,"line":2241},[127,5203,5204],{"class":147},"            {\n",[127,5206,5207,5210,5212,5214],{"class":129,"line":2270},[127,5208,5209],{"class":290},"                int",[127,5211,4797],{"class":147},[127,5213,725],{"class":290},[127,5215,5216],{"class":147},"arr[j];\n",[127,5218,5219,5222,5224,5226,5228,5230],{"class":129,"line":2275},[127,5220,5221],{"class":147},"                arr[j]",[127,5223,725],{"class":290},[127,5225,5192],{"class":147},[127,5227,1156],{"class":290},[127,5229,893],{"class":154},[127,5231,5232],{"class":147},"];\n",[127,5234,5235,5238,5240,5242,5244,5246],{"class":129,"line":2292},[127,5236,5237],{"class":147},"                arr[j",[127,5239,1156],{"class":290},[127,5241,893],{"class":154},[127,5243,1614],{"class":147},[127,5245,725],{"class":290},[127,5247,4822],{"class":147},[127,5249,5250],{"class":129,"line":2297},[127,5251,5252],{"class":147},"            }\n",[127,5254,5255],{"class":129,"line":2302},[127,5256,3071],{"class":147},[127,5258,5259],{"class":129,"line":2307},[127,5260,2729],{"class":147},[127,5262,5263,5265,5267,5270,5272],{"class":129,"line":2321},[127,5264,2095],{"class":147},[127,5266,1718],{"class":290},[127,5268,5269],{"class":781},"\"排序后：\"",[127,5271,1718],{"class":290},[127,5273,1740],{"class":147},[127,5275,5276,5278,5280,5282,5284,5286,5288,5290,5292,5294,5296,5298],{"class":129,"line":2326},[127,5277,3743],{"class":290},[127,5279,2201],{"class":147},[127,5281,684],{"class":290},[127,5283,3574],{"class":147},[127,5285,725],{"class":290},[127,5287,867],{"class":154},[127,5289,3581],{"class":147},[127,5291,1584],{"class":290},[127,5293,1095],{"class":154},[127,5295,3581],{"class":147},[127,5297,2834],{"class":290},[127,5299,687],{"class":147},[127,5301,5302],{"class":129,"line":3119},[127,5303,2572],{"class":147},[127,5305,5306,5308,5310,5312,5314,5316],{"class":129,"line":3133},[127,5307,3993],{"class":147},[127,5309,1718],{"class":290},[127,5311,4896],{"class":147},[127,5313,1718],{"class":290},[127,5315,4901],{"class":781},[127,5317,164],{"class":147},[127,5319,5320],{"class":129,"line":3141},[127,5321,2729],{"class":147},[127,5323,5324,5326,5328],{"class":129,"line":3146},[127,5325,4632],{"class":290},[127,5327,4635],{"class":154},[127,5329,164],{"class":147},[127,5331,5332],{"class":129,"line":3152},[127,5333,170],{"class":147},[62,5335,5337],{"id":5336},"_172二维数组","1.7.2二维数组",[632,5339,5340],{},[635,5341,5342],{},"二维数组的四种定义方式",[814,5344,5345,5354],{},[817,5346,5347],{},[820,5348,5349,5352],{},[823,5350,5351],{},"序号",[823,5353,4323],{},[860,5355,5356,5366,5375,5384,5393],{},[820,5357,5358,5360],{},[865,5359,893],{},[865,5361,5362,5363,734],{},"数据类型 数组名[行数]",[127,5364,5365],{},"列数",[820,5367,5368,5370],{},[865,5369,530],{},[865,5371,5362,5372,5374],{},[127,5373,5365],{},"={ {数据1,数据2}，{数据3，数据4}... }",[820,5376,5377,5379],{},[865,5378,749],{},[865,5380,5362,5381,5383],{},[127,5382,5365],{},"={数据1,数据2,数据3...}",[820,5385,5386,5388],{},[865,5387,968],{},[865,5389,5390,5391,5383],{},"数据类型 数组名[]",[127,5392,5365],{},[820,5394,5395,5398],{},[865,5396,5397],{},"注意：不能只省略列数",[865,5399],{},[632,5401,5402],{"start":137},[635,5403,5404],{},"二维数组数组名",[1681,5406,5407,5410],{},[635,5408,5409],{},"1.查看二维数组所占内存空间",[635,5411,5412],{},"2.获取二维数组首地址",[19,5414,5415],{},"已知二维数组，求二维数组的行数与列数",[117,5417,5419],{"className":669,"code":5418,"language":671,"meta":122,"style":122},"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",[124,5420,5421,5429,5433,5451,5455,5473,5489,5494,5519,5552],{"__ignoreMap":122},[127,5422,5423,5425,5427],{"class":129,"line":130},[127,5424,684],{"class":290},[127,5426,2515],{"class":143},[127,5428,2518],{"class":147},[127,5430,5431],{"class":129,"line":137},[127,5432,2090],{"class":147},[127,5434,5435,5437,5439,5441,5444,5446,5448],{"class":129,"line":151},[127,5436,2527],{"class":290},[127,5438,4504],{"class":147},[127,5440,530],{"class":154},[127,5442,5443],{"class":147},"][",[127,5445,749],{"class":154},[127,5447,1614],{"class":147},[127,5449,5450],{"class":290},"=\n",[127,5452,5453],{"class":129,"line":167},[127,5454,2572],{"class":147},[127,5456,5457,5460,5462,5464,5466,5468,5470],{"class":129,"line":415},[127,5458,5459],{"class":147},"        {",[127,5461,893],{"class":154},[127,5463,1053],{"class":147},[127,5465,530],{"class":154},[127,5467,1053],{"class":147},[127,5469,749],{"class":154},[127,5471,5472],{"class":147},"},\n",[127,5474,5475,5477,5479,5481,5483,5485,5487],{"class":129,"line":421},[127,5476,5459],{"class":147},[127,5478,968],{"class":154},[127,5480,1053],{"class":147},[127,5482,994],{"class":154},[127,5484,1053],{"class":147},[127,5486,1019],{"class":154},[127,5488,170],{"class":147},[127,5490,5491],{"class":129,"line":1766},[127,5492,5493],{"class":147},"    };\n",[127,5495,5496,5498,5500,5503,5505,5507,5509,5511,5513,5515,5517],{"class":129,"line":1856},[127,5497,2095],{"class":147},[127,5499,1718],{"class":290},[127,5501,5502],{"class":781},"\"二维数组的行数\"",[127,5504,1917],{"class":290},[127,5506,4748],{"class":147},[127,5508,4751],{"class":290},[127,5510,4393],{"class":147},[127,5512,867],{"class":154},[127,5514,4758],{"class":147},[127,5516,1718],{"class":290},[127,5518,1740],{"class":147},[127,5520,5521,5523,5525,5528,5530,5532,5534,5536,5538,5540,5542,5544,5546,5548,5550],{"class":129,"line":1862},[127,5522,2095],{"class":147},[127,5524,1718],{"class":290},[127,5526,5527],{"class":781},"\"二维数组的列数\"",[127,5529,1917],{"class":290},[127,5531,4393],{"class":147},[127,5533,867],{"class":154},[127,5535,4758],{"class":147},[127,5537,4751],{"class":290},[127,5539,4393],{"class":147},[127,5541,867],{"class":154},[127,5543,5443],{"class":147},[127,5545,867],{"class":154},[127,5547,4758],{"class":147},[127,5549,1718],{"class":290},[127,5551,1740],{"class":147},[127,5553,5554],{"class":129,"line":1874},[127,5555,170],{"class":147},[19,5557,5558],{},"查看二维数组首地址",[117,5560,5562],{"className":669,"code":5561,"language":671,"meta":122,"style":122},"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",[124,5563,5564,5581,5607,5632],{"__ignoreMap":122},[127,5565,5566,5568,5570,5573,5575,5577,5579],{"class":129,"line":130},[127,5567,1914],{"class":147},[127,5569,1718],{"class":290},[127,5571,5572],{"class":781},"\"二维数组首地址：\"",[127,5574,1718],{"class":290},[127,5576,4422],{"class":147},[127,5578,1718],{"class":290},[127,5580,1740],{"class":147},[127,5582,5583,5585,5587,5590,5592,5594,5596,5599,5601,5603,5605],{"class":129,"line":137},[127,5584,1914],{"class":147},[127,5586,1718],{"class":290},[127,5588,5589],{"class":781},"\"二维数组第一行的首地址：\"",[127,5591,1718],{"class":290},[127,5593,681],{"class":147},[127,5595,684],{"class":290},[127,5597,5598],{"class":147},")arr[",[127,5600,867],{"class":154},[127,5602,1614],{"class":147},[127,5604,1718],{"class":290},[127,5606,1740],{"class":147},[127,5608,5609,5611,5613,5616,5618,5620,5622,5624,5626,5628,5630],{"class":129,"line":151},[127,5610,1914],{"class":147},[127,5612,1718],{"class":290},[127,5614,5615],{"class":781},"\"二维数组第二行的首地址：\"",[127,5617,1718],{"class":290},[127,5619,681],{"class":147},[127,5621,684],{"class":290},[127,5623,5598],{"class":147},[127,5625,893],{"class":154},[127,5627,1614],{"class":147},[127,5629,1718],{"class":290},[127,5631,1740],{"class":147},[127,5633,5634,5636,5638,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665],{"class":129,"line":167},[127,5635,1914],{"class":147},[127,5637,1718],{"class":290},[127,5639,5640],{"class":781},"\"二维数组第一个元素的首地址:\"",[127,5642,1718],{"class":290},[127,5644,681],{"class":147},[127,5646,684],{"class":290},[127,5648,1104],{"class":147},[127,5650,1028],{"class":290},[127,5652,4448],{"class":147},[127,5654,867],{"class":154},[127,5656,5443],{"class":147},[127,5658,867],{"class":154},[127,5660,1614],{"class":147},[127,5662,1718],{"class":290},[127,5664,1784],{"class":147},[127,5666,5667],{"class":133},"\u002F\u002F对于数，要加取址符\n",[575,5669,5670],{},"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":122,"searchDepth":137,"depth":137,"links":5672},[5673,5674,5675,5683,5684,5690,5695],{"id":622,"depth":137,"text":623},{"id":629,"depth":137,"text":630},{"id":646,"depth":137,"text":647,"children":5676},[5677,5678,5679,5680,5681,5682],{"id":650,"depth":151,"text":651},{"id":697,"depth":151,"text":698},{"id":762,"depth":151,"text":763},{"id":1699,"depth":151,"text":1700},{"id":1790,"depth":151,"text":1791},{"id":1888,"depth":151,"text":1889},{"id":1930,"depth":137,"text":1931},{"id":1998,"depth":137,"text":1999,"children":5685},[5686,5687,5688,5689],{"id":2002,"depth":151,"text":2003},{"id":2023,"depth":151,"text":2024},{"id":2032,"depth":151,"text":2033},{"id":2041,"depth":151,"text":2042},{"id":2050,"depth":137,"text":2051,"children":5691},[5692,5693,5694],{"id":2054,"depth":151,"text":2055},{"id":2747,"depth":151,"text":2748},{"id":4163,"depth":151,"text":4164},{"id":4304,"depth":137,"text":4305,"children":5696},[5697,5698],{"id":4308,"depth":151,"text":4309},{"id":5336,"depth":151,"text":5337},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":614,"description":122},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5705,"title":5706,"body":5707,"description":122,"extension":604,"meta":6807,"navigation":606,"path":6808,"seo":6809,"stem":6810,"__hash__":6811},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5708,"toc":6799},[5709,5712,5716,5724,5732,5735,5801,5805,5808,5884,5888,5891,5894,5897,6110,6114,6119,6183,6188,6255,6260,6351,6354,6459,6463,6466,6472,6616,6620,6623,6637,6640,6685,6688,6796],[10,5710,5706],{"id":5711},"_2函数",[14,5713,5715],{"id":5714},"_21函数概述","2.1函数概述",[632,5717,5718,5721],{},[635,5719,5720],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[635,5722,5723],{},"语法：",[117,5725,5730],{"className":5726,"code":5728,"language":5729,"meta":122},[5727],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[124,5731,5728],{"__ignoreMap":122},[19,5733,5734],{},"小案例",[117,5736,5738],{"className":669,"code":5737,"language":671,"meta":122,"style":122},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[124,5739,5740,5745,5769,5773,5790,5797],{"__ignoreMap":122},[127,5741,5742],{"class":129,"line":130},[127,5743,5744],{"class":133},"\u002F\u002Fnum1,num2形参\n",[127,5746,5747,5749,5752,5754,5756,5760,5762,5764,5767],{"class":129,"line":137},[127,5748,684],{"class":290},[127,5750,5751],{"class":143}," add",[127,5753,681],{"class":147},[127,5755,684],{"class":290},[127,5757,5759],{"class":5758},"s4XuR"," num1",[127,5761,1053],{"class":147},[127,5763,684],{"class":290},[127,5765,5766],{"class":5758}," num2",[127,5768,687],{"class":147},[127,5770,5771],{"class":129,"line":151},[127,5772,2090],{"class":147},[127,5774,5775,5777,5780,5782,5785,5787],{"class":129,"line":167},[127,5776,2527],{"class":290},[127,5778,5779],{"class":147}," sum",[127,5781,725],{"class":290},[127,5783,5784],{"class":147},"num1",[127,5786,1156],{"class":290},[127,5788,5789],{"class":147},"num2;\n",[127,5791,5792,5794],{"class":129,"line":415},[127,5793,4632],{"class":290},[127,5795,5796],{"class":147}," sum;\n",[127,5798,5799],{"class":129,"line":421},[127,5800,170],{"class":147},[14,5802,5804],{"id":5803},"_22函数调用","2.2函数调用",[19,5806,5807],{},"调用刚刚写的求和函数",[117,5809,5811],{"className":669,"code":5810,"language":671,"meta":122,"style":122},"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",[124,5812,5813,5821,5825,5830,5842,5854,5863,5868,5880],{"__ignoreMap":122},[127,5814,5815,5817,5819],{"class":129,"line":130},[127,5816,684],{"class":290},[127,5818,2515],{"class":143},[127,5820,2518],{"class":147},[127,5822,5823],{"class":129,"line":137},[127,5824,2090],{"class":147},[127,5826,5827],{"class":129,"line":151},[127,5828,5829],{"class":133},"    \u002F\u002Fa,b实参\n",[127,5831,5832,5834,5836,5838,5840],{"class":129,"line":167},[127,5833,2527],{"class":290},[127,5835,1943],{"class":147},[127,5837,725],{"class":290},[127,5839,867],{"class":154},[127,5841,164],{"class":147},[127,5843,5844,5846,5848,5850,5852],{"class":129,"line":415},[127,5845,2527],{"class":290},[127,5847,3375],{"class":147},[127,5849,725],{"class":290},[127,5851,867],{"class":154},[127,5853,164],{"class":147},[127,5855,5856,5858,5860],{"class":129,"line":421},[127,5857,2554],{"class":147},[127,5859,1974],{"class":290},[127,5861,5862],{"class":147},"a,b;\n",[127,5864,5865],{"class":129,"line":1766},[127,5866,5867],{"class":133},"    \u002F\u002F调用函数时，实参值传给了形参\n",[127,5869,5870,5872,5874,5877],{"class":129,"line":1856},[127,5871,2095],{"class":147},[127,5873,1718],{"class":290},[127,5875,5876],{"class":143},"add",[127,5878,5879],{"class":147},"(a,b);\n",[127,5881,5882],{"class":129,"line":1862},[127,5883,170],{"class":147},[14,5885,5887],{"id":5886},"_23值传递","2.3值传递",[19,5889,5890],{},"值传递就是函数调用时实参将数值传给形参",[19,5892,5893],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5895,5896],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[117,5898,5900],{"className":669,"code":5899,"language":671,"meta":122,"style":122},"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",[124,5901,5902,5924,5928,5941,5958,5976,5987,5996,6005,6018,6034,6050,6059,6063,6071,6075,6087,6099,6106],{"__ignoreMap":122},[127,5903,5904,5907,5910,5912,5914,5916,5918,5920,5922],{"class":129,"line":130},[127,5905,5906],{"class":290},"void",[127,5908,5909],{"class":143}," swap",[127,5911,681],{"class":147},[127,5913,684],{"class":290},[127,5915,5759],{"class":5758},[127,5917,1053],{"class":147},[127,5919,684],{"class":290},[127,5921,5766],{"class":5758},[127,5923,687],{"class":147},[127,5925,5926],{"class":129,"line":137},[127,5927,2090],{"class":147},[127,5929,5930,5932,5934,5937,5939],{"class":129,"line":151},[127,5931,2095],{"class":147},[127,5933,1718],{"class":290},[127,5935,5936],{"class":781},"\"交换前：\"",[127,5938,1718],{"class":290},[127,5940,1740],{"class":147},[127,5942,5943,5945,5947,5950,5952,5954,5956],{"class":129,"line":167},[127,5944,2095],{"class":147},[127,5946,1718],{"class":290},[127,5948,5949],{"class":781},"\"num1=\"",[127,5951,1718],{"class":290},[127,5953,5784],{"class":147},[127,5955,1718],{"class":290},[127,5957,1740],{"class":147},[127,5959,5960,5962,5964,5967,5969,5972,5974],{"class":129,"line":415},[127,5961,2095],{"class":147},[127,5963,1718],{"class":290},[127,5965,5966],{"class":781},"\"num2=\"",[127,5968,1718],{"class":290},[127,5970,5971],{"class":147},"num2",[127,5973,1718],{"class":290},[127,5975,1740],{"class":147},[127,5977,5978,5980,5982,5984],{"class":129,"line":421},[127,5979,2527],{"class":290},[127,5981,4797],{"class":147},[127,5983,725],{"class":290},[127,5985,5986],{"class":147},"num1;\n",[127,5988,5989,5992,5994],{"class":129,"line":1766},[127,5990,5991],{"class":147},"    num1",[127,5993,725],{"class":290},[127,5995,5789],{"class":147},[127,5997,5998,6001,6003],{"class":129,"line":1856},[127,5999,6000],{"class":147},"    num2",[127,6002,725],{"class":290},[127,6004,4822],{"class":147},[127,6006,6007,6009,6011,6014,6016],{"class":129,"line":1862},[127,6008,2095],{"class":147},[127,6010,1718],{"class":290},[127,6012,6013],{"class":781},"\"交换后：\"",[127,6015,1718],{"class":290},[127,6017,1740],{"class":147},[127,6019,6020,6022,6024,6026,6028,6030,6032],{"class":129,"line":1874},[127,6021,2095],{"class":147},[127,6023,1718],{"class":290},[127,6025,5949],{"class":781},[127,6027,1718],{"class":290},[127,6029,5784],{"class":147},[127,6031,1718],{"class":290},[127,6033,1740],{"class":147},[127,6035,6036,6038,6040,6042,6044,6046,6048],{"class":129,"line":2155},[127,6037,2095],{"class":147},[127,6039,1718],{"class":290},[127,6041,5966],{"class":781},[127,6043,1718],{"class":290},[127,6045,5971],{"class":147},[127,6047,1718],{"class":290},[127,6049,1740],{"class":147},[127,6051,6052,6054,6056],{"class":129,"line":2160},[127,6053,4632],{"class":290},[127,6055,734],{"class":147},[127,6057,6058],{"class":133},"\u002F\u002F或者不写\n",[127,6060,6061],{"class":129,"line":2166},[127,6062,170],{"class":147},[127,6064,6065,6067,6069],{"class":129,"line":2171},[127,6066,684],{"class":290},[127,6068,2515],{"class":143},[127,6070,2518],{"class":147},[127,6072,6073],{"class":129,"line":2185},[127,6074,2090],{"class":147},[127,6076,6077,6079,6081,6083,6085],{"class":129,"line":2190},[127,6078,2527],{"class":290},[127,6080,1943],{"class":147},[127,6082,725],{"class":290},[127,6084,1121],{"class":154},[127,6086,164],{"class":147},[127,6088,6089,6091,6093,6095,6097],{"class":129,"line":2196},[127,6090,2527],{"class":290},[127,6092,3375],{"class":147},[127,6094,725],{"class":290},[127,6096,1374],{"class":154},[127,6098,164],{"class":147},[127,6100,6101,6104],{"class":129,"line":2217},[127,6102,6103],{"class":143},"    swap",[127,6105,5879],{"class":147},[127,6107,6108],{"class":129,"line":2222},[127,6109,170],{"class":147},[14,6111,6113],{"id":6112},"_24函数的常见形式","2.4函数的常见形式",[632,6115,6116],{},[635,6117,6118],{},"无参无返",[117,6120,6122],{"className":669,"code":6121,"language":671,"meta":122,"style":122},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[124,6123,6124,6133,6137,6150,6154,6162,6166,6171,6179],{"__ignoreMap":122},[127,6125,6126,6128,6131],{"class":129,"line":130},[127,6127,5906],{"class":290},[127,6129,6130],{"class":143}," test01",[127,6132,2518],{"class":147},[127,6134,6135],{"class":129,"line":137},[127,6136,2090],{"class":147},[127,6138,6139,6141,6143,6146,6148],{"class":129,"line":151},[127,6140,2095],{"class":147},[127,6142,1718],{"class":290},[127,6144,6145],{"class":781},"\"你好\"",[127,6147,1718],{"class":290},[127,6149,1740],{"class":147},[127,6151,6152],{"class":129,"line":167},[127,6153,170],{"class":147},[127,6155,6156,6158,6160],{"class":129,"line":415},[127,6157,684],{"class":290},[127,6159,2515],{"class":143},[127,6161,2518],{"class":147},[127,6163,6164],{"class":129,"line":421},[127,6165,2090],{"class":147},[127,6167,6168],{"class":129,"line":1766},[127,6169,6170],{"class":133},"    \u002F\u002F函数调用\n",[127,6172,6173,6176],{"class":129,"line":1856},[127,6174,6175],{"class":143},"    test01",[127,6177,6178],{"class":147},"();\n",[127,6180,6181],{"class":129,"line":1862},[127,6182,170],{"class":147},[632,6184,6185],{"start":137},[635,6186,6187],{},"有参无返",[117,6189,6191],{"className":669,"code":6190,"language":671,"meta":122,"style":122},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[124,6192,6193,6208,6212,6224,6228,6236,6240,6251],{"__ignoreMap":122},[127,6194,6195,6197,6200,6202,6204,6206],{"class":129,"line":130},[127,6196,5906],{"class":290},[127,6198,6199],{"class":143}," test02",[127,6201,681],{"class":147},[127,6203,684],{"class":290},[127,6205,1943],{"class":5758},[127,6207,687],{"class":147},[127,6209,6210],{"class":129,"line":137},[127,6211,2090],{"class":147},[127,6213,6214,6216,6218,6220,6222],{"class":129,"line":151},[127,6215,2095],{"class":147},[127,6217,1718],{"class":290},[127,6219,6145],{"class":781},[127,6221,1718],{"class":290},[127,6223,1740],{"class":147},[127,6225,6226],{"class":129,"line":167},[127,6227,170],{"class":147},[127,6229,6230,6232,6234],{"class":129,"line":415},[127,6231,684],{"class":290},[127,6233,2515],{"class":143},[127,6235,2518],{"class":147},[127,6237,6238],{"class":129,"line":421},[127,6239,2090],{"class":147},[127,6241,6242,6245,6247,6249],{"class":129,"line":1766},[127,6243,6244],{"class":143},"    test02",[127,6246,681],{"class":147},[127,6248,986],{"class":154},[127,6250,3261],{"class":147},[127,6252,6253],{"class":129,"line":1856},[127,6254,170],{"class":147},[632,6256,6257],{"start":151},[635,6258,6259],{},"无参有返",[117,6261,6263],{"className":669,"code":6262,"language":671,"meta":122,"style":122},"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",[124,6264,6265,6274,6278,6290,6299,6303,6311,6315,6328,6347],{"__ignoreMap":122},[127,6266,6267,6269,6272],{"class":129,"line":130},[127,6268,684],{"class":290},[127,6270,6271],{"class":143}," test03",[127,6273,2518],{"class":147},[127,6275,6276],{"class":129,"line":137},[127,6277,2090],{"class":147},[127,6279,6280,6282,6284,6286,6288],{"class":129,"line":151},[127,6281,2095],{"class":147},[127,6283,1718],{"class":290},[127,6285,6145],{"class":781},[127,6287,1718],{"class":290},[127,6289,1740],{"class":147},[127,6291,6292,6294,6297],{"class":129,"line":167},[127,6293,4632],{"class":290},[127,6295,6296],{"class":154}," 100",[127,6298,164],{"class":147},[127,6300,6301],{"class":129,"line":415},[127,6302,170],{"class":147},[127,6304,6305,6307,6309],{"class":129,"line":421},[127,6306,684],{"class":290},[127,6308,2515],{"class":143},[127,6310,2518],{"class":147},[127,6312,6313],{"class":129,"line":1766},[127,6314,2090],{"class":147},[127,6316,6317,6319,6321,6323,6326],{"class":129,"line":1856},[127,6318,2527],{"class":290},[127,6320,5759],{"class":147},[127,6322,725],{"class":290},[127,6324,6325],{"class":143},"test03",[127,6327,6178],{"class":147},[127,6329,6330,6332,6334,6336,6338,6340,6342,6344],{"class":129,"line":1862},[127,6331,2095],{"class":147},[127,6333,1718],{"class":290},[127,6335,5949],{"class":781},[127,6337,1718],{"class":290},[127,6339,5784],{"class":147},[127,6341,1718],{"class":290},[127,6343,1784],{"class":147},[127,6345,6346],{"class":133}," \u002F\u002F100\n",[127,6348,6349],{"class":129,"line":1874},[127,6350,170],{"class":147},[19,6352,6353],{},"4.有参有返",[117,6355,6357],{"className":669,"code":6356,"language":671,"meta":122,"style":122},"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",[124,6358,6359,6374,6378,6391,6397,6401,6410,6414,6426,6440,6455],{"__ignoreMap":122},[127,6360,6361,6363,6366,6368,6370,6372],{"class":129,"line":130},[127,6362,684],{"class":290},[127,6364,6365],{"class":143}," test04",[127,6367,681],{"class":147},[127,6369,684],{"class":290},[127,6371,1943],{"class":5758},[127,6373,687],{"class":147},[127,6375,6376],{"class":129,"line":137},[127,6377,2090],{"class":147},[127,6379,6380,6382,6384,6387,6389],{"class":129,"line":151},[127,6381,2095],{"class":147},[127,6383,1718],{"class":290},[127,6385,6386],{"class":781},"\"hello\"",[127,6388,1718],{"class":290},[127,6390,1740],{"class":147},[127,6392,6393,6395],{"class":129,"line":167},[127,6394,4632],{"class":290},[127,6396,1977],{"class":147},[127,6398,6399],{"class":129,"line":415},[127,6400,170],{"class":147},[127,6402,6403,6405,6408],{"class":129,"line":421},[127,6404,684],{"class":290},[127,6406,6407],{"class":143}," mian",[127,6409,2518],{"class":147},[127,6411,6412],{"class":129,"line":1766},[127,6413,2090],{"class":147},[127,6415,6416,6418,6420,6422,6424],{"class":129,"line":1856},[127,6417,2527],{"class":290},[127,6419,3375],{"class":147},[127,6421,725],{"class":290},[127,6423,893],{"class":154},[127,6425,164],{"class":147},[127,6427,6428,6430,6432,6434,6437],{"class":129,"line":1862},[127,6429,2527],{"class":290},[127,6431,3391],{"class":147},[127,6433,725],{"class":290},[127,6435,6436],{"class":143},"test04",[127,6438,6439],{"class":147},"(b);\n",[127,6441,6442,6444,6446,6448,6450,6452],{"class":129,"line":1874},[127,6443,2095],{"class":147},[127,6445,1718],{"class":290},[127,6447,963],{"class":147},[127,6449,1718],{"class":290},[127,6451,1784],{"class":147},[127,6453,6454],{"class":133}," \u002F\u002F1\n",[127,6456,6457],{"class":129,"line":2155},[127,6458,170],{"class":147},[14,6460,6462],{"id":6461},"_25函数的声明","2.5函数的声明",[19,6464,6465],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6467,6468,6469],{},"函数的",[30,6470,6471],{},"声明可以多次，但是函数的定义只能有一次",[117,6473,6475],{"className":669,"code":6474,"language":671,"meta":122,"style":122},"\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",[124,6476,6477,6482,6487,6512,6521,6525,6537,6549,6565,6569,6589,6593,6612],{"__ignoreMap":122},[127,6478,6479],{"class":129,"line":130},[127,6480,6481],{"class":133},"\u002F\u002F函数声明\n",[127,6483,6484],{"class":129,"line":137},[127,6485,6486],{"class":133},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[127,6488,6489,6491,6494,6496,6498,6500,6502,6504,6506,6509],{"class":129,"line":151},[127,6490,684],{"class":290},[127,6492,6493],{"class":143}," max",[127,6495,681],{"class":147},[127,6497,684],{"class":290},[127,6499,1943],{"class":5758},[127,6501,1053],{"class":147},[127,6503,684],{"class":290},[127,6505,3375],{"class":5758},[127,6507,6508],{"class":147},");",[127,6510,6511],{"class":133},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[127,6513,6514,6516,6518],{"class":129,"line":167},[127,6515,684],{"class":290},[127,6517,2515],{"class":143},[127,6519,6520],{"class":147},"() \n",[127,6522,6523],{"class":129,"line":415},[127,6524,2090],{"class":147},[127,6526,6527,6529,6531,6533,6535],{"class":129,"line":421},[127,6528,2527],{"class":290},[127,6530,1943],{"class":147},[127,6532,725],{"class":290},[127,6534,1121],{"class":154},[127,6536,164],{"class":147},[127,6538,6539,6541,6543,6545,6547],{"class":129,"line":1766},[127,6540,2527],{"class":290},[127,6542,3375],{"class":147},[127,6544,725],{"class":290},[127,6546,1374],{"class":154},[127,6548,164],{"class":147},[127,6550,6551,6553,6555,6558,6561,6563],{"class":129,"line":1856},[127,6552,2095],{"class":147},[127,6554,1718],{"class":290},[127,6556,6557],{"class":143},"max",[127,6559,6560],{"class":147},"(a,b)",[127,6562,1718],{"class":290},[127,6564,1740],{"class":147},[127,6566,6567],{"class":129,"line":1862},[127,6568,170],{"class":147},[127,6570,6571,6573,6575,6577,6579,6581,6583,6585,6587],{"class":129,"line":1874},[127,6572,684],{"class":290},[127,6574,6493],{"class":143},[127,6576,681],{"class":147},[127,6578,684],{"class":290},[127,6580,1943],{"class":5758},[127,6582,1053],{"class":147},[127,6584,684],{"class":290},[127,6586,3375],{"class":5758},[127,6588,687],{"class":147},[127,6590,6591],{"class":129,"line":2155},[127,6592,2090],{"class":147},[127,6594,6595,6597,6599,6601,6603,6605,6607,6609],{"class":129,"line":2160},[127,6596,4632],{"class":290},[127,6598,1943],{"class":147},[127,6600,1634],{"class":290},[127,6602,938],{"class":147},[127,6604,1660],{"class":290},[127,6606,457],{"class":147},[127,6608,1533],{"class":290},[127,6610,6611],{"class":147},"b;\n",[127,6613,6614],{"class":129,"line":2166},[127,6615,170],{"class":147},[14,6617,6619],{"id":6618},"_26函数的分文件编写","2.6函数的分文件编写",[19,6621,6622],{},"4个步骤：",[1681,6624,6625,6628,6631,6634],{},[635,6626,6627],{},"1.创建后缀名为.h的头文件",[635,6629,6630],{},"2.创建后缀名为.cpp的源文件",[635,6632,6633],{},"3.在头文件中写函数的定义",[635,6635,6636],{},"4.在源文件中写函数的定义\n示例：",[19,6638,6639],{},"头文件：swap.h",[117,6641,6643],{"className":669,"code":6642,"language":671,"meta":122,"style":122},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[124,6644,6645,6651,6661,6665],{"__ignoreMap":122},[127,6646,6647,6649],{"class":129,"line":130},[127,6648,2492],{"class":290},[127,6650,2495],{"class":781},[127,6652,6653,6655,6657,6659],{"class":129,"line":137},[127,6654,2500],{"class":290},[127,6656,2503],{"class":290},[127,6658,2506],{"class":143},[127,6660,164],{"class":147},[127,6662,6663],{"class":129,"line":151},[127,6664,6481],{"class":133},[127,6666,6667,6669,6671,6673,6675,6677,6679,6681,6683],{"class":129,"line":167},[127,6668,5906],{"class":290},[127,6670,5909],{"class":143},[127,6672,681],{"class":147},[127,6674,684],{"class":290},[127,6676,1943],{"class":5758},[127,6678,1053],{"class":147},[127,6680,684],{"class":290},[127,6682,3375],{"class":5758},[127,6684,3261],{"class":147},[19,6686,6687],{},"源文件：swap.cpp",[117,6689,6691],{"className":669,"code":6690,"language":671,"meta":122,"style":122},"#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",[124,6692,6693,6700,6705,6725,6729,6740,6749,6758,6775,6792],{"__ignoreMap":122},[127,6694,6695,6697],{"class":129,"line":130},[127,6696,2492],{"class":290},[127,6698,6699],{"class":781}," \"swap.h\"\n",[127,6701,6702],{"class":129,"line":137},[127,6703,6704],{"class":133},"\u002F\u002F函数的定义\n",[127,6706,6707,6709,6711,6713,6715,6717,6719,6721,6723],{"class":129,"line":151},[127,6708,5906],{"class":290},[127,6710,5909],{"class":143},[127,6712,681],{"class":147},[127,6714,684],{"class":290},[127,6716,1943],{"class":5758},[127,6718,1053],{"class":147},[127,6720,684],{"class":290},[127,6722,3375],{"class":5758},[127,6724,687],{"class":147},[127,6726,6727],{"class":129,"line":167},[127,6728,2090],{"class":147},[127,6730,6731,6733,6735,6737],{"class":129,"line":415},[127,6732,2527],{"class":290},[127,6734,4797],{"class":147},[127,6736,725],{"class":290},[127,6738,6739],{"class":147},"a;\n",[127,6741,6742,6745,6747],{"class":129,"line":421},[127,6743,6744],{"class":147},"    a",[127,6746,725],{"class":290},[127,6748,6611],{"class":147},[127,6750,6751,6754,6756],{"class":129,"line":1766},[127,6752,6753],{"class":147},"    b",[127,6755,725],{"class":290},[127,6757,4822],{"class":147},[127,6759,6760,6762,6764,6767,6769,6771,6773],{"class":129,"line":1856},[127,6761,2095],{"class":147},[127,6763,1718],{"class":290},[127,6765,6766],{"class":781},"\"a=\"",[127,6768,1718],{"class":290},[127,6770,457],{"class":147},[127,6772,1718],{"class":290},[127,6774,1740],{"class":147},[127,6776,6777,6779,6781,6784,6786,6788,6790],{"class":129,"line":1862},[127,6778,2095],{"class":147},[127,6780,1718],{"class":290},[127,6782,6783],{"class":781},"\"b=\"",[127,6785,1718],{"class":290},[127,6787,938],{"class":147},[127,6789,1718],{"class":290},[127,6791,1740],{"class":147},[127,6793,6794],{"class":129,"line":1874},[127,6795,170],{"class":147},[575,6797,6798],{},"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":122,"searchDepth":137,"depth":137,"links":6800},[6801,6802,6803,6804,6805,6806],{"id":5714,"depth":137,"text":5715},{"id":5803,"depth":137,"text":5804},{"id":5886,"depth":137,"text":5887},{"id":6112,"depth":137,"text":6113},{"id":6461,"depth":137,"text":6462},{"id":6618,"depth":137,"text":6619},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5706,"description":122},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6813,"title":6814,"body":6815,"description":6822,"extension":604,"meta":8227,"navigation":606,"path":8228,"seo":8229,"stem":8230,"__hash__":8231},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6816,"toc":8217},[6817,6820,6823,6827,6989,6993,6996,6999,7002,7005,7145,7149,7152,7155,7158,7223,7227,7232,7299,7302,7306,7309,7320,7325,7345,7348,7353,7372,7375,7379,7398,7401,7405,7640,7644,7647,7650,7653,7815,7818,7822,7825,7831,8214],[10,6818,6814],{"id":6819},"_3指针",[19,6821,6822],{},"通过指针保存一个地址，指针就是个地址",[14,6824,6826],{"id":6825},"_31定义指针","3.1定义指针",[117,6828,6830],{"className":669,"code":6829,"language":671,"meta":122,"style":122},"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",[124,6831,6832,6840,6844,6849,6861,6866,6874,6884,6902,6922,6926,6931,6936,6941,6955,6971,6985],{"__ignoreMap":122},[127,6833,6834,6836,6838],{"class":129,"line":130},[127,6835,684],{"class":290},[127,6837,2515],{"class":143},[127,6839,2518],{"class":147},[127,6841,6842],{"class":129,"line":137},[127,6843,2090],{"class":147},[127,6845,6846],{"class":129,"line":151},[127,6847,6848],{"class":133},"    \u002F\u002F1.定义指针\n",[127,6850,6851,6853,6855,6857,6859],{"class":129,"line":167},[127,6852,2527],{"class":290},[127,6854,1943],{"class":147},[127,6856,725],{"class":290},[127,6858,1121],{"class":154},[127,6860,164],{"class":147},[127,6862,6863],{"class":129,"line":415},[127,6864,6865],{"class":133},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[127,6867,6868,6871],{"class":129,"line":421},[127,6869,6870],{"class":290},"    int*",[127,6872,6873],{"class":147},"p;\n",[127,6875,6876,6879,6882],{"class":129,"line":1766},[127,6877,6878],{"class":147},"    p",[127,6880,6881],{"class":290},"=&",[127,6883,6739],{"class":147},[127,6885,6886,6888,6890,6893,6896,6898,6900],{"class":129,"line":1856},[127,6887,2095],{"class":147},[127,6889,1718],{"class":290},[127,6891,6892],{"class":781},"\"a的地址为：\"",[127,6894,6895],{"class":290},"\u003C\u003C&",[127,6897,457],{"class":147},[127,6899,1718],{"class":290},[127,6901,1740],{"class":147},[127,6903,6904,6906,6908,6911,6913,6915,6917,6919],{"class":129,"line":1862},[127,6905,2095],{"class":147},[127,6907,1718],{"class":290},[127,6909,6910],{"class":781},"\"指针p为：\"",[127,6912,1718],{"class":290},[127,6914,19],{"class":147},[127,6916,1718],{"class":290},[127,6918,1784],{"class":147},[127,6920,6921],{"class":133},"\u002F\u002F指针p表示的就是a的地址\n",[127,6923,6924],{"class":129,"line":1874},[127,6925,2942],{"emptyLinePlaceholder":606},[127,6927,6928],{"class":129,"line":2155},[127,6929,6930],{"class":133},"    \u002F\u002F2.使用指针\n",[127,6932,6933],{"class":129,"line":2160},[127,6934,6935],{"class":133},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[127,6937,6938],{"class":129,"line":2166},[127,6939,6940],{"class":133},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[127,6942,6943,6946,6948,6950,6953],{"class":129,"line":2171},[127,6944,6945],{"class":290},"    *",[127,6947,19],{"class":147},[127,6949,725],{"class":290},[127,6951,6952],{"class":154},"1000",[127,6954,164],{"class":147},[127,6956,6957,6959,6962,6964,6966,6968],{"class":129,"line":2185},[127,6958,2095],{"class":147},[127,6960,6961],{"class":290},"\u003C\u003C*",[127,6963,19],{"class":147},[127,6965,1718],{"class":290},[127,6967,1784],{"class":147},[127,6969,6970],{"class":133},"\u002F\u002F1000\n",[127,6972,6973,6975,6977,6979,6981,6983],{"class":129,"line":2190},[127,6974,2095],{"class":147},[127,6976,1718],{"class":290},[127,6978,457],{"class":147},[127,6980,1718],{"class":290},[127,6982,1784],{"class":147},[127,6984,6970],{"class":133},[127,6986,6987],{"class":129,"line":2196},[127,6988,170],{"class":147},[14,6990,6992],{"id":6991},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6994,6995],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6997,6998],{},"在32位操作系统下：占用4个字节空间",[19,7000,7001],{},"在64位操作系统下：占用8个字节空间",[19,7003,7004],{},"上方是不管啥数据类型的",[117,7006,7008],{"className":669,"code":7007,"language":671,"meta":122,"style":122},"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",[124,7009,7010,7018,7022,7027,7039,7044,7049,7054,7067,7089,7115,7141],{"__ignoreMap":122},[127,7011,7012,7014,7016],{"class":129,"line":130},[127,7013,684],{"class":290},[127,7015,2515],{"class":143},[127,7017,2518],{"class":147},[127,7019,7020],{"class":129,"line":137},[127,7021,2090],{"class":147},[127,7023,7024],{"class":129,"line":151},[127,7025,7026],{"class":133},"    \u002F\u002F指针所占内存空间\n",[127,7028,7029,7031,7033,7035,7037],{"class":129,"line":167},[127,7030,2527],{"class":290},[127,7032,1943],{"class":147},[127,7034,725],{"class":290},[127,7036,1121],{"class":154},[127,7038,164],{"class":147},[127,7040,7041],{"class":129,"line":415},[127,7042,7043],{"class":133},"    \u002F\u002Fint *p;\n",[127,7045,7046],{"class":129,"line":421},[127,7047,7048],{"class":133},"    \u002F\u002Fp=&a;\n",[127,7050,7051],{"class":129,"line":1766},[127,7052,7053],{"class":133},"    \u002F\u002F上述可以写为以下：\n",[127,7055,7056,7058,7061,7063,7065],{"class":129,"line":1856},[127,7057,2527],{"class":290},[127,7059,7060],{"class":290}," *",[127,7062,19],{"class":147},[127,7064,6881],{"class":290},[127,7066,6739],{"class":147},[127,7068,7069,7072,7074,7077,7079,7082,7084,7086],{"class":129,"line":1862},[127,7070,7071],{"class":147},"    cout ",[127,7073,1718],{"class":290},[127,7075,7076],{"class":781},"\"sizeof(int *)\"",[127,7078,1917],{"class":290},[127,7080,7081],{"class":147},"(p)",[127,7083,1718],{"class":290},[127,7085,1784],{"class":147},[127,7087,7088],{"class":133},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[127,7090,7091,7093,7095,7097,7099,7101,7103,7105,7107,7109,7112],{"class":129,"line":1874},[127,7092,7071],{"class":147},[127,7094,1718],{"class":290},[127,7096,7076],{"class":781},[127,7098,1917],{"class":290},[127,7100,681],{"class":147},[127,7102,684],{"class":290},[127,7104,7060],{"class":290},[127,7106,1104],{"class":147},[127,7108,1718],{"class":290},[127,7110,7111],{"class":147},"endl",[127,7113,7114],{"class":133},"  \u002F\u002F4字节(32位的话)\n",[127,7116,7117,7119,7121,7124,7126,7128,7130,7132,7134,7136,7138],{"class":129,"line":2155},[127,7118,7071],{"class":147},[127,7120,1718],{"class":290},[127,7122,7123],{"class":781},"\"sizeof(char *)\"",[127,7125,1917],{"class":290},[127,7127,681],{"class":147},[127,7129,773],{"class":290},[127,7131,7060],{"class":290},[127,7133,1104],{"class":147},[127,7135,1718],{"class":290},[127,7137,1784],{"class":147},[127,7139,7140],{"class":133}," \u002F\u002F4字节(32位的话)\n",[127,7142,7143],{"class":129,"line":2160},[127,7144,170],{"class":147},[14,7146,7148],{"id":7147},"_33空指针","3.3空指针",[19,7150,7151],{},"空指针：指针变量指向内存中编号为0的空间",[19,7153,7154],{},"用途：初始化指针变量",[19,7156,7157],{},"注意：空指针指向的内存是不可以访问的",[117,7159,7161],{"className":669,"code":7160,"language":671,"meta":122,"style":122},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[124,7162,7163,7171,7175,7180,7194,7199,7214,7219],{"__ignoreMap":122},[127,7164,7165,7167,7169],{"class":129,"line":130},[127,7166,684],{"class":290},[127,7168,2515],{"class":143},[127,7170,2518],{"class":147},[127,7172,7173],{"class":129,"line":137},[127,7174,2090],{"class":147},[127,7176,7177],{"class":129,"line":151},[127,7178,7179],{"class":133},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[127,7181,7182,7184,7186,7188,7190,7192],{"class":129,"line":167},[127,7183,2527],{"class":290},[127,7185,7060],{"class":290},[127,7187,19],{"class":147},[127,7189,725],{"class":290},[127,7191,2934],{"class":154},[127,7193,164],{"class":147},[127,7195,7196],{"class":129,"line":415},[127,7197,7198],{"class":133},"    \u002F\u002F2.空指针不能进行访问\n",[127,7200,7201,7203,7205,7207,7209,7211],{"class":129,"line":421},[127,7202,6945],{"class":290},[127,7204,19],{"class":147},[127,7206,725],{"class":290},[127,7208,986],{"class":154},[127,7210,734],{"class":147},[127,7212,7213],{"class":133},"\u002F\u002F直接报错，压根不能访问\n",[127,7215,7216],{"class":129,"line":1766},[127,7217,7218],{"class":133},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[127,7220,7221],{"class":129,"line":1856},[127,7222,170],{"class":147},[14,7224,7226],{"id":7225},"_34野指针","3.4野指针",[19,7228,7229],{},[30,7230,7231],{},"指针变量指向非法的内存空间",[117,7233,7235],{"className":669,"code":7234,"language":671,"meta":122,"style":122},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[124,7236,7237,7245,7249,7278,7283,7295],{"__ignoreMap":122},[127,7238,7239,7241,7243],{"class":129,"line":130},[127,7240,684],{"class":290},[127,7242,2515],{"class":143},[127,7244,2518],{"class":147},[127,7246,7247],{"class":129,"line":137},[127,7248,2090],{"class":147},[127,7250,7251,7253,7255,7257,7259,7261,7263,7265,7267,7270,7273,7275],{"class":129,"line":151},[127,7252,2527],{"class":290},[127,7254,7060],{"class":290},[127,7256,19],{"class":147},[127,7258,725],{"class":290},[127,7260,681],{"class":147},[127,7262,684],{"class":290},[127,7264,7060],{"class":290},[127,7266,1104],{"class":147},[127,7268,7269],{"class":290},"0x",[127,7271,7272],{"class":154},"1100",[127,7274,734],{"class":147},[127,7276,7277],{"class":133}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[127,7279,7280],{"class":129,"line":167},[127,7281,7282],{"class":133},"    \u002F\u002F访问野指针报错\n",[127,7284,7285,7287,7289,7291,7293],{"class":129,"line":415},[127,7286,2095],{"class":147},[127,7288,6961],{"class":290},[127,7290,19],{"class":147},[127,7292,1718],{"class":290},[127,7294,1740],{"class":147},[127,7296,7297],{"class":129,"line":421},[127,7298,170],{"class":147},[19,7300,7301],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7303,7305],{"id":7304},"_35const修饰指针","3.5const修饰指针",[19,7307,7308],{},"三种情况：",[1681,7310,7311,7314,7317],{},[635,7312,7313],{},"const修饰指针 常量指针",[635,7315,7316],{},"const修饰常量 指针常量",[635,7318,7319],{},"const即修饰指针，又修饰常量",[632,7321,7322],{},[635,7323,7324],{},"常量指针",[117,7326,7328],{"className":669,"code":7327,"language":671,"meta":122,"style":122},"const int *p=&a;\n",[124,7329,7330],{"__ignoreMap":122},[127,7331,7332,7335,7337,7339,7341,7343],{"class":129,"line":130},[127,7333,7334],{"class":290},"const",[127,7336,2924],{"class":290},[127,7338,7060],{"class":290},[127,7340,19],{"class":147},[127,7342,6881],{"class":290},[127,7344,6739],{"class":147},[19,7346,7347],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[632,7349,7350],{"start":137},[635,7351,7352],{},"指针常量",[117,7354,7356],{"className":669,"code":7355,"language":671,"meta":122,"style":122},"int *const p=&a;\n",[124,7357,7358],{"__ignoreMap":122},[127,7359,7360,7362,7365,7368,7370],{"class":129,"line":130},[127,7361,684],{"class":290},[127,7363,7364],{"class":290}," *const",[127,7366,7367],{"class":147}," p",[127,7369,6881],{"class":290},[127,7371,6739],{"class":147},[19,7373,7374],{},"指针的指向不可以改，指针指向的值可以改",[632,7376,7377],{"start":151},[635,7378,7319],{},[117,7380,7382],{"className":669,"code":7381,"language":671,"meta":122,"style":122},"const int *const p=&a;\n",[124,7383,7384],{"__ignoreMap":122},[127,7385,7386,7388,7390,7392,7394,7396],{"class":129,"line":130},[127,7387,7334],{"class":290},[127,7389,2924],{"class":290},[127,7391,7364],{"class":290},[127,7393,7367],{"class":147},[127,7395,6881],{"class":290},[127,7397,6739],{"class":147},[19,7399,7400],{},"指针的指向和指针指向的值都不可以改变",[14,7402,7404],{"id":7403},"_36指针和数组","3.6指针和数组",[117,7406,7408],{"className":669,"code":7407,"language":671,"meta":122,"style":122},"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",[124,7409,7410,7418,7422,7427,7481,7502,7518,7534,7545,7562,7567,7581,7607,7611,7623,7632,7636],{"__ignoreMap":122},[127,7411,7412,7414,7416],{"class":129,"line":130},[127,7413,684],{"class":290},[127,7415,2515],{"class":143},[127,7417,2518],{"class":147},[127,7419,7420],{"class":129,"line":137},[127,7421,2090],{"class":147},[127,7423,7424],{"class":129,"line":151},[127,7425,7426],{"class":133},"    \u002F\u002F利用指针访问数组中的元素\n",[127,7428,7429,7431,7433,7435,7437,7439,7441,7443,7445,7447,7449,7451,7453,7455,7457,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477,7479],{"class":129,"line":167},[127,7430,2527],{"class":290},[127,7432,4504],{"class":147},[127,7434,1121],{"class":154},[127,7436,1614],{"class":147},[127,7438,725],{"class":290},[127,7440,1570],{"class":147},[127,7442,893],{"class":154},[127,7444,1053],{"class":147},[127,7446,530],{"class":154},[127,7448,1053],{"class":147},[127,7450,749],{"class":154},[127,7452,1053],{"class":147},[127,7454,968],{"class":154},[127,7456,1053],{"class":147},[127,7458,994],{"class":154},[127,7460,1053],{"class":147},[127,7462,1019],{"class":154},[127,7464,1053],{"class":147},[127,7466,1044],{"class":154},[127,7468,1053],{"class":147},[127,7470,1070],{"class":154},[127,7472,1053],{"class":147},[127,7474,1095],{"class":154},[127,7476,1053],{"class":147},[127,7478,1121],{"class":154},[127,7480,4537],{"class":147},[127,7482,7483,7485,7487,7490,7492,7494,7496,7498,7500],{"class":129,"line":415},[127,7484,2095],{"class":147},[127,7486,1718],{"class":290},[127,7488,7489],{"class":781},"\"数组的第一个元素为：\"",[127,7491,1718],{"class":290},[127,7493,4448],{"class":147},[127,7495,867],{"class":154},[127,7497,1614],{"class":147},[127,7499,1718],{"class":290},[127,7501,1740],{"class":147},[127,7503,7504,7506,7508,7510,7512,7515],{"class":129,"line":421},[127,7505,2527],{"class":290},[127,7507,7060],{"class":290},[127,7509,19],{"class":147},[127,7511,725],{"class":290},[127,7513,7514],{"class":147},"arr;",[127,7516,7517],{"class":133},"\u002F\u002F注意数才要加取地址符号&\n",[127,7519,7520,7522,7524,7526,7528,7530,7532],{"class":129,"line":1766},[127,7521,2095],{"class":147},[127,7523,1718],{"class":290},[127,7525,7489],{"class":781},[127,7527,6961],{"class":290},[127,7529,19],{"class":147},[127,7531,1718],{"class":290},[127,7533,1740],{"class":147},[127,7535,7536,7538,7540,7542],{"class":129,"line":1856},[127,7537,6878],{"class":147},[127,7539,2834],{"class":290},[127,7541,734],{"class":147},[127,7543,7544],{"class":133}," \u002F\u002F让指针向后偏移4个字节\n",[127,7546,7547,7549,7551,7554,7556,7558,7560],{"class":129,"line":1862},[127,7548,2095],{"class":147},[127,7550,1718],{"class":290},[127,7552,7553],{"class":781},"\"数组的第二个元素为：\"",[127,7555,6961],{"class":290},[127,7557,19],{"class":147},[127,7559,1718],{"class":290},[127,7561,1740],{"class":147},[127,7563,7564],{"class":129,"line":1874},[127,7565,7566],{"class":133},"    \u002F\u002F利用指针遍历数组\n",[127,7568,7569,7571,7573,7576,7578],{"class":129,"line":2155},[127,7570,2527],{"class":290},[127,7572,7060],{"class":290},[127,7574,7575],{"class":147},"p2",[127,7577,725],{"class":290},[127,7579,7580],{"class":147},"arr;\n",[127,7582,7583,7585,7587,7589,7591,7593,7595,7597,7599,7601,7603,7605],{"class":129,"line":2160},[127,7584,3743],{"class":290},[127,7586,2201],{"class":147},[127,7588,684],{"class":290},[127,7590,3574],{"class":147},[127,7592,725],{"class":290},[127,7594,867],{"class":154},[127,7596,3581],{"class":147},[127,7598,1584],{"class":290},[127,7600,1121],{"class":154},[127,7602,3581],{"class":147},[127,7604,2834],{"class":290},[127,7606,687],{"class":147},[127,7608,7609],{"class":129,"line":2166},[127,7610,2572],{"class":147},[127,7612,7613,7615,7617,7619,7621],{"class":129,"line":2171},[127,7614,3993],{"class":147},[127,7616,6961],{"class":290},[127,7618,7575],{"class":147},[127,7620,1718],{"class":290},[127,7622,1740],{"class":147},[127,7624,7625,7628,7630],{"class":129,"line":2185},[127,7626,7627],{"class":147},"        p2",[127,7629,2834],{"class":290},[127,7631,164],{"class":147},[127,7633,7634],{"class":129,"line":2190},[127,7635,2729],{"class":147},[127,7637,7638],{"class":129,"line":2196},[127,7639,170],{"class":147},[14,7641,7643],{"id":7642},"_37指针和函数","3.7指针和函数",[19,7645,7646],{},"利用指针做函数参数，可以修改实参的值",[19,7648,7649],{},"值传递：只改变形参，不改变实参",[19,7651,7652],{},"地址传递：",[117,7654,7656],{"className":669,"code":7655,"language":671,"meta":122,"style":122},"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",[124,7657,7658,7683,7687,7699,7710,7720,7724,7732,7736,7748,7760,7765,7781,7796,7811],{"__ignoreMap":122},[127,7659,7660,7662,7664,7666,7668,7670,7673,7675,7677,7679,7681],{"class":129,"line":130},[127,7661,5906],{"class":290},[127,7663,5909],{"class":143},[127,7665,681],{"class":147},[127,7667,684],{"class":290},[127,7669,7060],{"class":290},[127,7671,7672],{"class":5758},"p1",[127,7674,1053],{"class":147},[127,7676,684],{"class":290},[127,7678,7060],{"class":290},[127,7680,7575],{"class":5758},[127,7682,687],{"class":147},[127,7684,7685],{"class":129,"line":137},[127,7686,2090],{"class":147},[127,7688,7689,7691,7693,7696],{"class":129,"line":151},[127,7690,2527],{"class":290},[127,7692,4797],{"class":147},[127,7694,7695],{"class":290},"=*",[127,7697,7698],{"class":147},"p1;\n",[127,7700,7701,7703,7705,7707],{"class":129,"line":167},[127,7702,6945],{"class":290},[127,7704,7672],{"class":147},[127,7706,7695],{"class":290},[127,7708,7709],{"class":147},"p2;\n",[127,7711,7712,7714,7716,7718],{"class":129,"line":415},[127,7713,6945],{"class":290},[127,7715,7575],{"class":147},[127,7717,725],{"class":290},[127,7719,4822],{"class":147},[127,7721,7722],{"class":129,"line":421},[127,7723,170],{"class":147},[127,7725,7726,7728,7730],{"class":129,"line":1766},[127,7727,684],{"class":290},[127,7729,2515],{"class":143},[127,7731,2518],{"class":147},[127,7733,7734],{"class":129,"line":1856},[127,7735,2090],{"class":147},[127,7737,7738,7740,7742,7744,7746],{"class":129,"line":1862},[127,7739,2527],{"class":290},[127,7741,1943],{"class":147},[127,7743,725],{"class":290},[127,7745,1121],{"class":154},[127,7747,164],{"class":147},[127,7749,7750,7752,7754,7756,7758],{"class":129,"line":1874},[127,7751,2527],{"class":290},[127,7753,3375],{"class":147},[127,7755,725],{"class":290},[127,7757,1374],{"class":154},[127,7759,164],{"class":147},[127,7761,7762],{"class":129,"line":2155},[127,7763,7764],{"class":133},"    \u002F\u002F地址传递\n",[127,7766,7767,7769,7771,7773,7776,7778],{"class":129,"line":2160},[127,7768,6103],{"class":143},[127,7770,681],{"class":147},[127,7772,1028],{"class":290},[127,7774,7775],{"class":147},"a,",[127,7777,1028],{"class":290},[127,7779,7780],{"class":147},"b);\n",[127,7782,7783,7785,7787,7789,7791,7793],{"class":129,"line":2166},[127,7784,2095],{"class":147},[127,7786,1718],{"class":290},[127,7788,457],{"class":147},[127,7790,1718],{"class":290},[127,7792,1784],{"class":147},[127,7794,7795],{"class":133},"\u002F\u002F20\n",[127,7797,7798,7800,7802,7804,7806,7808],{"class":129,"line":2171},[127,7799,2095],{"class":147},[127,7801,1718],{"class":290},[127,7803,938],{"class":147},[127,7805,1718],{"class":290},[127,7807,1784],{"class":147},[127,7809,7810],{"class":133},"\u002F\u002F10\n",[127,7812,7813],{"class":129,"line":2185},[127,7814,170],{"class":147},[19,7816,7817],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7819,7821],{"id":7820},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7823,7824],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7826,7827,7828,7830],{},"例如数组：int arr",[127,7829,1121],{},"={4,3,6,9,1,2,10,8,7,5}",[117,7832,7834],{"className":669,"code":7833,"language":671,"meta":122,"style":122},"#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",[124,7835,7836,7842,7852,7876,7880,7911,7915,7949,7953,7971,7975,7986,8001,8016,8020,8024,8028,8032,8036,8044,8048,8053,8107,8119,8131,8136,8144,8148,8153,8178,8182,8197,8206,8210],{"__ignoreMap":122},[127,7837,7838,7840],{"class":129,"line":130},[127,7839,2492],{"class":290},[127,7841,2495],{"class":781},[127,7843,7844,7846,7848,7850],{"class":129,"line":137},[127,7845,2500],{"class":290},[127,7847,2503],{"class":290},[127,7849,2506],{"class":143},[127,7851,164],{"class":147},[127,7853,7854,7856,7859,7861,7863,7865,7867,7869,7871,7874],{"class":129,"line":151},[127,7855,5906],{"class":290},[127,7857,7858],{"class":143}," bubbleSort",[127,7860,681],{"class":147},[127,7862,684],{"class":290},[127,7864,7060],{"class":290},[127,7866,19],{"class":5758},[127,7868,1053],{"class":147},[127,7870,684],{"class":290},[127,7872,7873],{"class":5758}," len",[127,7875,687],{"class":147},[127,7877,7878],{"class":129,"line":167},[127,7879,2090],{"class":147},[127,7881,7882,7884,7886,7888,7890,7892,7894,7896,7898,7901,7903,7905,7907,7909],{"class":129,"line":415},[127,7883,3743],{"class":290},[127,7885,681],{"class":147},[127,7887,684],{"class":290},[127,7889,3574],{"class":147},[127,7891,725],{"class":290},[127,7893,867],{"class":154},[127,7895,3581],{"class":147},[127,7897,1584],{"class":290},[127,7899,7900],{"class":147},"len",[127,7902,1207],{"class":290},[127,7904,893],{"class":154},[127,7906,3581],{"class":147},[127,7908,2834],{"class":290},[127,7910,687],{"class":147},[127,7912,7913],{"class":129,"line":421},[127,7914,2572],{"class":147},[127,7916,7917,7919,7921,7923,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947],{"class":129,"line":1766},[127,7918,3945],{"class":290},[127,7920,681],{"class":147},[127,7922,684],{"class":290},[127,7924,3952],{"class":147},[127,7926,725],{"class":290},[127,7928,867],{"class":154},[127,7930,3959],{"class":147},[127,7932,1584],{"class":290},[127,7934,7900],{"class":147},[127,7936,1207],{"class":290},[127,7938,1116],{"class":147},[127,7940,1207],{"class":290},[127,7942,893],{"class":154},[127,7944,3959],{"class":147},[127,7946,2834],{"class":290},[127,7948,687],{"class":147},[127,7950,7951],{"class":129,"line":1856},[127,7952,3052],{"class":147},[127,7954,7955,7957,7960,7962,7965,7967,7969],{"class":129,"line":1862},[127,7956,5184],{"class":290},[127,7958,7959],{"class":147},"(p[j]",[127,7961,1634],{"class":290},[127,7963,7964],{"class":147},"p[j",[127,7966,1156],{"class":290},[127,7968,893],{"class":154},[127,7970,5199],{"class":147},[127,7972,7973],{"class":129,"line":1874},[127,7974,5204],{"class":147},[127,7976,7977,7979,7981,7983],{"class":129,"line":2155},[127,7978,5209],{"class":290},[127,7980,4797],{"class":147},[127,7982,725],{"class":290},[127,7984,7985],{"class":147},"p[j];\n",[127,7987,7988,7991,7993,7995,7997,7999],{"class":129,"line":2160},[127,7989,7990],{"class":147},"                p[j]",[127,7992,725],{"class":290},[127,7994,7964],{"class":147},[127,7996,1156],{"class":290},[127,7998,893],{"class":154},[127,8000,5232],{"class":147},[127,8002,8003,8006,8008,8010,8012,8014],{"class":129,"line":2166},[127,8004,8005],{"class":147},"                p[j",[127,8007,1156],{"class":290},[127,8009,893],{"class":154},[127,8011,1614],{"class":147},[127,8013,725],{"class":290},[127,8015,4822],{"class":147},[127,8017,8018],{"class":129,"line":2171},[127,8019,5252],{"class":147},[127,8021,8022],{"class":129,"line":2185},[127,8023,3071],{"class":147},[127,8025,8026],{"class":129,"line":2190},[127,8027,2729],{"class":147},[127,8029,8030],{"class":129,"line":2196},[127,8031,170],{"class":147},[127,8033,8034],{"class":129,"line":2217},[127,8035,2942],{"emptyLinePlaceholder":606},[127,8037,8038,8040,8042],{"class":129,"line":2222},[127,8039,684],{"class":290},[127,8041,2515],{"class":143},[127,8043,2518],{"class":147},[127,8045,8046],{"class":129,"line":2236},[127,8047,2090],{"class":147},[127,8049,8050],{"class":129,"line":2241},[127,8051,8052],{"class":133},"    \u002F\u002F 1.创建数组\n",[127,8054,8055,8057,8059,8061,8063,8065,8067,8069,8071,8073,8075,8077,8079,8081,8083,8085,8087,8089,8091,8093,8095,8097,8099,8101,8103,8105],{"class":129,"line":2270},[127,8056,2527],{"class":290},[127,8058,4504],{"class":147},[127,8060,1121],{"class":154},[127,8062,1614],{"class":147},[127,8064,725],{"class":290},[127,8066,1570],{"class":147},[127,8068,968],{"class":154},[127,8070,1053],{"class":147},[127,8072,749],{"class":154},[127,8074,1053],{"class":147},[127,8076,1019],{"class":154},[127,8078,1053],{"class":147},[127,8080,1095],{"class":154},[127,8082,1053],{"class":147},[127,8084,893],{"class":154},[127,8086,1053],{"class":147},[127,8088,530],{"class":154},[127,8090,1053],{"class":147},[127,8092,1121],{"class":154},[127,8094,1053],{"class":147},[127,8096,1070],{"class":154},[127,8098,1053],{"class":147},[127,8100,1044],{"class":154},[127,8102,1053],{"class":147},[127,8104,994],{"class":154},[127,8106,4537],{"class":147},[127,8108,8109,8111,8113,8115,8117],{"class":129,"line":2275},[127,8110,2527],{"class":290},[127,8112,7873],{"class":147},[127,8114,725],{"class":290},[127,8116,1121],{"class":154},[127,8118,164],{"class":147},[127,8120,8121,8123,8125,8127,8129],{"class":129,"line":2292},[127,8122,2527],{"class":290},[127,8124,7060],{"class":290},[127,8126,19],{"class":147},[127,8128,725],{"class":290},[127,8130,7580],{"class":147},[127,8132,8133],{"class":129,"line":2297},[127,8134,8135],{"class":133},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[127,8137,8138,8141],{"class":129,"line":2302},[127,8139,8140],{"class":143},"    bubbleSort",[127,8142,8143],{"class":147},"(p,len);\n",[127,8145,8146],{"class":129,"line":2307},[127,8147,2942],{"emptyLinePlaceholder":606},[127,8149,8150],{"class":129,"line":2321},[127,8151,8152],{"class":133},"    \u002F\u002F 3.打印排序后的数组\n",[127,8154,8155,8157,8159,8161,8163,8165,8167,8169,8171,8174,8176],{"class":129,"line":2326},[127,8156,3743],{"class":290},[127,8158,2201],{"class":147},[127,8160,684],{"class":290},[127,8162,3574],{"class":147},[127,8164,725],{"class":290},[127,8166,867],{"class":154},[127,8168,3756],{"class":147},[127,8170,1584],{"class":290},[127,8172,8173],{"class":147},"len; i",[127,8175,2834],{"class":290},[127,8177,687],{"class":147},[127,8179,8180],{"class":129,"line":3119},[127,8181,2572],{"class":147},[127,8183,8184,8186,8188,8190,8192,8195],{"class":129,"line":3133},[127,8185,3993],{"class":147},[127,8187,6961],{"class":290},[127,8189,19],{"class":147},[127,8191,1718],{"class":290},[127,8193,8194],{"class":781},"\"\"",[127,8196,164],{"class":147},[127,8198,8199,8202,8204],{"class":129,"line":3141},[127,8200,8201],{"class":147},"        p",[127,8203,2834],{"class":290},[127,8205,164],{"class":147},[127,8207,8208],{"class":129,"line":3146},[127,8209,2729],{"class":147},[127,8211,8212],{"class":129,"line":3152},[127,8213,170],{"class":147},[575,8215,8216],{},"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":122,"searchDepth":137,"depth":137,"links":8218},[8219,8220,8221,8222,8223,8224,8225,8226],{"id":6825,"depth":137,"text":6826},{"id":6991,"depth":137,"text":6992},{"id":7147,"depth":137,"text":7148},{"id":7225,"depth":137,"text":7226},{"id":7304,"depth":137,"text":7305},{"id":7403,"depth":137,"text":7404},{"id":7642,"depth":137,"text":7643},{"id":7820,"depth":137,"text":7821},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6814,"description":6822},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8233,"title":8234,"body":8235,"description":8242,"extension":604,"meta":11216,"navigation":606,"path":11217,"seo":11218,"stem":11219,"__hash__":11220},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8236,"toc":11207},[8237,8240,8243,8247,8250,8253,8264,8602,8605,8609,8612,8619,8874,8878,8881,8884,9039,9043,9046,9049,9255,9259,9262,9565,9568,9576,9580,9583,9734,9736,9747,9804,9808,9813,10470,10478,10481,10575,10578,11198,11204],[10,8238,8234],{"id":8239},"_4结构体",[19,8241,8242],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8244,8246],{"id":8245},"_41结构体定义与使用","4.1结构体定义与使用",[19,8248,8249],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8251,8252],{},"通过结构体创建变量的方式：",[1681,8254,8255,8258,8261],{},[635,8256,8257],{},"struct 结构体名 变量名",[635,8259,8260],{},"struct 结构体名 变量名={成员1值，成员2值...}",[635,8262,8263],{},"定义结构体时顺便创建变量",[117,8265,8267],{"className":669,"code":8266,"language":671,"meta":122,"style":122},"#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",[124,8268,8269,8275,8285,8292,8297,8305,8309,8314,8318,8323,8328,8333,8340,8345,8352,8356,8363,8367,8371,8375,8379,8383,8387,8393,8397,8403,8411,8419,8423,8428,8433,8444,8449,8461,8472,8483,8488,8512,8517,8523,8550,8555,8561,8573,8585,8597],{"__ignoreMap":122},[127,8270,8271,8273],{"class":129,"line":130},[127,8272,2492],{"class":290},[127,8274,2495],{"class":781},[127,8276,8277,8279,8281,8283],{"class":129,"line":137},[127,8278,2500],{"class":290},[127,8280,2503],{"class":290},[127,8282,2506],{"class":143},[127,8284,164],{"class":147},[127,8286,8287,8289],{"class":129,"line":151},[127,8288,2492],{"class":290},[127,8290,8291],{"class":781},"\u003Cstring>\n",[127,8293,8294],{"class":129,"line":167},[127,8295,8296],{"class":133},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[127,8298,8299,8302],{"class":129,"line":415},[127,8300,8301],{"class":290},"struct",[127,8303,8304],{"class":143}," Student\n",[127,8306,8307],{"class":129,"line":421},[127,8308,2090],{"class":147},[127,8310,8311],{"class":129,"line":1766},[127,8312,8313],{"class":133},"    \u002F\u002F成员列表\n",[127,8315,8316],{"class":129,"line":1856},[127,8317,2942],{"emptyLinePlaceholder":606},[127,8319,8320],{"class":129,"line":1862},[127,8321,8322],{"class":133},"    \u002F\u002F姓名\n",[127,8324,8325],{"class":129,"line":1874},[127,8326,8327],{"class":147},"    string name;\n",[127,8329,8330],{"class":129,"line":2155},[127,8331,8332],{"class":133},"    \u002F\u002F年龄\n",[127,8334,8335,8337],{"class":129,"line":2160},[127,8336,2527],{"class":290},[127,8338,8339],{"class":147}," age;\n",[127,8341,8342],{"class":129,"line":2166},[127,8343,8344],{"class":133},"    \u002F\u002F分数\n",[127,8346,8347,8349],{"class":129,"line":2171},[127,8348,2527],{"class":290},[127,8350,8351],{"class":147}," score;\n",[127,8353,8354],{"class":129,"line":2185},[127,8355,4537],{"class":147},[127,8357,8358,8360],{"class":129,"line":2190},[127,8359,8301],{"class":290},[127,8361,8362],{"class":143}," School\n",[127,8364,8365],{"class":129,"line":2196},[127,8366,2090],{"class":147},[127,8368,8369],{"class":129,"line":2217},[127,8370,8313],{"class":133},[127,8372,8373],{"class":129,"line":2222},[127,8374,2942],{"emptyLinePlaceholder":606},[127,8376,8377],{"class":129,"line":2236},[127,8378,8322],{"class":133},[127,8380,8381],{"class":129,"line":2241},[127,8382,8327],{"class":147},[127,8384,8385],{"class":129,"line":2270},[127,8386,8332],{"class":133},[127,8388,8389,8391],{"class":129,"line":2275},[127,8390,2527],{"class":290},[127,8392,8339],{"class":147},[127,8394,8395],{"class":129,"line":2292},[127,8396,8344],{"class":133},[127,8398,8399,8401],{"class":129,"line":2297},[127,8400,2527],{"class":290},[127,8402,8351],{"class":147},[127,8404,8405,8408],{"class":129,"line":2302},[127,8406,8407],{"class":147},"} s3;",[127,8409,8410],{"class":133}," \u002F\u002F创建结构体时就创建了变量\n",[127,8412,8413,8415,8417],{"class":129,"line":2307},[127,8414,684],{"class":290},[127,8416,2515],{"class":143},[127,8418,2518],{"class":147},[127,8420,8421],{"class":129,"line":2321},[127,8422,2090],{"class":147},[127,8424,8425],{"class":129,"line":2326},[127,8426,8427],{"class":133},"    \u002F\u002F2.通过学生类型创建具体学生\n",[127,8429,8430],{"class":129,"line":3119},[127,8431,8432],{"class":133},"    \u002F\u002F2.1 struct Student s1;\n",[127,8434,8435,8438,8441],{"class":129,"line":3133},[127,8436,8437],{"class":290},"    struct",[127,8439,8440],{"class":143}," Student",[127,8442,8443],{"class":147}," s1;\n",[127,8445,8446],{"class":129,"line":3141},[127,8447,8448],{"class":133},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[127,8450,8451,8454,8456,8459],{"class":129,"line":3146},[127,8452,8453],{"class":147},"    s1.name",[127,8455,725],{"class":290},[127,8457,8458],{"class":781},"\"张三\"",[127,8460,164],{"class":147},[127,8462,8463,8466,8468,8470],{"class":129,"line":3152},[127,8464,8465],{"class":147},"    s1.age",[127,8467,725],{"class":290},[127,8469,1324],{"class":154},[127,8471,164],{"class":147},[127,8473,8474,8477,8479,8481],{"class":129,"line":3158},[127,8475,8476],{"class":147},"    s1.score",[127,8478,725],{"class":290},[127,8480,929],{"class":154},[127,8482,164],{"class":147},[127,8484,8485],{"class":129,"line":3163},[127,8486,8487],{"class":133},"    \u002F\u002F输出结果\n",[127,8489,8491,8493,8495,8498,8500,8503,8505,8508,8510],{"class":129,"line":8490},37,[127,8492,2095],{"class":147},[127,8494,1718],{"class":290},[127,8496,8497],{"class":147},"s1.name",[127,8499,1718],{"class":290},[127,8501,8502],{"class":147},"s1.age",[127,8504,1718],{"class":290},[127,8506,8507],{"class":147},"s1.score",[127,8509,1718],{"class":290},[127,8511,1740],{"class":147},[127,8513,8515],{"class":129,"line":8514},38,[127,8516,2942],{"emptyLinePlaceholder":606},[127,8518,8520],{"class":129,"line":8519},39,[127,8521,8522],{"class":133},"    \u002F\u002F2.2 struct Student s2={...}\n",[127,8524,8526,8528,8530,8533,8535,8537,8540,8542,8544,8546,8548],{"class":129,"line":8525},40,[127,8527,8437],{"class":290},[127,8529,8440],{"class":143},[127,8531,8532],{"class":147}," s2",[127,8534,725],{"class":290},[127,8536,1570],{"class":147},[127,8538,8539],{"class":781},"\"王五\"",[127,8541,1053],{"class":147},[127,8543,1324],{"class":154},[127,8545,1053],{"class":147},[127,8547,929],{"class":154},[127,8549,4537],{"class":147},[127,8551,8553],{"class":129,"line":8552},41,[127,8554,2942],{"emptyLinePlaceholder":606},[127,8556,8558],{"class":129,"line":8557},42,[127,8559,8560],{"class":133},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[127,8562,8564,8567,8569,8571],{"class":129,"line":8563},43,[127,8565,8566],{"class":147},"    s3.name",[127,8568,725],{"class":290},[127,8570,4220],{"class":781},[127,8572,164],{"class":147},[127,8574,8576,8579,8581,8583],{"class":129,"line":8575},44,[127,8577,8578],{"class":147},"    s3.age",[127,8580,725],{"class":290},[127,8582,1324],{"class":154},[127,8584,164],{"class":147},[127,8586,8588,8591,8593,8595],{"class":129,"line":8587},45,[127,8589,8590],{"class":147},"    s3.score",[127,8592,725],{"class":290},[127,8594,1374],{"class":154},[127,8596,164],{"class":147},[127,8598,8600],{"class":129,"line":8599},46,[127,8601,170],{"class":147},[19,8603,8604],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8606,8608],{"id":8607},"_42结构体数组","4.2结构体数组",[19,8610,8611],{},"将自定义的结构体放入到数组中方便维护",[19,8613,8614,8615,8618],{},"语法：struct 结构体名 数组名",[127,8616,8617],{},"元素个数","={ {}，{},...{} };",[117,8620,8622],{"className":669,"code":8621,"language":671,"meta":122,"style":122},"#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",[124,8623,8624,8630,8640,8646,8651,8657,8661,8665,8671,8677,8681,8685,8693,8697,8702,8717,8721,8737,8753,8757,8762,8778,8793,8808,8813,8839,8843,8866,8870],{"__ignoreMap":122},[127,8625,8626,8628],{"class":129,"line":130},[127,8627,2492],{"class":290},[127,8629,2495],{"class":781},[127,8631,8632,8634,8636,8638],{"class":129,"line":137},[127,8633,2500],{"class":290},[127,8635,2503],{"class":290},[127,8637,2506],{"class":143},[127,8639,164],{"class":147},[127,8641,8642,8644],{"class":129,"line":151},[127,8643,2492],{"class":290},[127,8645,8291],{"class":781},[127,8647,8648],{"class":129,"line":167},[127,8649,8650],{"class":133},"\u002F\u002F1.定义结构体\n",[127,8652,8653,8655],{"class":129,"line":415},[127,8654,8301],{"class":290},[127,8656,8304],{"class":143},[127,8658,8659],{"class":129,"line":421},[127,8660,2090],{"class":147},[127,8662,8663],{"class":129,"line":1766},[127,8664,8327],{"class":147},[127,8666,8667,8669],{"class":129,"line":1856},[127,8668,2527],{"class":290},[127,8670,8339],{"class":147},[127,8672,8673,8675],{"class":129,"line":1862},[127,8674,2527],{"class":290},[127,8676,8351],{"class":147},[127,8678,8679],{"class":129,"line":1874},[127,8680,2942],{"emptyLinePlaceholder":606},[127,8682,8683],{"class":129,"line":2155},[127,8684,4537],{"class":147},[127,8686,8687,8689,8691],{"class":129,"line":2160},[127,8688,684],{"class":290},[127,8690,2515],{"class":143},[127,8692,2518],{"class":147},[127,8694,8695],{"class":129,"line":2166},[127,8696,2090],{"class":147},[127,8698,8699],{"class":129,"line":2171},[127,8700,8701],{"class":133},"    \u002F\u002F2.创建结构体数组\n",[127,8703,8704,8706,8708,8711,8713,8715],{"class":129,"line":2185},[127,8705,8437],{"class":290},[127,8707,8440],{"class":143},[127,8709,8710],{"class":147}," stuArray[",[127,8712,530],{"class":154},[127,8714,1614],{"class":147},[127,8716,5450],{"class":290},[127,8718,8719],{"class":129,"line":2190},[127,8720,2572],{"class":147},[127,8722,8723,8725,8727,8729,8731,8733,8735],{"class":129,"line":2196},[127,8724,5459],{"class":147},[127,8726,8458],{"class":781},[127,8728,1053],{"class":147},[127,8730,1324],{"class":154},[127,8732,1053],{"class":147},[127,8734,986],{"class":154},[127,8736,5472],{"class":147},[127,8738,8739,8741,8743,8745,8747,8749,8751],{"class":129,"line":2217},[127,8740,5459],{"class":147},[127,8742,4220],{"class":781},[127,8744,1053],{"class":147},[127,8746,1250],{"class":154},[127,8748,1053],{"class":147},[127,8750,1250],{"class":154},[127,8752,170],{"class":147},[127,8754,8755],{"class":129,"line":2222},[127,8756,2729],{"class":147},[127,8758,8759],{"class":129,"line":2236},[127,8760,8761],{"class":133},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[127,8763,8764,8767,8769,8772,8774,8776],{"class":129,"line":2241},[127,8765,8766],{"class":147},"    stuArray[",[127,8768,893],{"class":154},[127,8770,8771],{"class":147},"].name",[127,8773,725],{"class":290},[127,8775,4243],{"class":781},[127,8777,164],{"class":147},[127,8779,8780,8782,8784,8787,8789,8791],{"class":129,"line":2270},[127,8781,8766],{"class":147},[127,8783,893],{"class":154},[127,8785,8786],{"class":147},"].age",[127,8788,725],{"class":290},[127,8790,530],{"class":154},[127,8792,164],{"class":147},[127,8794,8795,8797,8799,8802,8804,8806],{"class":129,"line":2275},[127,8796,8766],{"class":147},[127,8798,893],{"class":154},[127,8800,8801],{"class":147},"].score",[127,8803,725],{"class":290},[127,8805,530],{"class":154},[127,8807,164],{"class":147},[127,8809,8810],{"class":129,"line":2292},[127,8811,8812],{"class":133},"    \u002F\u002F4.遍历结构体数组\n",[127,8814,8815,8817,8819,8821,8823,8825,8827,8829,8831,8833,8835,8837],{"class":129,"line":2297},[127,8816,3743],{"class":290},[127,8818,2201],{"class":147},[127,8820,684],{"class":290},[127,8822,3574],{"class":147},[127,8824,725],{"class":290},[127,8826,867],{"class":154},[127,8828,3581],{"class":147},[127,8830,1584],{"class":290},[127,8832,530],{"class":154},[127,8834,3581],{"class":147},[127,8836,2834],{"class":290},[127,8838,687],{"class":147},[127,8840,8841],{"class":129,"line":2302},[127,8842,2572],{"class":147},[127,8844,8845,8847,8849,8852,8854,8857,8859,8862,8864],{"class":129,"line":2307},[127,8846,3993],{"class":147},[127,8848,1718],{"class":290},[127,8850,8851],{"class":147},"stuArray[i].name",[127,8853,1718],{"class":290},[127,8855,8856],{"class":147},"stuArray[i].age",[127,8858,1718],{"class":290},[127,8860,8861],{"class":147},"stuArray[i].score",[127,8863,1718],{"class":290},[127,8865,1740],{"class":147},[127,8867,8868],{"class":129,"line":2321},[127,8869,2729],{"class":147},[127,8871,8872],{"class":129,"line":2326},[127,8873,170],{"class":147},[14,8875,8877],{"id":8876},"_43结构体指针","4.3结构体指针",[19,8879,8880],{},"作用：通过指针访问结构体中的成员",[19,8882,8883],{},"利用操作符->可以通过结构体指针访问结构体属性",[117,8885,8887],{"className":669,"code":8886,"language":671,"meta":122,"style":122},"#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",[124,8888,8889,8895,8905,8911,8915,8921,8925,8929,8935,8941,8945,8953,8957,8962,8987,8992,9007,9012,9035],{"__ignoreMap":122},[127,8890,8891,8893],{"class":129,"line":130},[127,8892,2492],{"class":290},[127,8894,2495],{"class":781},[127,8896,8897,8899,8901,8903],{"class":129,"line":137},[127,8898,2500],{"class":290},[127,8900,2503],{"class":290},[127,8902,2506],{"class":143},[127,8904,164],{"class":147},[127,8906,8907,8909],{"class":129,"line":151},[127,8908,2492],{"class":290},[127,8910,8291],{"class":781},[127,8912,8913],{"class":129,"line":167},[127,8914,8650],{"class":133},[127,8916,8917,8919],{"class":129,"line":415},[127,8918,8301],{"class":290},[127,8920,8304],{"class":143},[127,8922,8923],{"class":129,"line":421},[127,8924,2090],{"class":147},[127,8926,8927],{"class":129,"line":1766},[127,8928,8327],{"class":147},[127,8930,8931,8933],{"class":129,"line":1856},[127,8932,2527],{"class":290},[127,8934,8339],{"class":147},[127,8936,8937,8939],{"class":129,"line":1862},[127,8938,2527],{"class":290},[127,8940,8351],{"class":147},[127,8942,8943],{"class":129,"line":1874},[127,8944,4537],{"class":147},[127,8946,8947,8949,8951],{"class":129,"line":2155},[127,8948,684],{"class":290},[127,8950,2515],{"class":143},[127,8952,2518],{"class":147},[127,8954,8955],{"class":129,"line":2160},[127,8956,2090],{"class":147},[127,8958,8959],{"class":129,"line":2166},[127,8960,8961],{"class":133},"    \u002F\u002F创建学生结构体变量\n",[127,8963,8964,8966,8968,8971,8973,8975,8977,8979,8981,8983,8985],{"class":129,"line":2171},[127,8965,8437],{"class":290},[127,8967,8440],{"class":143},[127,8969,8970],{"class":147}," s",[127,8972,725],{"class":290},[127,8974,1570],{"class":147},[127,8976,8458],{"class":781},[127,8978,1053],{"class":147},[127,8980,1324],{"class":154},[127,8982,1053],{"class":147},[127,8984,2265],{"class":154},[127,8986,4537],{"class":147},[127,8988,8989],{"class":129,"line":2185},[127,8990,8991],{"class":133},"    \u002F\u002F通过指针指向结构体变量\n",[127,8993,8994,8996,8998,9000,9002,9004],{"class":129,"line":2190},[127,8995,8437],{"class":290},[127,8997,8440],{"class":143},[127,8999,7060],{"class":290},[127,9001,19],{"class":147},[127,9003,6881],{"class":290},[127,9005,9006],{"class":147},"s\n",[127,9008,9009],{"class":129,"line":2196},[127,9010,9011],{"class":133},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[127,9013,9014,9016,9018,9021,9023,9026,9028,9031,9033],{"class":129,"line":2217},[127,9015,2095],{"class":147},[127,9017,1718],{"class":290},[127,9019,9020],{"class":147},"p->name",[127,9022,1718],{"class":290},[127,9024,9025],{"class":147},"p->age",[127,9027,1718],{"class":290},[127,9029,9030],{"class":147},"p->score",[127,9032,1718],{"class":290},[127,9034,1740],{"class":147},[127,9036,9037],{"class":129,"line":2222},[127,9038,170],{"class":147},[14,9040,9042],{"id":9041},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9044,9045],{},"作用：结构体中的成员可以是另一个结构体",[19,9047,9048],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[117,9050,9052],{"className":669,"code":9051,"language":671,"meta":122,"style":122},"#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",[124,9053,9054,9060,9070,9076,9081,9089,9093,9097,9103,9109,9113,9118,9125,9129,9136,9140,9146,9151,9155,9163,9167,9172,9177,9182,9193,9205,9216,9229,9240,9251],{"__ignoreMap":122},[127,9055,9056,9058],{"class":129,"line":130},[127,9057,2492],{"class":290},[127,9059,2495],{"class":781},[127,9061,9062,9064,9066,9068],{"class":129,"line":137},[127,9063,2500],{"class":290},[127,9065,2503],{"class":290},[127,9067,2506],{"class":143},[127,9069,164],{"class":147},[127,9071,9072,9074],{"class":129,"line":151},[127,9073,2492],{"class":290},[127,9075,8291],{"class":781},[127,9077,9078],{"class":129,"line":167},[127,9079,9080],{"class":133},"\u002F\u002F定义学生结构体\n",[127,9082,9083,9085,9087],{"class":129,"line":415},[127,9084,8301],{"class":290},[127,9086,8440],{"class":143},[127,9088,3216],{"class":147},[127,9090,9091],{"class":129,"line":421},[127,9092,2090],{"class":147},[127,9094,9095],{"class":129,"line":1766},[127,9096,8327],{"class":147},[127,9098,9099,9101],{"class":129,"line":1856},[127,9100,2527],{"class":290},[127,9102,8339],{"class":147},[127,9104,9105,9107],{"class":129,"line":1862},[127,9106,2527],{"class":290},[127,9108,8351],{"class":147},[127,9110,9111],{"class":129,"line":1874},[127,9112,170],{"class":147},[127,9114,9115],{"class":129,"line":2155},[127,9116,9117],{"class":133},"\u002F\u002F定义老师结构体\n",[127,9119,9120,9122],{"class":129,"line":2160},[127,9121,8301],{"class":290},[127,9123,9124],{"class":143}," Teacher\n",[127,9126,9127],{"class":129,"line":2166},[127,9128,2090],{"class":147},[127,9130,9131,9133],{"class":129,"line":2171},[127,9132,2527],{"class":290},[127,9134,9135],{"class":147}," id;\n",[127,9137,9138],{"class":129,"line":2185},[127,9139,8327],{"class":147},[127,9141,9142,9144],{"class":129,"line":2190},[127,9143,2527],{"class":290},[127,9145,8339],{"class":147},[127,9147,9148],{"class":129,"line":2196},[127,9149,9150],{"class":147},"    Student stu;\n",[127,9152,9153],{"class":129,"line":2217},[127,9154,170],{"class":147},[127,9156,9157,9159,9161],{"class":129,"line":2222},[127,9158,684],{"class":290},[127,9160,2515],{"class":143},[127,9162,6520],{"class":147},[127,9164,9165],{"class":129,"line":2236},[127,9166,2090],{"class":147},[127,9168,9169],{"class":129,"line":2241},[127,9170,9171],{"class":133},"    \u002F\u002F结构体嵌套结构体\n",[127,9173,9174],{"class":129,"line":2270},[127,9175,9176],{"class":133},"    \u002F\u002F创建老师\n",[127,9178,9179],{"class":129,"line":2275},[127,9180,9181],{"class":147},"    Teacher t;\n",[127,9183,9184,9187,9189,9191],{"class":129,"line":2292},[127,9185,9186],{"class":147},"    t.id",[127,9188,725],{"class":290},[127,9190,986],{"class":154},[127,9192,164],{"class":147},[127,9194,9195,9198,9200,9203],{"class":129,"line":2297},[127,9196,9197],{"class":147},"    t.name",[127,9199,725],{"class":290},[127,9201,9202],{"class":781},"\"老王\"",[127,9204,164],{"class":147},[127,9206,9207,9210,9212,9214],{"class":129,"line":2302},[127,9208,9209],{"class":147},"    t.age",[127,9211,725],{"class":290},[127,9213,1324],{"class":154},[127,9215,164],{"class":147},[127,9217,9218,9221,9223,9226],{"class":129,"line":2307},[127,9219,9220],{"class":147},"    t.stu.name",[127,9222,725],{"class":290},[127,9224,9225],{"class":781},"\"小王\"",[127,9227,9228],{"class":147},"；\n",[127,9230,9231,9234,9236,9238],{"class":129,"line":2321},[127,9232,9233],{"class":147},"    t.stu.age",[127,9235,725],{"class":290},[127,9237,1374],{"class":154},[127,9239,164],{"class":147},[127,9241,9242,9245,9247,9249],{"class":129,"line":2326},[127,9243,9244],{"class":147},"    t.stu.score",[127,9246,725],{"class":290},[127,9248,1019],{"class":154},[127,9250,164],{"class":147},[127,9252,9253],{"class":129,"line":3119},[127,9254,170],{"class":147},[14,9256,9258],{"id":9257},"_45结构体做函数参数","4.5结构体做函数参数",[19,9260,9261],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[117,9263,9265],{"className":669,"code":9264,"language":671,"meta":122,"style":122},"#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",[124,9266,9267,9273,9283,9289,9295,9299,9303,9309,9315,9319,9324,9329,9346,9350,9383,9387,9392,9411,9415,9446,9450,9458,9462,9471,9483,9495,9507,9520,9528,9541,9553,9561],{"__ignoreMap":122},[127,9268,9269,9271],{"class":129,"line":130},[127,9270,2492],{"class":290},[127,9272,2495],{"class":781},[127,9274,9275,9277,9279,9281],{"class":129,"line":137},[127,9276,2500],{"class":290},[127,9278,2503],{"class":290},[127,9280,2506],{"class":143},[127,9282,164],{"class":147},[127,9284,9285,9287],{"class":129,"line":151},[127,9286,2492],{"class":290},[127,9288,8291],{"class":781},[127,9290,9291,9293],{"class":129,"line":167},[127,9292,8301],{"class":290},[127,9294,8304],{"class":143},[127,9296,9297],{"class":129,"line":415},[127,9298,2090],{"class":147},[127,9300,9301],{"class":129,"line":421},[127,9302,8327],{"class":147},[127,9304,9305,9307],{"class":129,"line":1766},[127,9306,2527],{"class":290},[127,9308,8339],{"class":147},[127,9310,9311,9313],{"class":129,"line":1856},[127,9312,2527],{"class":290},[127,9314,8351],{"class":147},[127,9316,9317],{"class":129,"line":1862},[127,9318,4537],{"class":147},[127,9320,9321],{"class":129,"line":1874},[127,9322,9323],{"class":133},"\u002F\u002F打印学生信息的函数\n",[127,9325,9326],{"class":129,"line":2155},[127,9327,9328],{"class":133},"\u002F\u002F值传递\n",[127,9330,9331,9333,9336,9338,9340,9342,9344],{"class":129,"line":2160},[127,9332,5906],{"class":290},[127,9334,9335],{"class":143}," printStudent1",[127,9337,681],{"class":147},[127,9339,8301],{"class":290},[127,9341,8440],{"class":143},[127,9343,8970],{"class":5758},[127,9345,687],{"class":147},[127,9347,9348],{"class":129,"line":2166},[127,9349,2090],{"class":147},[127,9351,9352,9354,9356,9359,9361,9364,9366,9369,9371,9373,9375,9378,9380],{"class":129,"line":2171},[127,9353,7071],{"class":147},[127,9355,1718],{"class":290},[127,9357,9358],{"class":147}," s.name ",[127,9360,1718],{"class":290},[127,9362,9363],{"class":781}," \" \"",[127,9365,1989],{"class":290},[127,9367,9368],{"class":147}," s.age ",[127,9370,1718],{"class":290},[127,9372,9363],{"class":781},[127,9374,1989],{"class":290},[127,9376,9377],{"class":147}," s.score ",[127,9379,1718],{"class":290},[127,9381,9382],{"class":147}," endl;\n",[127,9384,9385],{"class":129,"line":2185},[127,9386,170],{"class":147},[127,9388,9389],{"class":129,"line":2190},[127,9390,9391],{"class":133},"\u002F\u002F地址传递\n",[127,9393,9394,9396,9399,9401,9403,9405,9407,9409],{"class":129,"line":2196},[127,9395,5906],{"class":290},[127,9397,9398],{"class":143}," printStudent2",[127,9400,681],{"class":147},[127,9402,8301],{"class":290},[127,9404,8440],{"class":143},[127,9406,7060],{"class":290},[127,9408,1369],{"class":5758},[127,9410,687],{"class":147},[127,9412,9413],{"class":129,"line":2217},[127,9414,2090],{"class":147},[127,9416,9417,9419,9421,9424,9426,9428,9430,9433,9435,9437,9439,9442,9444],{"class":129,"line":2222},[127,9418,7071],{"class":147},[127,9420,1718],{"class":290},[127,9422,9423],{"class":147}," s->name ",[127,9425,1718],{"class":290},[127,9427,9363],{"class":781},[127,9429,1989],{"class":290},[127,9431,9432],{"class":147}," s->age ",[127,9434,1718],{"class":290},[127,9436,9363],{"class":781},[127,9438,1989],{"class":290},[127,9440,9441],{"class":147}," s->score ",[127,9443,1718],{"class":290},[127,9445,9382],{"class":147},[127,9447,9448],{"class":129,"line":2236},[127,9449,170],{"class":147},[127,9451,9452,9454,9456],{"class":129,"line":2241},[127,9453,684],{"class":290},[127,9455,2515],{"class":143},[127,9457,2518],{"class":147},[127,9459,9460],{"class":129,"line":2270},[127,9461,2090],{"class":147},[127,9463,9464,9466,9468],{"class":129,"line":2275},[127,9465,8437],{"class":290},[127,9467,8440],{"class":143},[127,9469,9470],{"class":147}," s;\n",[127,9472,9473,9476,9478,9481],{"class":129,"line":2292},[127,9474,9475],{"class":147},"    s.name ",[127,9477,725],{"class":290},[127,9479,9480],{"class":781}," \"张三\"",[127,9482,164],{"class":147},[127,9484,9485,9488,9490,9493],{"class":129,"line":2297},[127,9486,9487],{"class":147},"    s.age ",[127,9489,725],{"class":290},[127,9491,9492],{"class":154}," 20",[127,9494,164],{"class":147},[127,9496,9497,9500,9502,9505],{"class":129,"line":2302},[127,9498,9499],{"class":147},"    s.score ",[127,9501,725],{"class":290},[127,9503,9504],{"class":154}," 85",[127,9506,164],{"class":147},[127,9508,9509,9511,9513,9516,9518],{"class":129,"line":2307},[127,9510,2095],{"class":147},[127,9512,1718],{"class":290},[127,9514,9515],{"class":781},"\"值传递:\"",[127,9517,1718],{"class":290},[127,9519,1740],{"class":147},[127,9521,9522,9525],{"class":129,"line":2321},[127,9523,9524],{"class":143},"    printStudent1",[127,9526,9527],{"class":147},"(s);\n",[127,9529,9530,9532,9534,9537,9539],{"class":129,"line":2326},[127,9531,2095],{"class":147},[127,9533,1718],{"class":290},[127,9535,9536],{"class":781},"\"地址传递:\"",[127,9538,1718],{"class":290},[127,9540,1740],{"class":147},[127,9542,9543,9546,9548,9550],{"class":129,"line":3119},[127,9544,9545],{"class":143},"    printStudent2",[127,9547,681],{"class":147},[127,9549,1028],{"class":290},[127,9551,9552],{"class":147},"s); \n",[127,9554,9555,9557,9559],{"class":129,"line":3133},[127,9556,4632],{"class":290},[127,9558,4635],{"class":154},[127,9560,164],{"class":147},[127,9562,9563],{"class":129,"line":3141},[127,9564,170],{"class":147},[19,9566,9567],{},"注意：",[1681,9569,9570,9573],{},[635,9571,9572],{},"1.先定义结构体，不要在函数中写结构体的定义",[635,9574,9575],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9577,9579],{"id":9578},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9581,9582],{},"用const防止误操作",[117,9584,9586],{"className":669,"code":9585,"language":671,"meta":122,"style":122},"#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",[124,9587,9588,9594,9604,9610,9615,9619,9623,9629,9635,9639,9655,9659,9682,9686,9694,9698,9719,9726,9730],{"__ignoreMap":122},[127,9589,9590,9592],{"class":129,"line":130},[127,9591,2492],{"class":290},[127,9593,2495],{"class":781},[127,9595,9596,9598,9600,9602],{"class":129,"line":137},[127,9597,2500],{"class":290},[127,9599,2503],{"class":290},[127,9601,2506],{"class":143},[127,9603,164],{"class":147},[127,9605,9606,9608],{"class":129,"line":151},[127,9607,2492],{"class":290},[127,9609,8291],{"class":781},[127,9611,9612],{"class":129,"line":167},[127,9613,9614],{"class":147},"sctuct Student\n",[127,9616,9617],{"class":129,"line":415},[127,9618,2090],{"class":147},[127,9620,9621],{"class":129,"line":421},[127,9622,8327],{"class":147},[127,9624,9625,9627],{"class":129,"line":1766},[127,9626,2527],{"class":290},[127,9628,8339],{"class":147},[127,9630,9631,9633],{"class":129,"line":1856},[127,9632,2527],{"class":290},[127,9634,8351],{"class":147},[127,9636,9637],{"class":129,"line":1862},[127,9638,4537],{"class":147},[127,9640,9641,9643,9646,9648,9651,9653],{"class":129,"line":1874},[127,9642,5906],{"class":290},[127,9644,9645],{"class":143}," printStudents",[127,9647,681],{"class":147},[127,9649,9650],{"class":143},"student",[127,9652,8970],{"class":5758},[127,9654,687],{"class":147},[127,9656,9657],{"class":129,"line":2155},[127,9658,2090],{"class":147},[127,9660,9661,9663,9665,9668,9670,9673,9675,9678,9680],{"class":129,"line":2160},[127,9662,2095],{"class":147},[127,9664,1718],{"class":290},[127,9666,9667],{"class":147},"s.name",[127,9669,1718],{"class":290},[127,9671,9672],{"class":147},"s.age",[127,9674,1718],{"class":290},[127,9676,9677],{"class":147},"s.score",[127,9679,1718],{"class":290},[127,9681,1740],{"class":147},[127,9683,9684],{"class":129,"line":2166},[127,9685,170],{"class":147},[127,9687,9688,9690,9692],{"class":129,"line":2171},[127,9689,684],{"class":290},[127,9691,2515],{"class":143},[127,9693,6520],{"class":147},[127,9695,9696],{"class":129,"line":2185},[127,9697,2090],{"class":147},[127,9699,9700,9703,9705,9707,9709,9711,9713,9715,9717],{"class":129,"line":2190},[127,9701,9702],{"class":147},"    Student s",[127,9704,725],{"class":290},[127,9706,1570],{"class":147},[127,9708,8458],{"class":781},[127,9710,1053],{"class":147},[127,9712,1324],{"class":154},[127,9714,1053],{"class":147},[127,9716,1324],{"class":154},[127,9718,4537],{"class":147},[127,9720,9721,9724],{"class":129,"line":2196},[127,9722,9723],{"class":143},"    printStudent",[127,9725,9527],{"class":147},[127,9727,9728],{"class":129,"line":2217},[127,9729,2942],{"emptyLinePlaceholder":606},[127,9731,9732],{"class":129,"line":2222},[127,9733,170],{"class":147},[19,9735,9567],{},[1681,9737,9738,9741,9744],{},[635,9739,9740],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[635,9742,9743],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[635,9745,9746],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[117,9748,9750],{"className":669,"code":9749,"language":671,"meta":122,"style":122},"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",[124,9751,9752,9771,9775,9780,9800],{"__ignoreMap":122},[127,9753,9754,9756,9758,9760,9762,9765,9767,9769],{"class":129,"line":130},[127,9755,5906],{"class":290},[127,9757,9645],{"class":143},[127,9759,681],{"class":147},[127,9761,7334],{"class":290},[127,9763,9764],{"class":143}," student",[127,9766,7060],{"class":290},[127,9768,1369],{"class":5758},[127,9770,687],{"class":147},[127,9772,9773],{"class":129,"line":137},[127,9774,2090],{"class":147},[127,9776,9777],{"class":129,"line":151},[127,9778,9779],{"class":133},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[127,9781,9782,9784,9786,9788,9790,9792,9794,9796,9798],{"class":129,"line":167},[127,9783,2095],{"class":147},[127,9785,1718],{"class":290},[127,9787,9667],{"class":147},[127,9789,1718],{"class":290},[127,9791,9672],{"class":147},[127,9793,1718],{"class":290},[127,9795,9677],{"class":147},[127,9797,1718],{"class":290},[127,9799,1740],{"class":147},[127,9801,9802],{"class":129,"line":415},[127,9803,170],{"class":147},[14,9805,9807],{"id":9806},"_47案例","4.7案例",[632,9809,9810],{},[635,9811,9812],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[117,9814,9816],{"className":669,"code":9815,"language":671,"meta":122,"style":122},"#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",[124,9817,9818,9824,9834,9840,9847,9851,9857,9861,9866,9872,9878,9882,9886,9892,9896,9901,9906,9919,9923,9928,9954,9958,9970,9997,10001,10013,10023,10027,10032,10061,10065,10077,10086,10113,10124,10134,10138,10142,10146,10151,10175,10179,10203,10207,10226,10252,10256,10281,10304,10328,10333,10338,10343,10352,10357,10363,10384,10390,10404,10410,10437,10446,10452,10460,10465],{"__ignoreMap":122},[127,9819,9820,9822],{"class":129,"line":130},[127,9821,2492],{"class":290},[127,9823,2495],{"class":781},[127,9825,9826,9828,9830,9832],{"class":129,"line":137},[127,9827,2500],{"class":290},[127,9829,2503],{"class":290},[127,9831,2506],{"class":143},[127,9833,164],{"class":147},[127,9835,9836,9838],{"class":129,"line":151},[127,9837,2492],{"class":290},[127,9839,8291],{"class":781},[127,9841,9842,9844],{"class":129,"line":167},[127,9843,2492],{"class":290},[127,9845,9846],{"class":781},"\u003Cctime>\n",[127,9848,9849],{"class":129,"line":415},[127,9850,9080],{"class":133},[127,9852,9853,9855],{"class":129,"line":421},[127,9854,8301],{"class":290},[127,9856,8304],{"class":143},[127,9858,9859],{"class":129,"line":1766},[127,9860,2090],{"class":147},[127,9862,9863],{"class":129,"line":1856},[127,9864,9865],{"class":147},"    string sName;\n",[127,9867,9868,9870],{"class":129,"line":1862},[127,9869,2527],{"class":290},[127,9871,8339],{"class":147},[127,9873,9874,9876],{"class":129,"line":1874},[127,9875,2527],{"class":290},[127,9877,8351],{"class":147},[127,9879,9880],{"class":129,"line":2155},[127,9881,4537],{"class":147},[127,9883,9884],{"class":129,"line":2160},[127,9885,9117],{"class":133},[127,9887,9888,9890],{"class":129,"line":2166},[127,9889,8301],{"class":290},[127,9891,9124],{"class":143},[127,9893,9894],{"class":129,"line":2171},[127,9895,2090],{"class":147},[127,9897,9898],{"class":129,"line":2185},[127,9899,9900],{"class":147},"    string tName;\n",[127,9902,9903],{"class":129,"line":2190},[127,9904,9905],{"class":133},"    \u002F\u002F学生数组\n",[127,9907,9908,9910,9912,9915,9917],{"class":129,"line":2196},[127,9909,8437],{"class":290},[127,9911,8440],{"class":143},[127,9913,9914],{"class":147}," sArray[",[127,9916,994],{"class":154},[127,9918,5232],{"class":147},[127,9920,9921],{"class":129,"line":2217},[127,9922,4537],{"class":147},[127,9924,9925],{"class":129,"line":2222},[127,9926,9927],{"class":133},"\u002F\u002F给老师和学生赋值的函数\n",[127,9929,9930,9932,9935,9937,9939,9942,9945,9948,9950,9952],{"class":129,"line":2236},[127,9931,5906],{"class":290},[127,9933,9934],{"class":143}," allocateSpace",[127,9936,681],{"class":147},[127,9938,8301],{"class":290},[127,9940,9941],{"class":143}," Teacher",[127,9943,9944],{"class":5758}," tArray",[127,9946,9947],{"class":147},"[],",[127,9949,684],{"class":290},[127,9951,7873],{"class":5758},[127,9953,687],{"class":147},[127,9955,9956],{"class":129,"line":2241},[127,9957,2090],{"class":147},[127,9959,9960,9963,9965,9968],{"class":129,"line":2270},[127,9961,9962],{"class":147},"    string nameSeed",[127,9964,725],{"class":290},[127,9966,9967],{"class":781},"\"ABCDE\"",[127,9969,164],{"class":147},[127,9971,9972,9974,9976,9978,9981,9983,9985,9988,9990,9993,9995],{"class":129,"line":2275},[127,9973,3743],{"class":290},[127,9975,2201],{"class":147},[127,9977,684],{"class":290},[127,9979,9980],{"class":147}," i ",[127,9982,725],{"class":290},[127,9984,4635],{"class":154},[127,9986,9987],{"class":147},"; i ",[127,9989,1584],{"class":290},[127,9991,9992],{"class":147}," len; i",[127,9994,2834],{"class":290},[127,9996,687],{"class":147},[127,9998,9999],{"class":129,"line":2292},[127,10000,2572],{"class":147},[127,10002,10003,10006,10008,10011],{"class":129,"line":2297},[127,10004,10005],{"class":147},"        tArray[i].tName ",[127,10007,725],{"class":290},[127,10009,10010],{"class":781}," \"Teacher_\"",[127,10012,164],{"class":147},[127,10014,10015,10017,10020],{"class":129,"line":2302},[127,10016,10005],{"class":147},[127,10018,10019],{"class":290},"+=",[127,10021,10022],{"class":147},"nameSeed[i];\n",[127,10024,10025],{"class":129,"line":2307},[127,10026,2942],{"emptyLinePlaceholder":606},[127,10028,10029],{"class":129,"line":2321},[127,10030,10031],{"class":133},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[127,10033,10034,10036,10038,10040,10043,10045,10047,10050,10052,10054,10057,10059],{"class":129,"line":2326},[127,10035,3945],{"class":290},[127,10037,2201],{"class":147},[127,10039,684],{"class":290},[127,10041,10042],{"class":147}," j ",[127,10044,725],{"class":290},[127,10046,4635],{"class":154},[127,10048,10049],{"class":147},"; j ",[127,10051,1584],{"class":290},[127,10053,2690],{"class":154},[127,10055,10056],{"class":147},"; j",[127,10058,2834],{"class":290},[127,10060,687],{"class":147},[127,10062,10063],{"class":129,"line":3119},[127,10064,3052],{"class":147},[127,10066,10067,10070,10072,10075],{"class":129,"line":3133},[127,10068,10069],{"class":147},"            tArray[i].sArray[j].sName ",[127,10071,725],{"class":290},[127,10073,10074],{"class":781}," \"Student_\"",[127,10076,164],{"class":147},[127,10078,10079,10081,10083],{"class":129,"line":3141},[127,10080,10069],{"class":147},[127,10082,10019],{"class":290},[127,10084,10085],{"class":147}," nameSeed[j];\n",[127,10087,10088,10091,10094,10096,10098,10100,10102,10104,10106,10108,10110],{"class":129,"line":3146},[127,10089,10090],{"class":290},"            int",[127,10092,10093],{"class":147}," random",[127,10095,725],{"class":290},[127,10097,2966],{"class":143},[127,10099,2969],{"class":147},[127,10101,1003],{"class":290},[127,10103,1581],{"class":154},[127,10105,1156],{"class":290},[127,10107,1076],{"class":154},[127,10109,734],{"class":147},[127,10111,10112],{"class":133},"\u002F\u002F40~99\n",[127,10114,10115,10118,10120,10122],{"class":129,"line":3152},[127,10116,10117],{"class":147},"            tArray[i].sArray[j].age ",[127,10119,725],{"class":290},[127,10121,9492],{"class":154},[127,10123,164],{"class":147},[127,10125,10126,10129,10131],{"class":129,"line":3158},[127,10127,10128],{"class":147},"            tArray[i].sArray[j].score ",[127,10130,725],{"class":290},[127,10132,10133],{"class":147}," random;\n",[127,10135,10136],{"class":129,"line":3163},[127,10137,3071],{"class":147},[127,10139,10140],{"class":129,"line":8490},[127,10141,2729],{"class":147},[127,10143,10144],{"class":129,"line":8514},[127,10145,170],{"class":147},[127,10147,10148],{"class":129,"line":8519},[127,10149,10150],{"class":133},"\u002F\u002F打印所有信息的函数\n",[127,10152,10153,10155,10158,10160,10162,10164,10166,10169,10171,10173],{"class":129,"line":8525},[127,10154,5906],{"class":290},[127,10156,10157],{"class":143}," printInfo",[127,10159,681],{"class":147},[127,10161,8301],{"class":290},[127,10163,9941],{"class":143},[127,10165,9944],{"class":5758},[127,10167,10168],{"class":147},"[], ",[127,10170,684],{"class":290},[127,10172,7873],{"class":5758},[127,10174,687],{"class":147},[127,10176,10177],{"class":129,"line":8552},[127,10178,2090],{"class":147},[127,10180,10181,10183,10185,10187,10189,10191,10193,10195,10197,10199,10201],{"class":129,"line":8557},[127,10182,3743],{"class":290},[127,10184,2201],{"class":147},[127,10186,684],{"class":290},[127,10188,9980],{"class":147},[127,10190,725],{"class":290},[127,10192,4635],{"class":154},[127,10194,9987],{"class":147},[127,10196,1584],{"class":290},[127,10198,9992],{"class":147},[127,10200,2834],{"class":290},[127,10202,687],{"class":147},[127,10204,10205],{"class":129,"line":8563},[127,10206,2572],{"class":147},[127,10208,10209,10212,10214,10217,10219,10222,10224],{"class":129,"line":8575},[127,10210,10211],{"class":147},"        cout ",[127,10213,1718],{"class":290},[127,10215,10216],{"class":781}," \"Teacher: \"",[127,10218,1989],{"class":290},[127,10220,10221],{"class":147}," tArray[i].tName ",[127,10223,1718],{"class":290},[127,10225,9382],{"class":147},[127,10227,10228,10230,10232,10234,10236,10238,10240,10242,10244,10246,10248,10250],{"class":129,"line":8587},[127,10229,3945],{"class":290},[127,10231,2201],{"class":147},[127,10233,684],{"class":290},[127,10235,10042],{"class":147},[127,10237,725],{"class":290},[127,10239,4635],{"class":154},[127,10241,10049],{"class":147},[127,10243,1584],{"class":290},[127,10245,2690],{"class":154},[127,10247,10056],{"class":147},[127,10249,2834],{"class":290},[127,10251,687],{"class":147},[127,10253,10254],{"class":129,"line":8599},[127,10255,3052],{"class":147},[127,10257,10259,10262,10264,10267,10269,10272,10274,10277,10279],{"class":129,"line":10258},47,[127,10260,10261],{"class":147},"            cout ",[127,10263,1718],{"class":290},[127,10265,10266],{"class":781}," \"",[127,10268,1776],{"class":154},[127,10270,10271],{"class":781},"Student: \"",[127,10273,1989],{"class":290},[127,10275,10276],{"class":147}," tArray[i].sArray[j].sName",[127,10278,1718],{"class":290},[127,10280,1740],{"class":147},[127,10282,10284,10286,10288,10290,10292,10295,10297,10300,10302],{"class":129,"line":10283},48,[127,10285,10261],{"class":147},[127,10287,1718],{"class":290},[127,10289,10266],{"class":781},[127,10291,1776],{"class":154},[127,10293,10294],{"class":781},"Age: \"",[127,10296,1989],{"class":290},[127,10298,10299],{"class":147}," tArray[i].sArray[j].age ",[127,10301,1718],{"class":290},[127,10303,9382],{"class":147},[127,10305,10307,10309,10311,10313,10315,10318,10320,10323,10325],{"class":129,"line":10306},49,[127,10308,10261],{"class":147},[127,10310,1718],{"class":290},[127,10312,10266],{"class":781},[127,10314,1776],{"class":154},[127,10316,10317],{"class":781},"Score: \"",[127,10319,1989],{"class":290},[127,10321,10322],{"class":147}," tArray[i].sArray[j].score ",[127,10324,1718],{"class":290},[127,10326,10327],{"class":147}," endl;   \n",[127,10329,10331],{"class":129,"line":10330},50,[127,10332,3071],{"class":147},[127,10334,10336],{"class":129,"line":10335},51,[127,10337,2729],{"class":147},[127,10339,10341],{"class":129,"line":10340},52,[127,10342,170],{"class":147},[127,10344,10346,10348,10350],{"class":129,"line":10345},53,[127,10347,684],{"class":290},[127,10349,2515],{"class":143},[127,10351,2518],{"class":147},[127,10353,10355],{"class":129,"line":10354},54,[127,10356,2090],{"class":147},[127,10358,10360],{"class":129,"line":10359},55,[127,10361,10362],{"class":133},"    \u002F\u002F随机数种子\n",[127,10364,10366,10368,10370,10372,10374,10376,10378,10380,10382],{"class":129,"line":10365},56,[127,10367,2915],{"class":143},[127,10369,2918],{"class":147},[127,10371,2921],{"class":290},[127,10373,2924],{"class":290},[127,10375,1104],{"class":147},[127,10377,2929],{"class":143},[127,10379,681],{"class":147},[127,10381,2934],{"class":154},[127,10383,2937],{"class":147},[127,10385,10387],{"class":129,"line":10386},57,[127,10388,10389],{"class":133},"    \u002F\u002F1.创建3名老师的数组\n",[127,10391,10393,10395,10397,10400,10402],{"class":129,"line":10392},58,[127,10394,8437],{"class":290},[127,10396,9941],{"class":143},[127,10398,10399],{"class":147}," tArray[",[127,10401,749],{"class":154},[127,10403,5232],{"class":147},[127,10405,10407],{"class":129,"line":10406},59,[127,10408,10409],{"class":133},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[127,10411,10413,10415,10418,10420,10423,10426,10428,10430,10433,10435],{"class":129,"line":10412},60,[127,10414,2527],{"class":290},[127,10416,10417],{"class":147}," len ",[127,10419,725],{"class":290},[127,10421,10422],{"class":290}," sizeof",[127,10424,10425],{"class":147},"(tArray) ",[127,10427,1259],{"class":290},[127,10429,10422],{"class":290},[127,10431,10432],{"class":147},"(tArray[",[127,10434,867],{"class":154},[127,10436,4398],{"class":147},[127,10438,10440,10443],{"class":129,"line":10439},61,[127,10441,10442],{"class":143},"    allocateSpace",[127,10444,10445],{"class":147},"(tArray, len);\n",[127,10447,10449],{"class":129,"line":10448},62,[127,10450,10451],{"class":133},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[127,10453,10455,10458],{"class":129,"line":10454},63,[127,10456,10457],{"class":143},"    printInfo",[127,10459,10445],{"class":147},[127,10461,10463],{"class":129,"line":10462},64,[127,10464,2942],{"emptyLinePlaceholder":606},[127,10466,10468],{"class":129,"line":10467},65,[127,10469,170],{"class":147},[632,10471,10472],{"start":137},[635,10473,10474,10477],{},[30,10475,10476],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10479,10480],{},"五名英雄信息如下：",[117,10482,10486],{"className":10483,"code":10484,"language":10485,"meta":122,"style":122},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[124,10487,10488,10506,10523,10540,10557],{"__ignoreMap":122},[127,10489,10490,10492,10495,10497,10499,10501,10504],{"class":129,"line":130},[127,10491,5459],{"class":147},[127,10493,10494],{"class":781},"\"刘备\"",[127,10496,1053],{"class":147},[127,10498,1449],{"class":154},[127,10500,1053],{"class":147},[127,10502,10503],{"class":781},"\"男\"",[127,10505,5472],{"class":147},[127,10507,10508,10510,10513,10515,10517,10519,10521],{"class":129,"line":137},[127,10509,5459],{"class":147},[127,10511,10512],{"class":781},"\"关羽\"",[127,10514,1053],{"class":147},[127,10516,1424],{"class":154},[127,10518,1053],{"class":147},[127,10520,10503],{"class":781},[127,10522,5472],{"class":147},[127,10524,10525,10527,10530,10532,10534,10536,10538],{"class":129,"line":151},[127,10526,5459],{"class":147},[127,10528,10529],{"class":781},"\"张飞\"",[127,10531,1053],{"class":147},[127,10533,1374],{"class":154},[127,10535,1053],{"class":147},[127,10537,10503],{"class":781},[127,10539,5472],{"class":147},[127,10541,10542,10544,10547,10549,10551,10553,10555],{"class":129,"line":167},[127,10543,5459],{"class":147},[127,10545,10546],{"class":781},"\"赵云\"",[127,10548,1053],{"class":147},[127,10550,1399],{"class":154},[127,10552,1053],{"class":147},[127,10554,10503],{"class":781},[127,10556,5472],{"class":147},[127,10558,10559,10561,10564,10566,10568,10570,10573],{"class":129,"line":415},[127,10560,5459],{"class":147},[127,10562,10563],{"class":781},"\"貂蝉\"",[127,10565,1053],{"class":147},[127,10567,1349],{"class":154},[127,10569,1053],{"class":147},[127,10571,10572],{"class":781},"\"女\"",[127,10574,5472],{"class":147},[19,10576,10577],{},"代码：",[117,10579,10581],{"className":669,"code":10580,"language":671,"meta":122,"style":122},"#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",[124,10582,10583,10589,10599,10605,10612,10616,10620,10626,10631,10635,10640,10663,10667,10692,10696,10729,10734,10763,10768,10783,10809,10829,10834,10839,10843,10847,10852,10874,10878,10902,10906,10968,10972,10976,10984,10988,10993,11004,11008,11024,11040,11056,11072,11088,11092,11112,11134,11139,11152,11159,11164,11170,11175,11188,11194],{"__ignoreMap":122},[127,10584,10585,10587],{"class":129,"line":130},[127,10586,2492],{"class":290},[127,10588,2495],{"class":781},[127,10590,10591,10593,10595,10597],{"class":129,"line":137},[127,10592,2500],{"class":290},[127,10594,2503],{"class":290},[127,10596,2506],{"class":143},[127,10598,164],{"class":147},[127,10600,10601,10603],{"class":129,"line":151},[127,10602,2492],{"class":290},[127,10604,8291],{"class":781},[127,10606,10607,10609],{"class":129,"line":167},[127,10608,8301],{"class":290},[127,10610,10611],{"class":143}," Sanguo\n",[127,10613,10614],{"class":129,"line":415},[127,10615,2090],{"class":147},[127,10617,10618],{"class":129,"line":421},[127,10619,8327],{"class":147},[127,10621,10622,10624],{"class":129,"line":1766},[127,10623,2527],{"class":290},[127,10625,8339],{"class":147},[127,10627,10628],{"class":129,"line":1856},[127,10629,10630],{"class":147},"    string gender;\n",[127,10632,10633],{"class":129,"line":1862},[127,10634,4537],{"class":147},[127,10636,10637],{"class":129,"line":1874},[127,10638,10639],{"class":133},"\u002F\u002F定义排序函数\n",[127,10641,10642,10644,10646,10648,10651,10653,10655,10657,10659,10661],{"class":129,"line":2155},[127,10643,5906],{"class":290},[127,10645,7858],{"class":143},[127,10647,681],{"class":147},[127,10649,10650],{"class":143},"Sanguo",[127,10652,7060],{"class":290},[127,10654,1369],{"class":5758},[127,10656,1053],{"class":147},[127,10658,684],{"class":290},[127,10660,7873],{"class":5758},[127,10662,687],{"class":147},[127,10664,10665],{"class":129,"line":2160},[127,10666,2090],{"class":147},[127,10668,10669,10671,10673,10675,10677,10679,10681,10683,10685,10688,10690],{"class":129,"line":2166},[127,10670,3743],{"class":290},[127,10672,681],{"class":147},[127,10674,684],{"class":290},[127,10676,3574],{"class":147},[127,10678,725],{"class":290},[127,10680,867],{"class":154},[127,10682,3581],{"class":147},[127,10684,1584],{"class":290},[127,10686,10687],{"class":147},"len;i",[127,10689,2834],{"class":290},[127,10691,687],{"class":147},[127,10693,10694],{"class":129,"line":2171},[127,10695,2572],{"class":147},[127,10697,10698,10701,10703,10705,10707,10709,10711,10713,10715,10717,10719,10721,10723,10725,10727],{"class":129,"line":2185},[127,10699,10700],{"class":290},"     for",[127,10702,2201],{"class":147},[127,10704,684],{"class":290},[127,10706,3952],{"class":147},[127,10708,725],{"class":290},[127,10710,867],{"class":154},[127,10712,3959],{"class":147},[127,10714,1584],{"class":290},[127,10716,7900],{"class":147},[127,10718,1207],{"class":290},[127,10720,893],{"class":154},[127,10722,1207],{"class":290},[127,10724,4092],{"class":147},[127,10726,2834],{"class":290},[127,10728,687],{"class":147},[127,10730,10731],{"class":129,"line":2190},[127,10732,10733],{"class":147},"     {\n",[127,10735,10736,10739,10742,10744,10747,10749,10752,10754,10756,10758,10760],{"class":129,"line":2196},[127,10737,10738],{"class":290},"         if",[127,10740,10741],{"class":147}," ((s",[127,10743,1156],{"class":290},[127,10745,10746],{"class":147},"j)->age ",[127,10748,1634],{"class":290},[127,10750,10751],{"class":147}," (s",[127,10753,1156],{"class":290},[127,10755,1142],{"class":147},[127,10757,1156],{"class":290},[127,10759,893],{"class":154},[127,10761,10762],{"class":147},")->age)\n",[127,10764,10765],{"class":129,"line":2217},[127,10766,10767],{"class":147},"         {\n",[127,10769,10770,10773,10775,10778,10780],{"class":129,"line":2222},[127,10771,10772],{"class":147},"             Sanguo temp",[127,10774,7695],{"class":290},[127,10776,10777],{"class":147},"(s",[127,10779,1156],{"class":290},[127,10781,10782],{"class":147},"j);\n",[127,10784,10785,10788,10790,10792,10795,10797,10799,10801,10803,10805,10807],{"class":129,"line":2236},[127,10786,10787],{"class":290},"             *",[127,10789,10777],{"class":147},[127,10791,1156],{"class":290},[127,10793,10794],{"class":147},"j)",[127,10796,7695],{"class":290},[127,10798,10777],{"class":147},[127,10800,1156],{"class":290},[127,10802,1142],{"class":147},[127,10804,1156],{"class":290},[127,10806,893],{"class":154},[127,10808,3261],{"class":147},[127,10810,10811,10813,10815,10817,10819,10821,10823,10825,10827],{"class":129,"line":2241},[127,10812,10787],{"class":290},[127,10814,10777],{"class":147},[127,10816,1156],{"class":290},[127,10818,1142],{"class":147},[127,10820,1156],{"class":290},[127,10822,893],{"class":154},[127,10824,1104],{"class":147},[127,10826,725],{"class":290},[127,10828,4822],{"class":147},[127,10830,10831],{"class":129,"line":2270},[127,10832,10833],{"class":147},"         }\n",[127,10835,10836],{"class":129,"line":2275},[127,10837,10838],{"class":147},"     }\n",[127,10840,10841],{"class":129,"line":2292},[127,10842,2729],{"class":147},[127,10844,10845],{"class":129,"line":2297},[127,10846,170],{"class":147},[127,10848,10849],{"class":129,"line":2302},[127,10850,10851],{"class":133},"\u002F\u002F定义打印函数\n",[127,10853,10854,10856,10858,10860,10862,10864,10866,10868,10870,10872],{"class":129,"line":2307},[127,10855,5906],{"class":290},[127,10857,10157],{"class":143},[127,10859,681],{"class":147},[127,10861,10650],{"class":143},[127,10863,7060],{"class":290},[127,10865,1369],{"class":5758},[127,10867,1053],{"class":147},[127,10869,684],{"class":290},[127,10871,7873],{"class":5758},[127,10873,687],{"class":147},[127,10875,10876],{"class":129,"line":2321},[127,10877,2090],{"class":147},[127,10879,10880,10882,10884,10886,10888,10890,10892,10894,10896,10898,10900],{"class":129,"line":2326},[127,10881,3743],{"class":290},[127,10883,2201],{"class":147},[127,10885,684],{"class":290},[127,10887,3574],{"class":147},[127,10889,725],{"class":290},[127,10891,867],{"class":154},[127,10893,3581],{"class":147},[127,10895,1584],{"class":290},[127,10897,10687],{"class":147},[127,10899,2834],{"class":290},[127,10901,687],{"class":147},[127,10903,10904],{"class":129,"line":3119},[127,10905,2572],{"class":147},[127,10907,10908,10910,10912,10914,10916,10919,10921,10923,10925,10928,10930,10932,10934,10937,10939,10941,10943,10946,10948,10950,10952,10955,10957,10959,10961,10964,10966],{"class":129,"line":3133},[127,10909,3993],{"class":147},[127,10911,1718],{"class":290},[127,10913,926],{"class":781},[127,10915,1776],{"class":154},[127,10917,10918],{"class":781},"姓名：\"",[127,10920,1718],{"class":290},[127,10922,10777],{"class":147},[127,10924,1156],{"class":290},[127,10926,10927],{"class":147},"i)->name",[127,10929,1718],{"class":290},[127,10931,926],{"class":781},[127,10933,1776],{"class":154},[127,10935,10936],{"class":781},"年龄：\"",[127,10938,1718],{"class":290},[127,10940,10777],{"class":147},[127,10942,1156],{"class":290},[127,10944,10945],{"class":147},"i)->age",[127,10947,1718],{"class":290},[127,10949,926],{"class":781},[127,10951,1776],{"class":154},[127,10953,10954],{"class":781},"性别：\"",[127,10956,1718],{"class":290},[127,10958,10777],{"class":147},[127,10960,1156],{"class":290},[127,10962,10963],{"class":147},"i)->gender",[127,10965,1718],{"class":290},[127,10967,1740],{"class":147},[127,10969,10970],{"class":129,"line":3141},[127,10971,2729],{"class":147},[127,10973,10974],{"class":129,"line":3146},[127,10975,170],{"class":147},[127,10977,10978,10980,10982],{"class":129,"line":3152},[127,10979,684],{"class":290},[127,10981,2515],{"class":143},[127,10983,2518],{"class":147},[127,10985,10986],{"class":129,"line":3158},[127,10987,2090],{"class":147},[127,10989,10990],{"class":129,"line":3163},[127,10991,10992],{"class":133},"    \u002F\u002F定义结构体变量\n",[127,10994,10995,10998,11000,11002],{"class":129,"line":8490},[127,10996,10997],{"class":147},"    Sanguo s1[",[127,10999,994],{"class":154},[127,11001,1614],{"class":147},[127,11003,5450],{"class":290},[127,11005,11006],{"class":129,"line":8514},[127,11007,2572],{"class":147},[127,11009,11010,11012,11014,11016,11018,11020,11022],{"class":129,"line":8519},[127,11011,5459],{"class":147},[127,11013,10494],{"class":781},[127,11015,1053],{"class":147},[127,11017,1449],{"class":154},[127,11019,1053],{"class":147},[127,11021,10503],{"class":781},[127,11023,5472],{"class":147},[127,11025,11026,11028,11030,11032,11034,11036,11038],{"class":129,"line":8525},[127,11027,5459],{"class":147},[127,11029,10512],{"class":781},[127,11031,1053],{"class":147},[127,11033,1424],{"class":154},[127,11035,1053],{"class":147},[127,11037,10503],{"class":781},[127,11039,5472],{"class":147},[127,11041,11042,11044,11046,11048,11050,11052,11054],{"class":129,"line":8552},[127,11043,5459],{"class":147},[127,11045,10529],{"class":781},[127,11047,1053],{"class":147},[127,11049,1374],{"class":154},[127,11051,1053],{"class":147},[127,11053,10503],{"class":781},[127,11055,5472],{"class":147},[127,11057,11058,11060,11062,11064,11066,11068,11070],{"class":129,"line":8557},[127,11059,5459],{"class":147},[127,11061,10546],{"class":781},[127,11063,1053],{"class":147},[127,11065,1399],{"class":154},[127,11067,1053],{"class":147},[127,11069,10503],{"class":781},[127,11071,5472],{"class":147},[127,11073,11074,11076,11078,11080,11082,11084,11086],{"class":129,"line":8563},[127,11075,5459],{"class":147},[127,11077,10563],{"class":781},[127,11079,1053],{"class":147},[127,11081,1349],{"class":154},[127,11083,1053],{"class":147},[127,11085,10572],{"class":781},[127,11087,5472],{"class":147},[127,11089,11090],{"class":129,"line":8575},[127,11091,5493],{"class":147},[127,11093,11094,11096,11098,11100,11103,11105,11108,11110],{"class":129,"line":8587},[127,11095,2527],{"class":290},[127,11097,7873],{"class":147},[127,11099,4745],{"class":290},[127,11101,11102],{"class":147},"(s1)",[127,11104,4751],{"class":290},[127,11106,11107],{"class":147},"(s1[",[127,11109,867],{"class":154},[127,11111,4398],{"class":147},[127,11113,11114,11117,11119,11122,11124,11127,11130,11132],{"class":129,"line":8599},[127,11115,11116],{"class":147},"    Sanguo ",[127,11118,1130],{"class":290},[127,11120,11121],{"class":147},"s ",[127,11123,725],{"class":290},[127,11125,11126],{"class":290}," &",[127,11128,11129],{"class":147},"s1[",[127,11131,867],{"class":154},[127,11133,5232],{"class":147},[127,11135,11136],{"class":129,"line":10258},[127,11137,11138],{"class":133},"    \u002F\u002F排序前：\n",[127,11140,11141,11143,11145,11148,11150],{"class":129,"line":10283},[127,11142,7071],{"class":147},[127,11144,1718],{"class":290},[127,11146,11147],{"class":781}," \"排序前：\"",[127,11149,1989],{"class":290},[127,11151,9382],{"class":147},[127,11153,11154,11156],{"class":129,"line":10306},[127,11155,10457],{"class":143},[127,11157,11158],{"class":147},"(s,len);\n",[127,11160,11161],{"class":129,"line":10330},[127,11162,11163],{"class":133},"    \u002F\u002F调用排序函数\n",[127,11165,11166,11168],{"class":129,"line":10335},[127,11167,8140],{"class":143},[127,11169,11158],{"class":147},[127,11171,11172],{"class":129,"line":10340},[127,11173,11174],{"class":133},"    \u002F\u002F排序后\n",[127,11176,11177,11179,11181,11184,11186],{"class":129,"line":10345},[127,11178,7071],{"class":147},[127,11180,1718],{"class":290},[127,11182,11183],{"class":781}," \"排序后：\"",[127,11185,1989],{"class":290},[127,11187,9382],{"class":147},[127,11189,11190,11192],{"class":129,"line":10354},[127,11191,10457],{"class":143},[127,11193,11158],{"class":147},[127,11195,11196],{"class":129,"line":10359},[127,11197,170],{"class":147},[19,11199,11200,11201,11203],{},"注意：使用指针时直接用传首地址**&s",[127,11202,867],{},"**",[575,11205,11206],{},"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":122,"searchDepth":137,"depth":137,"links":11208},[11209,11210,11211,11212,11213,11214,11215],{"id":8245,"depth":137,"text":8246},{"id":8607,"depth":137,"text":8608},{"id":8876,"depth":137,"text":8877},{"id":9041,"depth":137,"text":9042},{"id":9257,"depth":137,"text":9258},{"id":9578,"depth":137,"text":9579},{"id":9806,"depth":137,"text":9807},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8234,"description":8242},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11222,"title":11223,"body":11224,"description":122,"extension":604,"meta":12567,"navigation":606,"path":12568,"seo":12569,"stem":12570,"__hash__":12571},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11225,"toc":12561},[11226,11229,11233,11239,11253,11258,11261,11265,11272,11278,11281,11288,11294,11299,11302,11305,11308,11872,11875,11889,11893,11898,11914,12054,12057,12063,12066,12071,12079,12187,12190,12195,12198,12203,12206,12212,12215,12558],[10,11227,11223],{"id":11228},"_5程序内存模型",[14,11230,11232],{"id":11231},"_51内存分区模型","5.1内存分区模型",[19,11234,11235,11236],{},"C++程序在执行时，将内存大方向划分为",[30,11237,11238],{},"4个区域",[1681,11240,11241,11244,11247,11250],{},[635,11242,11243],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[635,11245,11246],{},"全局区：存放全局变量和静态变量以及常量",[635,11248,11249],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[635,11251,11252],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11254,11255],{},[30,11256,11257],{},"内存四区意义：",[19,11259,11260],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[62,11262,11264],{"id":11263},"_511程序运行前","5.1.1程序运行前",[19,11266,11267,11268,11271],{},"​\t在程序编译后，生成了exe可执行程序，",[30,11269,11270],{},"未执行该程序前","分为两个区域",[19,11273,11274,11275],{},"​\t",[30,11276,11277],{},"代码区：",[19,11279,11280],{},"​\t\t存放 CPU 执行的机器指令",[19,11282,11283,11284,11287],{},"​\t\t代码区是",[30,11285,11286],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11289,11283,11290,11293],{},[30,11291,11292],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11295,11274,11296],{},[30,11297,11298],{},"全局区：",[19,11300,11301],{},"​\t\t全局变量和静态变量存放在此.",[19,11303,11304],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11306,11307],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[117,11309,11311],{"className":669,"code":11310,"language":671,"meta":122,"style":122},"\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",[124,11312,11313,11318,11331,11344,11348,11353,11368,11383,11387,11396,11400,11405,11418,11431,11435,11440,11466,11492,11496,11523,11549,11553,11558,11574,11589,11593,11619,11645,11649,11674,11699,11703,11729,11755,11759,11775,11790,11816,11842,11846,11856,11860,11868],{"__ignoreMap":122},[127,11314,11315],{"class":129,"line":130},[127,11316,11317],{"class":133},"\u002F\u002F全局变量\n",[127,11319,11320,11322,11325,11327,11329],{"class":129,"line":137},[127,11321,684],{"class":290},[127,11323,11324],{"class":147}," g_a ",[127,11326,725],{"class":290},[127,11328,2580],{"class":154},[127,11330,164],{"class":147},[127,11332,11333,11335,11338,11340,11342],{"class":129,"line":151},[127,11334,684],{"class":290},[127,11336,11337],{"class":147}," g_b ",[127,11339,725],{"class":290},[127,11341,2580],{"class":154},[127,11343,164],{"class":147},[127,11345,11346],{"class":129,"line":167},[127,11347,2942],{"emptyLinePlaceholder":606},[127,11349,11350],{"class":129,"line":415},[127,11351,11352],{"class":133},"\u002F\u002F全局常量\n",[127,11354,11355,11357,11359,11362,11364,11366],{"class":129,"line":421},[127,11356,7334],{"class":290},[127,11358,2924],{"class":290},[127,11360,11361],{"class":147}," c_g_a ",[127,11363,725],{"class":290},[127,11365,2580],{"class":154},[127,11367,164],{"class":147},[127,11369,11370,11372,11374,11377,11379,11381],{"class":129,"line":1766},[127,11371,7334],{"class":290},[127,11373,2924],{"class":290},[127,11375,11376],{"class":147}," c_g_b ",[127,11378,725],{"class":290},[127,11380,2580],{"class":154},[127,11382,164],{"class":147},[127,11384,11385],{"class":129,"line":1856},[127,11386,2942],{"emptyLinePlaceholder":606},[127,11388,11389,11391,11393],{"class":129,"line":1862},[127,11390,684],{"class":290},[127,11392,2515],{"class":143},[127,11394,11395],{"class":147},"() {\n",[127,11397,11398],{"class":129,"line":1874},[127,11399,2942],{"emptyLinePlaceholder":606},[127,11401,11402],{"class":129,"line":2155},[127,11403,11404],{"class":133},"    \u002F\u002F局部变量\n",[127,11406,11407,11409,11412,11414,11416],{"class":129,"line":2160},[127,11408,2527],{"class":290},[127,11410,11411],{"class":147}," a ",[127,11413,725],{"class":290},[127,11415,2580],{"class":154},[127,11417,164],{"class":147},[127,11419,11420,11422,11425,11427,11429],{"class":129,"line":2166},[127,11421,2527],{"class":290},[127,11423,11424],{"class":147}," b ",[127,11426,725],{"class":290},[127,11428,2580],{"class":154},[127,11430,164],{"class":147},[127,11432,11433],{"class":129,"line":2171},[127,11434,2942],{"emptyLinePlaceholder":606},[127,11436,11437],{"class":129,"line":2185},[127,11438,11439],{"class":133},"    \u002F\u002F打印地址\n",[127,11441,11442,11444,11446,11449,11451,11453,11455,11457,11459,11462,11464],{"class":129,"line":2190},[127,11443,7071],{"class":147},[127,11445,1718],{"class":290},[127,11447,11448],{"class":781}," \"局部变量a地址为： \"",[127,11450,1989],{"class":290},[127,11452,2201],{"class":147},[127,11454,684],{"class":290},[127,11456,1104],{"class":147},[127,11458,1028],{"class":290},[127,11460,11461],{"class":147},"a ",[127,11463,1718],{"class":290},[127,11465,9382],{"class":147},[127,11467,11468,11470,11472,11475,11477,11479,11481,11483,11485,11488,11490],{"class":129,"line":2196},[127,11469,7071],{"class":147},[127,11471,1718],{"class":290},[127,11473,11474],{"class":781}," \"局部变量b地址为： \"",[127,11476,1989],{"class":290},[127,11478,2201],{"class":147},[127,11480,684],{"class":290},[127,11482,1104],{"class":147},[127,11484,1028],{"class":290},[127,11486,11487],{"class":147},"b ",[127,11489,1718],{"class":290},[127,11491,9382],{"class":147},[127,11493,11494],{"class":129,"line":2217},[127,11495,2942],{"emptyLinePlaceholder":606},[127,11497,11498,11500,11502,11505,11507,11510,11512,11514,11516,11519,11521],{"class":129,"line":2222},[127,11499,7071],{"class":147},[127,11501,1718],{"class":290},[127,11503,11504],{"class":781}," \"全局变量g_a地址为： \"",[127,11506,1989],{"class":290},[127,11508,11509],{"class":147},"  (",[127,11511,684],{"class":290},[127,11513,1104],{"class":147},[127,11515,1028],{"class":290},[127,11517,11518],{"class":147},"g_a ",[127,11520,1718],{"class":290},[127,11522,9382],{"class":147},[127,11524,11525,11527,11529,11532,11534,11536,11538,11540,11542,11545,11547],{"class":129,"line":2236},[127,11526,7071],{"class":147},[127,11528,1718],{"class":290},[127,11530,11531],{"class":781}," \"全局变量g_b地址为： \"",[127,11533,1989],{"class":290},[127,11535,11509],{"class":147},[127,11537,684],{"class":290},[127,11539,1104],{"class":147},[127,11541,1028],{"class":290},[127,11543,11544],{"class":147},"g_b ",[127,11546,1718],{"class":290},[127,11548,9382],{"class":147},[127,11550,11551],{"class":129,"line":2241},[127,11552,2942],{"emptyLinePlaceholder":606},[127,11554,11555],{"class":129,"line":2270},[127,11556,11557],{"class":133},"    \u002F\u002F静态变量\n",[127,11559,11560,11563,11565,11568,11570,11572],{"class":129,"line":2275},[127,11561,11562],{"class":290},"    static",[127,11564,2924],{"class":290},[127,11566,11567],{"class":147}," s_a ",[127,11569,725],{"class":290},[127,11571,2580],{"class":154},[127,11573,164],{"class":147},[127,11575,11576,11578,11580,11583,11585,11587],{"class":129,"line":2292},[127,11577,11562],{"class":290},[127,11579,2924],{"class":290},[127,11581,11582],{"class":147}," s_b ",[127,11584,725],{"class":290},[127,11586,2580],{"class":154},[127,11588,164],{"class":147},[127,11590,11591],{"class":129,"line":2297},[127,11592,2942],{"emptyLinePlaceholder":606},[127,11594,11595,11597,11599,11602,11604,11606,11608,11610,11612,11615,11617],{"class":129,"line":2302},[127,11596,7071],{"class":147},[127,11598,1718],{"class":290},[127,11600,11601],{"class":781}," \"静态变量s_a地址为： \"",[127,11603,1989],{"class":290},[127,11605,2201],{"class":147},[127,11607,684],{"class":290},[127,11609,1104],{"class":147},[127,11611,1028],{"class":290},[127,11613,11614],{"class":147},"s_a ",[127,11616,1718],{"class":290},[127,11618,9382],{"class":147},[127,11620,11621,11623,11625,11628,11630,11632,11634,11636,11638,11641,11643],{"class":129,"line":2307},[127,11622,7071],{"class":147},[127,11624,1718],{"class":290},[127,11626,11627],{"class":781}," \"静态变量s_b地址为： \"",[127,11629,1989],{"class":290},[127,11631,2201],{"class":147},[127,11633,684],{"class":290},[127,11635,1104],{"class":147},[127,11637,1028],{"class":290},[127,11639,11640],{"class":147},"s_b ",[127,11642,1718],{"class":290},[127,11644,9382],{"class":147},[127,11646,11647],{"class":129,"line":2321},[127,11648,2942],{"emptyLinePlaceholder":606},[127,11650,11651,11653,11655,11658,11660,11662,11664,11666,11668,11670,11672],{"class":129,"line":2326},[127,11652,7071],{"class":147},[127,11654,1718],{"class":290},[127,11656,11657],{"class":781}," \"字符串常量地址为： \"",[127,11659,1989],{"class":290},[127,11661,2201],{"class":147},[127,11663,684],{"class":290},[127,11665,1104],{"class":147},[127,11667,1028],{"class":290},[127,11669,1735],{"class":781},[127,11671,1989],{"class":290},[127,11673,9382],{"class":147},[127,11675,11676,11678,11680,11682,11684,11686,11688,11690,11692,11695,11697],{"class":129,"line":3119},[127,11677,7071],{"class":147},[127,11679,1718],{"class":290},[127,11681,11657],{"class":781},[127,11683,1989],{"class":290},[127,11685,2201],{"class":147},[127,11687,684],{"class":290},[127,11689,1104],{"class":147},[127,11691,1028],{"class":290},[127,11693,11694],{"class":781},"\"hello world1\"",[127,11696,1989],{"class":290},[127,11698,9382],{"class":147},[127,11700,11701],{"class":129,"line":3133},[127,11702,2942],{"emptyLinePlaceholder":606},[127,11704,11705,11707,11709,11712,11714,11716,11718,11720,11722,11725,11727],{"class":129,"line":3141},[127,11706,7071],{"class":147},[127,11708,1718],{"class":290},[127,11710,11711],{"class":781}," \"全局常量c_g_a地址为： \"",[127,11713,1989],{"class":290},[127,11715,2201],{"class":147},[127,11717,684],{"class":290},[127,11719,1104],{"class":147},[127,11721,1028],{"class":290},[127,11723,11724],{"class":147},"c_g_a ",[127,11726,1718],{"class":290},[127,11728,9382],{"class":147},[127,11730,11731,11733,11735,11738,11740,11742,11744,11746,11748,11751,11753],{"class":129,"line":3146},[127,11732,7071],{"class":147},[127,11734,1718],{"class":290},[127,11736,11737],{"class":781}," \"全局常量c_g_b地址为： \"",[127,11739,1989],{"class":290},[127,11741,2201],{"class":147},[127,11743,684],{"class":290},[127,11745,1104],{"class":147},[127,11747,1028],{"class":290},[127,11749,11750],{"class":147},"c_g_b ",[127,11752,1718],{"class":290},[127,11754,9382],{"class":147},[127,11756,11757],{"class":129,"line":3152},[127,11758,2942],{"emptyLinePlaceholder":606},[127,11760,11761,11764,11766,11769,11771,11773],{"class":129,"line":3158},[127,11762,11763],{"class":290},"    const",[127,11765,2924],{"class":290},[127,11767,11768],{"class":147}," c_l_a ",[127,11770,725],{"class":290},[127,11772,2580],{"class":154},[127,11774,164],{"class":147},[127,11776,11777,11779,11781,11784,11786,11788],{"class":129,"line":3163},[127,11778,11763],{"class":290},[127,11780,2924],{"class":290},[127,11782,11783],{"class":147}," c_l_b ",[127,11785,725],{"class":290},[127,11787,2580],{"class":154},[127,11789,164],{"class":147},[127,11791,11792,11794,11796,11799,11801,11803,11805,11807,11809,11812,11814],{"class":129,"line":8490},[127,11793,7071],{"class":147},[127,11795,1718],{"class":290},[127,11797,11798],{"class":781}," \"局部常量c_l_a地址为： \"",[127,11800,1989],{"class":290},[127,11802,2201],{"class":147},[127,11804,684],{"class":290},[127,11806,1104],{"class":147},[127,11808,1028],{"class":290},[127,11810,11811],{"class":147},"c_l_a ",[127,11813,1718],{"class":290},[127,11815,9382],{"class":147},[127,11817,11818,11820,11822,11825,11827,11829,11831,11833,11835,11838,11840],{"class":129,"line":8514},[127,11819,7071],{"class":147},[127,11821,1718],{"class":290},[127,11823,11824],{"class":781}," \"局部常量c_l_b地址为： \"",[127,11826,1989],{"class":290},[127,11828,2201],{"class":147},[127,11830,684],{"class":290},[127,11832,1104],{"class":147},[127,11834,1028],{"class":290},[127,11836,11837],{"class":147},"c_l_b ",[127,11839,1718],{"class":290},[127,11841,9382],{"class":147},[127,11843,11844],{"class":129,"line":8519},[127,11845,2942],{"emptyLinePlaceholder":606},[127,11847,11848,11850,11852,11854],{"class":129,"line":8525},[127,11849,2845],{"class":143},[127,11851,681],{"class":147},[127,11853,2850],{"class":781},[127,11855,3261],{"class":147},[127,11857,11858],{"class":129,"line":8552},[127,11859,2942],{"emptyLinePlaceholder":606},[127,11861,11862,11864,11866],{"class":129,"line":8557},[127,11863,4632],{"class":290},[127,11865,4635],{"class":154},[127,11867,164],{"class":147},[127,11869,11870],{"class":129,"line":8563},[127,11871,170],{"class":147},[19,11873,11874],{},"总结：",[1681,11876,11877,11880,11883,11886],{},[635,11878,11879],{},"c++中程序运行前分为全局区和代码区",[635,11881,11882],{},"代码区特点是共享和只读",[635,11884,11885],{},"全局区中存放全局变量、静态变量、常量",[635,11887,11888],{},"常量区中存放const修饰的全局常量和字符串常量",[62,11890,11892],{"id":11891},"_512程序运行后","5.1.2程序运行后",[632,11894,11895],{},[635,11896,11897],{},"栈区：",[1681,11899,11900,11907],{},[635,11901,11902,11903,11906],{},"由编译器自动分配释放, 存放",[30,11904,11905],{},"函数的参数值,局部变量","等",[635,11908,11909,11910,11913],{},"注意事项：",[30,11911,11912],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[117,11915,11917],{"className":669,"code":11916,"language":671,"meta":122,"style":122},"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",[124,11918,11919,11930,11934,11949,11961,11965,11969,11977,11982,11997,12015,12032,12042,12050],{"__ignoreMap":122},[127,11920,11921,11923,11925,11928],{"class":129,"line":130},[127,11922,684],{"class":290},[127,11924,7060],{"class":290},[127,11926,11927],{"class":143}," func",[127,11929,2518],{"class":147},[127,11931,11932],{"class":129,"line":137},[127,11933,2090],{"class":147},[127,11935,11936,11938,11940,11942,11944,11946],{"class":129,"line":151},[127,11937,2527],{"class":290},[127,11939,11411],{"class":147},[127,11941,725],{"class":290},[127,11943,2580],{"class":154},[127,11945,734],{"class":147},[127,11947,11948],{"class":133}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[127,11950,11951,11953,11955,11958],{"class":129,"line":167},[127,11952,4632],{"class":290},[127,11954,11126],{"class":290},[127,11956,11957],{"class":147},"a;",[127,11959,11960],{"class":133}," \u002F\u002F放回局部变量的地址\n",[127,11962,11963],{"class":129,"line":415},[127,11964,170],{"class":147},[127,11966,11967],{"class":129,"line":421},[127,11968,2942],{"emptyLinePlaceholder":606},[127,11970,11971,11973,11975],{"class":129,"line":1766},[127,11972,684],{"class":290},[127,11974,2515],{"class":143},[127,11976,11395],{"class":147},[127,11978,11979],{"class":129,"line":1856},[127,11980,11981],{"class":133},"    \u002F\u002F接受func的返回值\n",[127,11983,11984,11986,11988,11991,11993,11995],{"class":129,"line":1862},[127,11985,2527],{"class":290},[127,11987,7060],{"class":290},[127,11989,11990],{"class":147},"p ",[127,11992,725],{"class":290},[127,11994,11927],{"class":143},[127,11996,6178],{"class":147},[127,11998,11999,12001,12003,12005,12007,12009,12012],{"class":129,"line":1874},[127,12000,7071],{"class":147},[127,12002,1718],{"class":290},[127,12004,7060],{"class":290},[127,12006,11990],{"class":147},[127,12008,1718],{"class":290},[127,12010,12011],{"class":147}," endl;",[127,12013,12014],{"class":133}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[127,12016,12017,12019,12021,12023,12025,12027,12029],{"class":129,"line":2155},[127,12018,7071],{"class":147},[127,12020,1718],{"class":290},[127,12022,7060],{"class":290},[127,12024,11990],{"class":147},[127,12026,1718],{"class":290},[127,12028,12011],{"class":147},[127,12030,12031],{"class":133}," \u002F\u002F第二次这个数据不再保留\n",[127,12033,12034,12036,12038,12040],{"class":129,"line":2160},[127,12035,2845],{"class":143},[127,12037,681],{"class":147},[127,12039,2850],{"class":781},[127,12041,3261],{"class":147},[127,12043,12044,12046,12048],{"class":129,"line":2166},[127,12045,4632],{"class":290},[127,12047,4635],{"class":154},[127,12049,164],{"class":147},[127,12051,12052],{"class":129,"line":2171},[127,12053,170],{"class":147},[19,12055,12056],{},"输出结果：",[19,12058,12059],{},[23,12060],{"alt":12061,"src":12062},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12064,12065],{},"总结：不要返回局部变量的地址",[632,12067,12068],{"start":137},[635,12069,12070],{},"堆区",[1681,12072,12073,12076],{},[635,12074,12075],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[635,12077,12078],{},"在c++中主要利用new在堆区开辟内存",[117,12080,12082],{"className":669,"code":12081,"language":671,"meta":122,"style":122},"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",[124,12083,12084,12099,12103,12108,12129,12136,12140,12148,12152,12157,12171,12183],{"__ignoreMap":122},[127,12085,12086,12088,12091,12094,12096],{"class":129,"line":130},[127,12087,684],{"class":290},[127,12089,12090],{"class":290},"  *",[127,12092,12093],{"class":143},"func",[127,12095,2969],{"class":147},[127,12097,12098],{"class":133},"  \u002F\u002F函数返回指针\n",[127,12100,12101],{"class":129,"line":137},[127,12102,2090],{"class":147},[127,12104,12105],{"class":129,"line":151},[127,12106,12107],{"class":133},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[127,12109,12110,12112,12114,12116,12118,12121,12123,12125,12127],{"class":129,"line":167},[127,12111,4689],{"class":290},[127,12113,7060],{"class":290},[127,12115,19],{"class":147},[127,12117,725],{"class":290},[127,12119,12120],{"class":290}," new",[127,12122,2924],{"class":290},[127,12124,681],{"class":147},[127,12126,1121],{"class":154},[127,12128,3261],{"class":147},[127,12130,12131,12133],{"class":129,"line":415},[127,12132,4923],{"class":290},[127,12134,12135],{"class":147}," p;\n",[127,12137,12138],{"class":129,"line":421},[127,12139,170],{"class":147},[127,12141,12142,12144,12146],{"class":129,"line":1766},[127,12143,684],{"class":290},[127,12145,2515],{"class":143},[127,12147,2518],{"class":147},[127,12149,12150],{"class":129,"line":1856},[127,12151,2090],{"class":147},[127,12153,12154],{"class":129,"line":1862},[127,12155,12156],{"class":133},"    \u002F\u002F在堆区开辟数据\n",[127,12158,12159,12161,12163,12165,12167,12169],{"class":129,"line":1874},[127,12160,2527],{"class":290},[127,12162,7060],{"class":290},[127,12164,19],{"class":147},[127,12166,725],{"class":290},[127,12168,12093],{"class":143},[127,12170,6178],{"class":147},[127,12172,12173,12175,12177,12179,12181],{"class":129,"line":2155},[127,12174,2095],{"class":147},[127,12176,6961],{"class":290},[127,12178,19],{"class":147},[127,12180,1718],{"class":290},[127,12182,1740],{"class":147},[127,12184,12185],{"class":129,"line":2160},[127,12186,170],{"class":147},[19,12188,12189],{},"图片展示：",[19,12191,12192],{},[23,12193],{"alt":12061,"src":12194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12196,12197],{},"堆区内存由程序员管生死！！！",[632,12199,12200],{"start":151},[635,12201,12202],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12204,12205],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12207,12208,12209],{},"​语法：",[124,12210,12211],{}," new 数据类型",[19,12213,12214],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[117,12216,12218],{"className":669,"code":12217,"language":671,"meta":122,"style":122},"\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",[124,12219,12220,12225,12235,12239,12244,12249,12271,12275,12283,12287,12301,12313,12325,12337,12342,12347,12358,12362,12367,12375,12379,12384,12406,12432,12436,12454,12458,12484,12488,12500,12504,12509,12514,12522,12526,12530,12538,12542,12548,12554],{"__ignoreMap":122},[127,12221,12222],{"class":129,"line":130},[127,12223,12224],{"class":133},"\u002F\u002F1.new的基本语法\n",[127,12226,12227,12229,12231,12233],{"class":129,"line":137},[127,12228,684],{"class":290},[127,12230,7060],{"class":290},[127,12232,12093],{"class":143},[127,12234,2518],{"class":147},[127,12236,12237],{"class":129,"line":151},[127,12238,2090],{"class":147},[127,12240,12241],{"class":129,"line":167},[127,12242,12243],{"class":133},"    \u002F\u002F在堆区创建整型数据\n",[127,12245,12246],{"class":129,"line":415},[127,12247,12248],{"class":133},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[127,12250,12251,12253,12255,12257,12260,12262,12264,12266,12268],{"class":129,"line":421},[127,12252,2527],{"class":290},[127,12254,7060],{"class":290},[127,12256,19],{"class":147},[127,12258,12259],{"class":290},"=new",[127,12261,2924],{"class":290},[127,12263,681],{"class":147},[127,12265,1121],{"class":154},[127,12267,6508],{"class":147},[127,12269,12270],{"class":133},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[127,12272,12273],{"class":129,"line":1766},[127,12274,170],{"class":147},[127,12276,12277,12279,12281],{"class":129,"line":1856},[127,12278,5906],{"class":290},[127,12280,6130],{"class":143},[127,12282,2518],{"class":147},[127,12284,12285],{"class":129,"line":1862},[127,12286,2090],{"class":147},[127,12288,12289,12291,12293,12295,12297,12299],{"class":129,"line":1874},[127,12290,2527],{"class":290},[127,12292,7060],{"class":290},[127,12294,19],{"class":147},[127,12296,725],{"class":290},[127,12298,12093],{"class":143},[127,12300,6178],{"class":147},[127,12302,12303,12305,12307,12309,12311],{"class":129,"line":2155},[127,12304,2095],{"class":147},[127,12306,6961],{"class":290},[127,12308,19],{"class":147},[127,12310,1718],{"class":290},[127,12312,1740],{"class":147},[127,12314,12315,12317,12319,12321,12323],{"class":129,"line":2160},[127,12316,2095],{"class":147},[127,12318,6961],{"class":290},[127,12320,19],{"class":147},[127,12322,1718],{"class":290},[127,12324,1740],{"class":147},[127,12326,12327,12329,12331,12333,12335],{"class":129,"line":2166},[127,12328,2095],{"class":147},[127,12330,6961],{"class":290},[127,12332,19],{"class":147},[127,12334,1718],{"class":290},[127,12336,1740],{"class":147},[127,12338,12339],{"class":129,"line":2171},[127,12340,12341],{"class":133},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[127,12343,12344],{"class":129,"line":2185},[127,12345,12346],{"class":133},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[127,12348,12349,12352,12355],{"class":129,"line":2190},[127,12350,12351],{"class":290},"    delete",[127,12353,12354],{"class":147}," p;",[127,12356,12357],{"class":133},"\u002F\u002F删除这块地址\n",[127,12359,12360],{"class":129,"line":2196},[127,12361,170],{"class":147},[127,12363,12364],{"class":129,"line":2217},[127,12365,12366],{"class":133},"\u002F\u002F2.在堆区利用new开辟数组\n",[127,12368,12369,12371,12373],{"class":129,"line":2222},[127,12370,5906],{"class":290},[127,12372,6199],{"class":143},[127,12374,2518],{"class":147},[127,12376,12377],{"class":129,"line":2236},[127,12378,2090],{"class":147},[127,12380,12381],{"class":129,"line":2241},[127,12382,12383],{"class":133},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[127,12385,12386,12388,12390,12392,12394,12396,12398,12400,12403],{"class":129,"line":2270},[127,12387,2527],{"class":290},[127,12389,7060],{"class":290},[127,12391,4422],{"class":147},[127,12393,12259],{"class":290},[127,12395,2924],{"class":290},[127,12397,1564],{"class":147},[127,12399,1121],{"class":154},[127,12401,12402],{"class":147},"];",[127,12404,12405],{"class":133},"\u002F\u002F10代表数组有10个元素\n",[127,12407,12408,12410,12412,12414,12416,12418,12420,12422,12424,12426,12428,12430],{"class":129,"line":2275},[127,12409,3743],{"class":290},[127,12411,2201],{"class":147},[127,12413,684],{"class":290},[127,12415,3574],{"class":147},[127,12417,725],{"class":290},[127,12419,867],{"class":154},[127,12421,3581],{"class":147},[127,12423,1584],{"class":290},[127,12425,1121],{"class":154},[127,12427,3581],{"class":147},[127,12429,2834],{"class":290},[127,12431,687],{"class":147},[127,12433,12434],{"class":129,"line":2292},[127,12435,2572],{"class":147},[127,12437,12438,12441,12443,12445,12447,12449,12451],{"class":129,"line":2297},[127,12439,12440],{"class":147},"        arr[i]",[127,12442,725],{"class":290},[127,12444,1116],{"class":147},[127,12446,1156],{"class":290},[127,12448,986],{"class":154},[127,12450,734],{"class":147},[127,12452,12453],{"class":133},"\u002F\u002F给10个元素赋值100～109\n",[127,12455,12456],{"class":129,"line":2302},[127,12457,2729],{"class":147},[127,12459,12460,12462,12464,12466,12468,12470,12472,12474,12476,12478,12480,12482],{"class":129,"line":2307},[127,12461,3743],{"class":290},[127,12463,2201],{"class":147},[127,12465,684],{"class":290},[127,12467,3574],{"class":147},[127,12469,725],{"class":290},[127,12471,867],{"class":154},[127,12473,3581],{"class":147},[127,12475,1584],{"class":290},[127,12477,1121],{"class":154},[127,12479,3581],{"class":147},[127,12481,2834],{"class":290},[127,12483,687],{"class":147},[127,12485,12486],{"class":129,"line":2321},[127,12487,2572],{"class":147},[127,12489,12490,12492,12494,12496,12498],{"class":129,"line":2326},[127,12491,3993],{"class":147},[127,12493,1718],{"class":290},[127,12495,4896],{"class":147},[127,12497,1718],{"class":290},[127,12499,1740],{"class":147},[127,12501,12502],{"class":129,"line":3119},[127,12503,2729],{"class":147},[127,12505,12506],{"class":129,"line":3133},[127,12507,12508],{"class":133},"    \u002F\u002F释放堆区数组\n",[127,12510,12511],{"class":129,"line":3141},[127,12512,12513],{"class":133},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[127,12515,12516,12519],{"class":129,"line":3146},[127,12517,12518],{"class":290},"    delete[]",[127,12520,12521],{"class":147}," arr;\n",[127,12523,12524],{"class":129,"line":3152},[127,12525,170],{"class":147},[127,12527,12528],{"class":129,"line":3158},[127,12529,2942],{"emptyLinePlaceholder":606},[127,12531,12532,12534,12536],{"class":129,"line":3163},[127,12533,684],{"class":290},[127,12535,2515],{"class":143},[127,12537,2518],{"class":147},[127,12539,12540],{"class":129,"line":8490},[127,12541,2090],{"class":147},[127,12543,12544,12546],{"class":129,"line":8514},[127,12545,6175],{"class":143},[127,12547,6178],{"class":147},[127,12549,12550,12552],{"class":129,"line":8519},[127,12551,6244],{"class":143},[127,12553,6178],{"class":147},[127,12555,12556],{"class":129,"line":8525},[127,12557,170],{"class":147},[575,12559,12560],{},"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":122,"searchDepth":137,"depth":137,"links":12562},[12563],{"id":11231,"depth":137,"text":11232,"children":12564},[12565,12566],{"id":11263,"depth":151,"text":11264},{"id":11891,"depth":151,"text":11892},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11223,"description":122},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12573,"title":12574,"body":12575,"description":122,"extension":604,"meta":14056,"navigation":606,"path":14057,"seo":14058,"stem":14059,"__hash__":14060},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12576,"toc":14048},[12577,12580,12584,12587,12590,12759,12763,12768,12785,12790,12942,12946,12949,12952,13346,13350,13353,13358,13361,13673,13677,13683,13843,13845,13853,13857,13860,13867,14045],[10,12578,12574],{"id":12579},"_6引用",[14,12581,12583],{"id":12582},"_61引用基本用法","6.1引用基本用法",[19,12585,12586],{},"引用的本质：给变量起别名",[19,12588,12589],{},"语法：数据类型 &别名=原名",[117,12591,12593],{"className":669,"code":12592,"language":671,"meta":122,"style":122},"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",[124,12594,12595,12603,12607,12619,12631,12635,12654,12673,12677,12688,12692,12711,12729,12733,12743,12747,12755],{"__ignoreMap":122},[127,12596,12597,12599,12601],{"class":129,"line":130},[127,12598,684],{"class":290},[127,12600,2515],{"class":143},[127,12602,11395],{"class":147},[127,12604,12605],{"class":129,"line":137},[127,12606,2942],{"emptyLinePlaceholder":606},[127,12608,12609,12611,12613,12615,12617],{"class":129,"line":151},[127,12610,2527],{"class":290},[127,12612,11411],{"class":147},[127,12614,725],{"class":290},[127,12616,2580],{"class":154},[127,12618,164],{"class":147},[127,12620,12621,12623,12625,12627,12629],{"class":129,"line":167},[127,12622,2527],{"class":290},[127,12624,11126],{"class":290},[127,12626,11487],{"class":147},[127,12628,725],{"class":290},[127,12630,1977],{"class":147},[127,12632,12633],{"class":129,"line":415},[127,12634,2942],{"emptyLinePlaceholder":606},[127,12636,12637,12639,12641,12644,12646,12648,12650,12652],{"class":129,"line":421},[127,12638,7071],{"class":147},[127,12640,1718],{"class":290},[127,12642,12643],{"class":781}," \"a = \"",[127,12645,1989],{"class":290},[127,12647,11411],{"class":147},[127,12649,1718],{"class":290},[127,12651,12011],{"class":147},[127,12653,7810],{"class":133},[127,12655,12656,12658,12660,12663,12665,12667,12669,12671],{"class":129,"line":1766},[127,12657,7071],{"class":147},[127,12659,1718],{"class":290},[127,12661,12662],{"class":781}," \"b = \"",[127,12664,1989],{"class":290},[127,12666,11424],{"class":147},[127,12668,1718],{"class":290},[127,12670,12011],{"class":147},[127,12672,7810],{"class":133},[127,12674,12675],{"class":129,"line":1856},[127,12676,2942],{"emptyLinePlaceholder":606},[127,12678,12679,12682,12684,12686],{"class":129,"line":1862},[127,12680,12681],{"class":147},"    b ",[127,12683,725],{"class":290},[127,12685,6296],{"class":154},[127,12687,164],{"class":147},[127,12689,12690],{"class":129,"line":1874},[127,12691,2942],{"emptyLinePlaceholder":606},[127,12693,12694,12696,12698,12700,12702,12704,12706,12708],{"class":129,"line":2155},[127,12695,7071],{"class":147},[127,12697,1718],{"class":290},[127,12699,12643],{"class":781},[127,12701,1989],{"class":290},[127,12703,11411],{"class":147},[127,12705,1718],{"class":290},[127,12707,12011],{"class":147},[127,12709,12710],{"class":133},"\u002F\u002F100\n",[127,12712,12713,12715,12717,12719,12721,12723,12725,12727],{"class":129,"line":2160},[127,12714,7071],{"class":147},[127,12716,1718],{"class":290},[127,12718,12662],{"class":781},[127,12720,1989],{"class":290},[127,12722,11424],{"class":147},[127,12724,1718],{"class":290},[127,12726,12011],{"class":147},[127,12728,12710],{"class":133},[127,12730,12731],{"class":129,"line":2166},[127,12732,2942],{"emptyLinePlaceholder":606},[127,12734,12735,12737,12739,12741],{"class":129,"line":2171},[127,12736,2845],{"class":143},[127,12738,681],{"class":147},[127,12740,2850],{"class":781},[127,12742,3261],{"class":147},[127,12744,12745],{"class":129,"line":2185},[127,12746,2942],{"emptyLinePlaceholder":606},[127,12748,12749,12751,12753],{"class":129,"line":2190},[127,12750,4632],{"class":290},[127,12752,4635],{"class":154},[127,12754,164],{"class":147},[127,12756,12757],{"class":129,"line":2196},[127,12758,170],{"class":147},[14,12760,12762],{"id":12761},"_62引用的注意事项","6.2引用的注意事项",[632,12764,12765],{},[635,12766,12767],{},"引用必须要初始化",[117,12769,12771],{"className":669,"code":12770,"language":671,"meta":122,"style":122},"int &b;\u002F\u002F非常错误！\n",[124,12772,12773],{"__ignoreMap":122},[127,12774,12775,12777,12779,12782],{"class":129,"line":130},[127,12776,684],{"class":290},[127,12778,11126],{"class":290},[127,12780,12781],{"class":147},"b;",[127,12783,12784],{"class":133},"\u002F\u002F非常错误！\n",[632,12786,12787],{"start":137},[635,12788,12789],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[117,12791,12793],{"className":669,"code":12792,"language":671,"meta":122,"style":122},"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",[124,12794,12795,12803,12815,12827,12835,12851,12864,12882,12900,12920,12930,12938],{"__ignoreMap":122},[127,12796,12797,12799,12801],{"class":129,"line":130},[127,12798,684],{"class":290},[127,12800,2515],{"class":143},[127,12802,11395],{"class":147},[127,12804,12805,12807,12809,12811,12813],{"class":129,"line":137},[127,12806,2527],{"class":290},[127,12808,11411],{"class":147},[127,12810,725],{"class":290},[127,12812,2580],{"class":154},[127,12814,164],{"class":147},[127,12816,12817,12819,12821,12823,12825],{"class":129,"line":151},[127,12818,2527],{"class":290},[127,12820,11424],{"class":147},[127,12822,725],{"class":290},[127,12824,9492],{"class":154},[127,12826,164],{"class":147},[127,12828,12829,12832],{"class":129,"line":167},[127,12830,12831],{"class":133},"    \u002F\u002Fint &c;",[127,12833,12834],{"class":133}," \u002F\u002F错误，引用必须初始化\n",[127,12836,12837,12839,12841,12843,12845,12848],{"class":129,"line":415},[127,12838,2527],{"class":290},[127,12840,11126],{"class":290},[127,12842,3488],{"class":147},[127,12844,725],{"class":290},[127,12846,12847],{"class":147}," a;",[127,12849,12850],{"class":133}," \u002F\u002F一旦初始化后，就不可以更改\n",[127,12852,12853,12856,12858,12861],{"class":129,"line":421},[127,12854,12855],{"class":147},"    c ",[127,12857,725],{"class":290},[127,12859,12860],{"class":147}," b;",[127,12862,12863],{"class":133}," \u002F\u002F这是赋值操作，不是更改引用\n",[127,12865,12866,12868,12870,12872,12874,12876,12878,12880],{"class":129,"line":1766},[127,12867,7071],{"class":147},[127,12869,1718],{"class":290},[127,12871,12643],{"class":781},[127,12873,1989],{"class":290},[127,12875,11411],{"class":147},[127,12877,1718],{"class":290},[127,12879,12011],{"class":147},[127,12881,7795],{"class":133},[127,12883,12884,12886,12888,12890,12892,12894,12896,12898],{"class":129,"line":1856},[127,12885,7071],{"class":147},[127,12887,1718],{"class":290},[127,12889,12662],{"class":781},[127,12891,1989],{"class":290},[127,12893,11424],{"class":147},[127,12895,1718],{"class":290},[127,12897,12011],{"class":147},[127,12899,7795],{"class":133},[127,12901,12902,12904,12906,12909,12911,12914,12916,12918],{"class":129,"line":1862},[127,12903,7071],{"class":147},[127,12905,1718],{"class":290},[127,12907,12908],{"class":781}," \"c = \"",[127,12910,1989],{"class":290},[127,12912,12913],{"class":147}," c ",[127,12915,1718],{"class":290},[127,12917,12011],{"class":147},[127,12919,7795],{"class":133},[127,12921,12922,12924,12926,12928],{"class":129,"line":1874},[127,12923,2845],{"class":143},[127,12925,681],{"class":147},[127,12927,2850],{"class":781},[127,12929,3261],{"class":147},[127,12931,12932,12934,12936],{"class":129,"line":2155},[127,12933,4632],{"class":290},[127,12935,4635],{"class":154},[127,12937,164],{"class":147},[127,12939,12940],{"class":129,"line":2160},[127,12941,170],{"class":147},[14,12943,12945],{"id":12944},"_63引用做函数参数","6.3引用做函数参数",[19,12947,12948],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12950,12951],{},"优点：可以简化指针修改实参",[117,12953,12955],{"className":669,"code":12954,"language":671,"meta":122,"style":122},"\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",[124,12956,12957,12962,12985,12996,13006,13015,13019,13023,13028,13050,13062,13074,13084,13088,13092,13097,13119,13129,13137,13145,13149,13153,13161,13165,13177,13189,13193,13204,13230,13234,13254,13278,13282,13292,13316,13320,13330,13334,13342],{"__ignoreMap":122},[127,12958,12959],{"class":129,"line":130},[127,12960,12961],{"class":133},"\u002F\u002F1. 值传递\n",[127,12963,12964,12966,12969,12971,12973,12975,12978,12980,12982],{"class":129,"line":137},[127,12965,5906],{"class":290},[127,12967,12968],{"class":143}," mySwap01",[127,12970,681],{"class":147},[127,12972,684],{"class":290},[127,12974,1943],{"class":5758},[127,12976,12977],{"class":147},", ",[127,12979,684],{"class":290},[127,12981,3375],{"class":5758},[127,12983,12984],{"class":147},") {\n",[127,12986,12987,12989,12992,12994],{"class":129,"line":151},[127,12988,2527],{"class":290},[127,12990,12991],{"class":147}," temp ",[127,12993,725],{"class":290},[127,12995,1977],{"class":147},[127,12997,12998,13001,13003],{"class":129,"line":167},[127,12999,13000],{"class":147},"    a ",[127,13002,725],{"class":290},[127,13004,13005],{"class":147}," b;\n",[127,13007,13008,13010,13012],{"class":129,"line":415},[127,13009,12681],{"class":147},[127,13011,725],{"class":290},[127,13013,13014],{"class":147}," temp;\n",[127,13016,13017],{"class":129,"line":421},[127,13018,170],{"class":147},[127,13020,13021],{"class":129,"line":1766},[127,13022,2942],{"emptyLinePlaceholder":606},[127,13024,13025],{"class":129,"line":1856},[127,13026,13027],{"class":133},"\u002F\u002F2. 地址传递\n",[127,13029,13030,13032,13035,13037,13040,13042,13044,13046,13048],{"class":129,"line":1862},[127,13031,5906],{"class":290},[127,13033,13034],{"class":143}," mySwap02",[127,13036,681],{"class":147},[127,13038,13039],{"class":290},"int*",[127,13041,1943],{"class":5758},[127,13043,12977],{"class":147},[127,13045,13039],{"class":290},[127,13047,3375],{"class":5758},[127,13049,12984],{"class":147},[127,13051,13052,13054,13056,13058,13060],{"class":129,"line":1874},[127,13053,2527],{"class":290},[127,13055,12991],{"class":147},[127,13057,725],{"class":290},[127,13059,7060],{"class":290},[127,13061,6739],{"class":147},[127,13063,13064,13066,13068,13070,13072],{"class":129,"line":2155},[127,13065,6945],{"class":290},[127,13067,11461],{"class":147},[127,13069,725],{"class":290},[127,13071,7060],{"class":290},[127,13073,6611],{"class":147},[127,13075,13076,13078,13080,13082],{"class":129,"line":2160},[127,13077,6945],{"class":290},[127,13079,11487],{"class":147},[127,13081,725],{"class":290},[127,13083,13014],{"class":147},[127,13085,13086],{"class":129,"line":2166},[127,13087,170],{"class":147},[127,13089,13090],{"class":129,"line":2171},[127,13091,2942],{"emptyLinePlaceholder":606},[127,13093,13094],{"class":129,"line":2185},[127,13095,13096],{"class":133},"\u002F\u002F3. 引用传递\n",[127,13098,13099,13101,13104,13106,13109,13111,13113,13115,13117],{"class":129,"line":2190},[127,13100,5906],{"class":290},[127,13102,13103],{"class":143}," mySwap03",[127,13105,681],{"class":147},[127,13107,13108],{"class":290},"int&",[127,13110,1943],{"class":5758},[127,13112,12977],{"class":147},[127,13114,13108],{"class":290},[127,13116,3375],{"class":5758},[127,13118,12984],{"class":147},[127,13120,13121,13123,13125,13127],{"class":129,"line":2196},[127,13122,2527],{"class":290},[127,13124,12991],{"class":147},[127,13126,725],{"class":290},[127,13128,1977],{"class":147},[127,13130,13131,13133,13135],{"class":129,"line":2217},[127,13132,13000],{"class":147},[127,13134,725],{"class":290},[127,13136,13005],{"class":147},[127,13138,13139,13141,13143],{"class":129,"line":2222},[127,13140,12681],{"class":147},[127,13142,725],{"class":290},[127,13144,13014],{"class":147},[127,13146,13147],{"class":129,"line":2236},[127,13148,170],{"class":147},[127,13150,13151],{"class":129,"line":2241},[127,13152,2942],{"emptyLinePlaceholder":606},[127,13154,13155,13157,13159],{"class":129,"line":2270},[127,13156,684],{"class":290},[127,13158,2515],{"class":143},[127,13160,11395],{"class":147},[127,13162,13163],{"class":129,"line":2275},[127,13164,2942],{"emptyLinePlaceholder":606},[127,13166,13167,13169,13171,13173,13175],{"class":129,"line":2292},[127,13168,2527],{"class":290},[127,13170,11411],{"class":147},[127,13172,725],{"class":290},[127,13174,2580],{"class":154},[127,13176,164],{"class":147},[127,13178,13179,13181,13183,13185,13187],{"class":129,"line":2297},[127,13180,2527],{"class":290},[127,13182,11424],{"class":147},[127,13184,725],{"class":290},[127,13186,9492],{"class":154},[127,13188,164],{"class":147},[127,13190,13191],{"class":129,"line":2302},[127,13192,2942],{"emptyLinePlaceholder":606},[127,13194,13195,13198,13201],{"class":129,"line":2307},[127,13196,13197],{"class":143},"    mySwap01",[127,13199,13200],{"class":147},"(a, b);",[127,13202,13203],{"class":133},"\u002F\u002F值传递，形参不会修饰实参\n",[127,13205,13206,13208,13210,13213,13215,13217,13219,13222,13224,13226,13228],{"class":129,"line":2321},[127,13207,7071],{"class":147},[127,13209,1718],{"class":290},[127,13211,13212],{"class":781}," \"a:\"",[127,13214,1989],{"class":290},[127,13216,11411],{"class":147},[127,13218,1718],{"class":290},[127,13220,13221],{"class":781}," \" b:\"",[127,13223,1989],{"class":290},[127,13225,11424],{"class":147},[127,13227,1718],{"class":290},[127,13229,9382],{"class":147},[127,13231,13232],{"class":129,"line":2326},[127,13233,2942],{"emptyLinePlaceholder":606},[127,13235,13236,13239,13241,13243,13246,13248,13251],{"class":129,"line":3119},[127,13237,13238],{"class":143},"    mySwap02",[127,13240,681],{"class":147},[127,13242,1028],{"class":290},[127,13244,13245],{"class":147},"a, ",[127,13247,1028],{"class":290},[127,13249,13250],{"class":147},"b);",[127,13252,13253],{"class":133},"\u002F\u002F地址传递，形参会修饰实参\n",[127,13255,13256,13258,13260,13262,13264,13266,13268,13270,13272,13274,13276],{"class":129,"line":3133},[127,13257,7071],{"class":147},[127,13259,1718],{"class":290},[127,13261,13212],{"class":781},[127,13263,1989],{"class":290},[127,13265,11411],{"class":147},[127,13267,1718],{"class":290},[127,13269,13221],{"class":781},[127,13271,1989],{"class":290},[127,13273,11424],{"class":147},[127,13275,1718],{"class":290},[127,13277,9382],{"class":147},[127,13279,13280],{"class":129,"line":3141},[127,13281,2942],{"emptyLinePlaceholder":606},[127,13283,13284,13287,13289],{"class":129,"line":3146},[127,13285,13286],{"class":143},"    mySwap03",[127,13288,13200],{"class":147},[127,13290,13291],{"class":133},"\u002F\u002F引用传递，形参会修饰实参\n",[127,13293,13294,13296,13298,13300,13302,13304,13306,13308,13310,13312,13314],{"class":129,"line":3152},[127,13295,7071],{"class":147},[127,13297,1718],{"class":290},[127,13299,13212],{"class":781},[127,13301,1989],{"class":290},[127,13303,11411],{"class":147},[127,13305,1718],{"class":290},[127,13307,13221],{"class":781},[127,13309,1989],{"class":290},[127,13311,11424],{"class":147},[127,13313,1718],{"class":290},[127,13315,9382],{"class":147},[127,13317,13318],{"class":129,"line":3158},[127,13319,2942],{"emptyLinePlaceholder":606},[127,13321,13322,13324,13326,13328],{"class":129,"line":3163},[127,13323,2845],{"class":143},[127,13325,681],{"class":147},[127,13327,2850],{"class":781},[127,13329,3261],{"class":147},[127,13331,13332],{"class":129,"line":8490},[127,13333,2942],{"emptyLinePlaceholder":606},[127,13335,13336,13338,13340],{"class":129,"line":8514},[127,13337,4632],{"class":290},[127,13339,4635],{"class":154},[127,13341,164],{"class":147},[127,13343,13344],{"class":129,"line":8519},[127,13345,170],{"class":147},[14,13347,13349],{"id":13348},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13351,13352],{},"作用：引用是可以作为函数的返回值存在的",[19,13354,9567,13355],{},[30,13356,13357],{},"不要返回局部变量引用",[19,13359,13360],{},"用法：函数调用作为左值",[117,13362,13364],{"className":10483,"code":13363,"language":10485,"meta":122,"style":122},"\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",[124,13365,13366,13371,13379,13394,13400,13404,13408,13413,13421,13438,13444,13448,13452,13460,13464,13469,13483,13503,13522,13526,13531,13544,13564,13582,13586,13602,13606,13625,13643,13647,13657,13661,13669],{"__ignoreMap":122},[127,13367,13368],{"class":129,"line":130},[127,13369,13370],{"class":133},"\u002F\u002F返回局部变量引用\n",[127,13372,13373,13375,13377],{"class":129,"line":137},[127,13374,13108],{"class":290},[127,13376,6130],{"class":143},[127,13378,11395],{"class":147},[127,13380,13381,13383,13385,13387,13389,13391],{"class":129,"line":151},[127,13382,2527],{"class":290},[127,13384,11411],{"class":147},[127,13386,725],{"class":290},[127,13388,2580],{"class":154},[127,13390,734],{"class":147},[127,13392,13393],{"class":133}," \u002F\u002F局部变量\n",[127,13395,13396,13398],{"class":129,"line":167},[127,13397,4632],{"class":290},[127,13399,1977],{"class":147},[127,13401,13402],{"class":129,"line":415},[127,13403,170],{"class":147},[127,13405,13406],{"class":129,"line":421},[127,13407,2942],{"emptyLinePlaceholder":606},[127,13409,13410],{"class":129,"line":1766},[127,13411,13412],{"class":133},"\u002F\u002F返回静态变量引用\n",[127,13414,13415,13417,13419],{"class":129,"line":1856},[127,13416,13108],{"class":290},[127,13418,6199],{"class":143},[127,13420,11395],{"class":147},[127,13422,13423,13425,13427,13429,13431,13433,13435],{"class":129,"line":1862},[127,13424,11562],{"class":290},[127,13426,2924],{"class":290},[127,13428,11411],{"class":147},[127,13430,725],{"class":290},[127,13432,9492],{"class":154},[127,13434,734],{"class":147},[127,13436,13437],{"class":133},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[127,13439,13440,13442],{"class":129,"line":1874},[127,13441,4632],{"class":290},[127,13443,1977],{"class":147},[127,13445,13446],{"class":129,"line":2155},[127,13447,170],{"class":147},[127,13449,13450],{"class":129,"line":2160},[127,13451,2942],{"emptyLinePlaceholder":606},[127,13453,13454,13456,13458],{"class":129,"line":2166},[127,13455,684],{"class":290},[127,13457,2515],{"class":143},[127,13459,11395],{"class":147},[127,13461,13462],{"class":129,"line":2171},[127,13463,2942],{"emptyLinePlaceholder":606},[127,13465,13466],{"class":129,"line":2185},[127,13467,13468],{"class":133},"    \u002F\u002F不能返回局部变量的引用\n",[127,13470,13471,13474,13477,13479,13481],{"class":129,"line":2190},[127,13472,13473],{"class":290},"    int&",[127,13475,13476],{"class":147}," ref ",[127,13478,725],{"class":290},[127,13480,6130],{"class":143},[127,13482,6178],{"class":147},[127,13484,13485,13487,13489,13492,13494,13496,13498,13500],{"class":129,"line":2196},[127,13486,7071],{"class":147},[127,13488,1718],{"class":290},[127,13490,13491],{"class":781}," \"ref = \"",[127,13493,1989],{"class":290},[127,13495,13476],{"class":147},[127,13497,1718],{"class":290},[127,13499,12011],{"class":147},[127,13501,13502],{"class":133},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[127,13504,13505,13507,13509,13511,13513,13515,13517,13519],{"class":129,"line":2217},[127,13506,7071],{"class":147},[127,13508,1718],{"class":290},[127,13510,13491],{"class":781},[127,13512,1989],{"class":290},[127,13514,13476],{"class":147},[127,13516,1718],{"class":290},[127,13518,12011],{"class":147},[127,13520,13521],{"class":133},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[127,13523,13524],{"class":129,"line":2222},[127,13525,2942],{"emptyLinePlaceholder":606},[127,13527,13528],{"class":129,"line":2236},[127,13529,13530],{"class":133},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[127,13532,13533,13535,13538,13540,13542],{"class":129,"line":2241},[127,13534,13473],{"class":290},[127,13536,13537],{"class":147}," ref2 ",[127,13539,725],{"class":290},[127,13541,6199],{"class":143},[127,13543,6178],{"class":147},[127,13545,13546,13548,13550,13553,13555,13557,13559,13561],{"class":129,"line":2270},[127,13547,7071],{"class":147},[127,13549,1718],{"class":290},[127,13551,13552],{"class":781}," \"ref2 = \"",[127,13554,1989],{"class":290},[127,13556,13537],{"class":147},[127,13558,1718],{"class":290},[127,13560,12011],{"class":147},[127,13562,13563],{"class":133}," \u002F\u002F20\n",[127,13565,13566,13568,13570,13572,13574,13576,13578,13580],{"class":129,"line":2275},[127,13567,7071],{"class":147},[127,13569,1718],{"class":290},[127,13571,13552],{"class":781},[127,13573,1989],{"class":290},[127,13575,13537],{"class":147},[127,13577,1718],{"class":290},[127,13579,12011],{"class":147},[127,13581,13563],{"class":133},[127,13583,13584],{"class":129,"line":2292},[127,13585,2942],{"emptyLinePlaceholder":606},[127,13587,13588,13590,13593,13595,13597,13599],{"class":129,"line":2297},[127,13589,6244],{"class":143},[127,13591,13592],{"class":147},"() ",[127,13594,725],{"class":290},[127,13596,3541],{"class":154},[127,13598,734],{"class":147},[127,13600,13601],{"class":133},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[127,13603,13604],{"class":129,"line":2302},[127,13605,2942],{"emptyLinePlaceholder":606},[127,13607,13608,13610,13612,13614,13616,13618,13620,13622],{"class":129,"line":2307},[127,13609,7071],{"class":147},[127,13611,1718],{"class":290},[127,13613,13552],{"class":781},[127,13615,1989],{"class":290},[127,13617,13537],{"class":147},[127,13619,1718],{"class":290},[127,13621,12011],{"class":147},[127,13623,13624],{"class":133}," \u002F\u002F1000\n",[127,13626,13627,13629,13631,13633,13635,13637,13639,13641],{"class":129,"line":2321},[127,13628,7071],{"class":147},[127,13630,1718],{"class":290},[127,13632,13552],{"class":781},[127,13634,1989],{"class":290},[127,13636,13537],{"class":147},[127,13638,1718],{"class":290},[127,13640,12011],{"class":147},[127,13642,13624],{"class":133},[127,13644,13645],{"class":129,"line":2326},[127,13646,2942],{"emptyLinePlaceholder":606},[127,13648,13649,13651,13653,13655],{"class":129,"line":3119},[127,13650,2845],{"class":143},[127,13652,681],{"class":147},[127,13654,2850],{"class":781},[127,13656,3261],{"class":147},[127,13658,13659],{"class":129,"line":3133},[127,13660,2942],{"emptyLinePlaceholder":606},[127,13662,13663,13665,13667],{"class":129,"line":3141},[127,13664,4632],{"class":290},[127,13666,4635],{"class":154},[127,13668,164],{"class":147},[127,13670,13671],{"class":129,"line":3146},[127,13672,170],{"class":147},[14,13674,13676],{"id":13675},"_65引用的本质","6.5引用的本质",[19,13678,13679,13680],{},"本质：",[30,13681,13682],{},"引用的本质在c++内部实现是一个指针常量.",[117,13684,13686],{"className":669,"code":13685,"language":671,"meta":122,"style":122},"\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",[124,13687,13688,13693,13709,13723,13727,13736,13748,13753,13758,13769,13782,13786,13802,13819,13823,13831,13839],{"__ignoreMap":122},[127,13689,13690],{"class":129,"line":130},[127,13691,13692],{"class":133},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[127,13694,13695,13697,13699,13701,13703,13706],{"class":129,"line":137},[127,13696,5906],{"class":290},[127,13698,11927],{"class":143},[127,13700,681],{"class":147},[127,13702,13108],{"class":290},[127,13704,13705],{"class":5758}," ref",[127,13707,13708],{"class":147},"){\n",[127,13710,13711,13714,13716,13718,13720],{"class":129,"line":151},[127,13712,13713],{"class":147},"    ref ",[127,13715,725],{"class":290},[127,13717,6296],{"class":154},[127,13719,734],{"class":147},[127,13721,13722],{"class":133}," \u002F\u002F ref是引用，转换为*ref = 100\n",[127,13724,13725],{"class":129,"line":167},[127,13726,170],{"class":147},[127,13728,13729,13731,13733],{"class":129,"line":415},[127,13730,684],{"class":290},[127,13732,2515],{"class":143},[127,13734,13735],{"class":147},"(){\n",[127,13737,13738,13740,13742,13744,13746],{"class":129,"line":421},[127,13739,2527],{"class":290},[127,13741,11411],{"class":147},[127,13743,725],{"class":290},[127,13745,2580],{"class":154},[127,13747,164],{"class":147},[127,13749,13750],{"class":129,"line":1766},[127,13751,13752],{"class":147},"    \n",[127,13754,13755],{"class":129,"line":1856},[127,13756,13757],{"class":133},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[127,13759,13760,13762,13764,13766],{"class":129,"line":1862},[127,13761,13473],{"class":290},[127,13763,13476],{"class":147},[127,13765,725],{"class":290},[127,13767,13768],{"class":147}," a; \n",[127,13770,13771,13773,13775,13777,13779],{"class":129,"line":1874},[127,13772,13713],{"class":147},[127,13774,725],{"class":290},[127,13776,9492],{"class":154},[127,13778,734],{"class":147},[127,13780,13781],{"class":133}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[127,13783,13784],{"class":129,"line":2155},[127,13785,13752],{"class":147},[127,13787,13788,13790,13792,13794,13796,13798,13800],{"class":129,"line":2160},[127,13789,7071],{"class":147},[127,13791,1718],{"class":290},[127,13793,13212],{"class":781},[127,13795,1989],{"class":290},[127,13797,11411],{"class":147},[127,13799,1718],{"class":290},[127,13801,9382],{"class":147},[127,13803,13804,13806,13808,13811,13813,13815,13817],{"class":129,"line":2166},[127,13805,7071],{"class":147},[127,13807,1718],{"class":290},[127,13809,13810],{"class":781}," \"ref:\"",[127,13812,1989],{"class":290},[127,13814,13476],{"class":147},[127,13816,1718],{"class":290},[127,13818,9382],{"class":147},[127,13820,13821],{"class":129,"line":2171},[127,13822,13752],{"class":147},[127,13824,13825,13828],{"class":129,"line":2185},[127,13826,13827],{"class":143},"    func",[127,13829,13830],{"class":147},"(a);\n",[127,13832,13833,13835,13837],{"class":129,"line":2190},[127,13834,4632],{"class":290},[127,13836,4635],{"class":154},[127,13838,164],{"class":147},[127,13840,13841],{"class":129,"line":2196},[127,13842,170],{"class":147},[19,13844,11874],{},[632,13846,13847,13850],{},[635,13848,13849],{},"引用的本质，就是一个指针常量",[635,13851,13852],{},"引用一旦初始化，就不可以发生改变",[14,13854,13856],{"id":13855},"_66常量引用","6.6常量引用",[19,13858,13859],{},"作用：常量引用主要用来修饰形参",[19,13861,13862,13863,13866],{},"在函数形参列表中，可以加",[30,13864,13865],{},"const修饰形参","，防止形参改变实参",[117,13868,13870],{"className":669,"code":13869,"language":671,"meta":122,"style":122},"\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",[124,13871,13872,13877,13882,13901,13906,13919,13923,13927,13935,13939,13944,13949,13963,13967,13975,13987,13991,13996,14008,14015,14019,14029,14033,14041],{"__ignoreMap":122},[127,13873,13874],{"class":129,"line":130},[127,13875,13876],{"class":133},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[127,13878,13879],{"class":129,"line":137},[127,13880,13881],{"class":133},"\u002F\u002F加上const就不能修改实参的\n",[127,13883,13884,13886,13889,13891,13893,13896,13899],{"class":129,"line":151},[127,13885,5906],{"class":290},[127,13887,13888],{"class":143}," showValue",[127,13890,681],{"class":147},[127,13892,7334],{"class":290},[127,13894,13895],{"class":290}," int&",[127,13897,13898],{"class":5758}," v",[127,13900,12984],{"class":147},[127,13902,13903],{"class":129,"line":167},[127,13904,13905],{"class":133},"    \u002F\u002Fv += 100;\n",[127,13907,13908,13910,13912,13915,13917],{"class":129,"line":415},[127,13909,7071],{"class":147},[127,13911,1718],{"class":290},[127,13913,13914],{"class":147}," v ",[127,13916,1718],{"class":290},[127,13918,9382],{"class":147},[127,13920,13921],{"class":129,"line":421},[127,13922,170],{"class":147},[127,13924,13925],{"class":129,"line":1766},[127,13926,2942],{"emptyLinePlaceholder":606},[127,13928,13929,13931,13933],{"class":129,"line":1856},[127,13930,684],{"class":290},[127,13932,2515],{"class":143},[127,13934,11395],{"class":147},[127,13936,13937],{"class":129,"line":1862},[127,13938,2942],{"emptyLinePlaceholder":606},[127,13940,13941],{"class":129,"line":1874},[127,13942,13943],{"class":133},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[127,13945,13946],{"class":129,"line":2155},[127,13947,13948],{"class":133},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[127,13950,13951,13953,13955,13957,13959,13961],{"class":129,"line":2160},[127,13952,11763],{"class":290},[127,13954,13895],{"class":290},[127,13956,13476],{"class":147},[127,13958,725],{"class":290},[127,13960,2580],{"class":154},[127,13962,164],{"class":147},[127,13964,13965],{"class":129,"line":2166},[127,13966,2942],{"emptyLinePlaceholder":606},[127,13968,13969,13972],{"class":129,"line":2171},[127,13970,13971],{"class":133},"    \u002F\u002Fref = 100;",[127,13973,13974],{"class":133},"  \u002F\u002F加入const后不可以修改变量\n",[127,13976,13977,13979,13981,13983,13985],{"class":129,"line":2185},[127,13978,7071],{"class":147},[127,13980,1718],{"class":290},[127,13982,13476],{"class":147},[127,13984,1718],{"class":290},[127,13986,9382],{"class":147},[127,13988,13989],{"class":129,"line":2190},[127,13990,2942],{"emptyLinePlaceholder":606},[127,13992,13993],{"class":129,"line":2196},[127,13994,13995],{"class":133},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[127,13997,13998,14000,14002,14004,14006],{"class":129,"line":2217},[127,13999,2527],{"class":290},[127,14001,11411],{"class":147},[127,14003,725],{"class":290},[127,14005,2580],{"class":154},[127,14007,164],{"class":147},[127,14009,14010,14013],{"class":129,"line":2222},[127,14011,14012],{"class":143},"    showValue",[127,14014,13830],{"class":147},[127,14016,14017],{"class":129,"line":2236},[127,14018,2942],{"emptyLinePlaceholder":606},[127,14020,14021,14023,14025,14027],{"class":129,"line":2241},[127,14022,2845],{"class":143},[127,14024,681],{"class":147},[127,14026,2850],{"class":781},[127,14028,3261],{"class":147},[127,14030,14031],{"class":129,"line":2270},[127,14032,2942],{"emptyLinePlaceholder":606},[127,14034,14035,14037,14039],{"class":129,"line":2275},[127,14036,4632],{"class":290},[127,14038,4635],{"class":154},[127,14040,164],{"class":147},[127,14042,14043],{"class":129,"line":2292},[127,14044,170],{"class":147},[575,14046,14047],{},"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":122,"searchDepth":137,"depth":137,"links":14049},[14050,14051,14052,14053,14054,14055],{"id":12582,"depth":137,"text":12583},{"id":12761,"depth":137,"text":12762},{"id":12944,"depth":137,"text":12945},{"id":13348,"depth":137,"text":13349},{"id":13675,"depth":137,"text":13676},{"id":13855,"depth":137,"text":13856},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12574,"description":122},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14062,"title":14063,"body":14064,"description":122,"extension":604,"meta":15145,"navigation":606,"path":15146,"seo":15147,"stem":15148,"__hash__":15149},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14065,"toc":15137},[14066,14069,14073,14076,14081,14313,14315,14326,14330,14333,14341,14445,14448,14452,14455,14459,14462,14467,14489,14495,14822,14825,14829,14837,15134],[10,14067,14063],{"id":14068},"_7函数高级部分",[14,14070,14072],{"id":14071},"_71函数默认参数","7.1函数默认参数",[19,14074,14075],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14077,5723,14078],{},[124,14079,14080],{}," 返回值类型  函数名 （参数= 默认值）{}",[117,14082,14084],{"className":669,"code":14083,"language":671,"meta":122,"style":122},"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",[124,14085,14086,14121,14136,14140,14144,14149,14154,14183,14203,14213,14217,14221,14229,14233,14261,14283,14287,14297,14301,14309],{"__ignoreMap":122},[127,14087,14088,14090,14092,14094,14096,14098,14100,14102,14104,14107,14109,14111,14113,14115,14117,14119],{"class":129,"line":130},[127,14089,684],{"class":290},[127,14091,11927],{"class":143},[127,14093,681],{"class":147},[127,14095,684],{"class":290},[127,14097,1943],{"class":5758},[127,14099,12977],{"class":147},[127,14101,684],{"class":290},[127,14103,3375],{"class":5758},[127,14105,14106],{"class":290}," =",[127,14108,2580],{"class":154},[127,14110,12977],{"class":147},[127,14112,684],{"class":290},[127,14114,3391],{"class":5758},[127,14116,14106],{"class":290},[127,14118,2580],{"class":154},[127,14120,12984],{"class":147},[127,14122,14123,14125,14127,14129,14131,14133],{"class":129,"line":137},[127,14124,4632],{"class":290},[127,14126,11411],{"class":147},[127,14128,1156],{"class":290},[127,14130,11424],{"class":147},[127,14132,1156],{"class":290},[127,14134,14135],{"class":147}," c;\n",[127,14137,14138],{"class":129,"line":151},[127,14139,170],{"class":147},[127,14141,14142],{"class":129,"line":167},[127,14143,2942],{"emptyLinePlaceholder":606},[127,14145,14146],{"class":129,"line":415},[127,14147,14148],{"class":133},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[127,14150,14151],{"class":129,"line":421},[127,14152,14153],{"class":133},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[127,14155,14156,14158,14161,14163,14165,14167,14169,14171,14173,14175,14177,14179,14181],{"class":129,"line":1766},[127,14157,684],{"class":290},[127,14159,14160],{"class":143}," func2",[127,14162,681],{"class":147},[127,14164,684],{"class":290},[127,14166,1943],{"class":5758},[127,14168,14106],{"class":290},[127,14170,2580],{"class":154},[127,14172,12977],{"class":147},[127,14174,684],{"class":290},[127,14176,3375],{"class":5758},[127,14178,14106],{"class":290},[127,14180,2580],{"class":154},[127,14182,3261],{"class":147},[127,14184,14185,14187,14189,14191,14193,14195,14197,14199,14201],{"class":129,"line":1856},[127,14186,684],{"class":290},[127,14188,14160],{"class":143},[127,14190,681],{"class":147},[127,14192,684],{"class":290},[127,14194,1943],{"class":5758},[127,14196,12977],{"class":147},[127,14198,684],{"class":290},[127,14200,3375],{"class":5758},[127,14202,12984],{"class":147},[127,14204,14205,14207,14209,14211],{"class":129,"line":1862},[127,14206,4632],{"class":290},[127,14208,11411],{"class":147},[127,14210,1156],{"class":290},[127,14212,13005],{"class":147},[127,14214,14215],{"class":129,"line":1874},[127,14216,170],{"class":147},[127,14218,14219],{"class":129,"line":2155},[127,14220,2942],{"emptyLinePlaceholder":606},[127,14222,14223,14225,14227],{"class":129,"line":2160},[127,14224,684],{"class":290},[127,14226,2515],{"class":143},[127,14228,11395],{"class":147},[127,14230,14231],{"class":129,"line":2166},[127,14232,2942],{"emptyLinePlaceholder":606},[127,14234,14235,14237,14239,14242,14244,14246,14248,14250,14252,14254,14257,14259],{"class":129,"line":2171},[127,14236,7071],{"class":147},[127,14238,1718],{"class":290},[127,14240,14241],{"class":781}," \"ret = \"",[127,14243,1989],{"class":290},[127,14245,11927],{"class":143},[127,14247,681],{"class":147},[127,14249,1374],{"class":154},[127,14251,12977],{"class":147},[127,14253,1374],{"class":154},[127,14255,14256],{"class":147},") ",[127,14258,1718],{"class":290},[127,14260,9382],{"class":147},[127,14262,14263,14265,14267,14269,14271,14273,14275,14277,14279,14281],{"class":129,"line":2185},[127,14264,7071],{"class":147},[127,14266,1718],{"class":290},[127,14268,14241],{"class":781},[127,14270,1989],{"class":290},[127,14272,11927],{"class":143},[127,14274,681],{"class":147},[127,14276,986],{"class":154},[127,14278,14256],{"class":147},[127,14280,1718],{"class":290},[127,14282,9382],{"class":147},[127,14284,14285],{"class":129,"line":2190},[127,14286,2942],{"emptyLinePlaceholder":606},[127,14288,14289,14291,14293,14295],{"class":129,"line":2196},[127,14290,2845],{"class":143},[127,14292,681],{"class":147},[127,14294,2850],{"class":781},[127,14296,3261],{"class":147},[127,14298,14299],{"class":129,"line":2217},[127,14300,2942],{"emptyLinePlaceholder":606},[127,14302,14303,14305,14307],{"class":129,"line":2222},[127,14304,4632],{"class":290},[127,14306,4635],{"class":154},[127,14308,164],{"class":147},[127,14310,14311],{"class":129,"line":2236},[127,14312,170],{"class":147},[19,14314,11874],{},[632,14316,14317,14320,14323],{},[635,14318,14319],{},"我传就用我；没传就用你",[635,14321,14322],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[635,14324,14325],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14327,14329],{"id":14328},"_72函数的占位参数","7.2函数的占位参数",[19,14331,14332],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14334,14335,14337,14338],{},[30,14336,5723],{}," ",[124,14339,14340],{},"返回值类型 函数名 (数据类型){}",[117,14342,14344],{"className":669,"code":14343,"language":671,"meta":122,"style":122},"\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",[124,14345,14346,14351,14369,14382,14386,14394,14398,14415,14419,14429,14433,14441],{"__ignoreMap":122},[127,14347,14348],{"class":129,"line":130},[127,14349,14350],{"class":133},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[127,14352,14353,14355,14357,14359,14361,14363,14365,14367],{"class":129,"line":137},[127,14354,5906],{"class":290},[127,14356,11927],{"class":143},[127,14358,681],{"class":147},[127,14360,684],{"class":290},[127,14362,1943],{"class":5758},[127,14364,12977],{"class":147},[127,14366,684],{"class":290},[127,14368,12984],{"class":147},[127,14370,14371,14373,14375,14378,14380],{"class":129,"line":151},[127,14372,7071],{"class":147},[127,14374,1718],{"class":290},[127,14376,14377],{"class":781}," \"this is func\"",[127,14379,1989],{"class":290},[127,14381,9382],{"class":147},[127,14383,14384],{"class":129,"line":167},[127,14385,170],{"class":147},[127,14387,14388,14390,14392],{"class":129,"line":415},[127,14389,684],{"class":290},[127,14391,2515],{"class":143},[127,14393,11395],{"class":147},[127,14395,14396],{"class":129,"line":421},[127,14397,2942],{"emptyLinePlaceholder":606},[127,14399,14400,14402,14404,14406,14408,14410,14412],{"class":129,"line":1766},[127,14401,13827],{"class":143},[127,14403,681],{"class":147},[127,14405,1121],{"class":154},[127,14407,1053],{"class":147},[127,14409,1121],{"class":154},[127,14411,6508],{"class":147},[127,14413,14414],{"class":133}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[127,14416,14417],{"class":129,"line":1856},[127,14418,2942],{"emptyLinePlaceholder":606},[127,14420,14421,14423,14425,14427],{"class":129,"line":1862},[127,14422,2845],{"class":143},[127,14424,681],{"class":147},[127,14426,2850],{"class":781},[127,14428,3261],{"class":147},[127,14430,14431],{"class":129,"line":1874},[127,14432,2942],{"emptyLinePlaceholder":606},[127,14434,14435,14437,14439],{"class":129,"line":2155},[127,14436,4632],{"class":290},[127,14438,4635],{"class":154},[127,14440,164],{"class":147},[127,14442,14443],{"class":129,"line":2160},[127,14444,170],{"class":147},[19,14446,14447],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14449,14451],{"id":14450},"_73函数重载","7.3函数重载",[19,14453,14454],{},"意思是函数名是可以相同的",[62,14456,14458],{"id":14457},"_731基本语法","7.3.1基本语法",[19,14460,14461],{},"作用：函数名可以相同，提高复用性",[19,14463,14464],{},[30,14465,14466],{},"函数重载满足条件：",[1681,14468,14469,14472,14475],{},[635,14470,14471],{},"同一个作用域下",[635,14473,14474],{},"函数名称相同",[635,14476,14477,14478,14481,14482,14485,14486],{},"函数参数",[30,14479,14480],{},"类型不同","  或者 ",[30,14483,14484],{},"个数不同"," 或者 ",[30,14487,14488],{},"顺序不同",[19,14490,14491,14494],{},[30,14492,14493],{},"注意:","  函数的返回值不可以作为函数重载的条件",[117,14496,14498],{"className":10483,"code":14497,"language":10485,"meta":122,"style":122},"\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",[124,14499,14500,14505,14513,14517,14530,14534,14548,14552,14565,14569,14584,14588,14601,14605,14626,14630,14643,14647,14667,14671,14684,14688,14692,14697,14702,14707,14712,14717,14721,14725,14733,14737,14743,14753,14763,14777,14792,14796,14806,14810,14818],{"__ignoreMap":122},[127,14501,14502],{"class":129,"line":130},[127,14503,14504],{"class":133},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[127,14506,14507,14509,14511],{"class":129,"line":137},[127,14508,5906],{"class":290},[127,14510,11927],{"class":143},[127,14512,2518],{"class":147},[127,14514,14515],{"class":129,"line":151},[127,14516,2090],{"class":147},[127,14518,14519,14521,14523,14526,14528],{"class":129,"line":167},[127,14520,7071],{"class":147},[127,14522,1718],{"class":290},[127,14524,14525],{"class":781}," \"func 的调用！\"",[127,14527,1989],{"class":290},[127,14529,9382],{"class":147},[127,14531,14532],{"class":129,"line":415},[127,14533,170],{"class":147},[127,14535,14536,14538,14540,14542,14544,14546],{"class":129,"line":421},[127,14537,5906],{"class":290},[127,14539,11927],{"class":143},[127,14541,681],{"class":147},[127,14543,684],{"class":290},[127,14545,1943],{"class":5758},[127,14547,687],{"class":147},[127,14549,14550],{"class":129,"line":1766},[127,14551,2090],{"class":147},[127,14553,14554,14556,14558,14561,14563],{"class":129,"line":1856},[127,14555,7071],{"class":147},[127,14557,1718],{"class":290},[127,14559,14560],{"class":781}," \"func (int a) 的调用！\"",[127,14562,1989],{"class":290},[127,14564,9382],{"class":147},[127,14566,14567],{"class":129,"line":1862},[127,14568,170],{"class":147},[127,14570,14571,14573,14575,14577,14580,14582],{"class":129,"line":1874},[127,14572,5906],{"class":290},[127,14574,11927],{"class":143},[127,14576,681],{"class":147},[127,14578,14579],{"class":290},"double",[127,14581,1943],{"class":5758},[127,14583,687],{"class":147},[127,14585,14586],{"class":129,"line":2155},[127,14587,2090],{"class":147},[127,14589,14590,14592,14594,14597,14599],{"class":129,"line":2160},[127,14591,7071],{"class":147},[127,14593,1718],{"class":290},[127,14595,14596],{"class":781}," \"func (double a)的调用！\"",[127,14598,1989],{"class":290},[127,14600,9382],{"class":147},[127,14602,14603],{"class":129,"line":2166},[127,14604,170],{"class":147},[127,14606,14607,14609,14611,14613,14615,14617,14620,14622,14624],{"class":129,"line":2171},[127,14608,5906],{"class":290},[127,14610,11927],{"class":143},[127,14612,681],{"class":147},[127,14614,684],{"class":290},[127,14616,1943],{"class":5758},[127,14618,14619],{"class":147}," ,",[127,14621,14579],{"class":290},[127,14623,3375],{"class":5758},[127,14625,687],{"class":147},[127,14627,14628],{"class":129,"line":2185},[127,14629,2090],{"class":147},[127,14631,14632,14634,14636,14639,14641],{"class":129,"line":2190},[127,14633,7071],{"class":147},[127,14635,1718],{"class":290},[127,14637,14638],{"class":781}," \"func (int a ,double b) 的调用！\"",[127,14640,1989],{"class":290},[127,14642,9382],{"class":147},[127,14644,14645],{"class":129,"line":2196},[127,14646,170],{"class":147},[127,14648,14649,14651,14653,14655,14657,14659,14661,14663,14665],{"class":129,"line":2217},[127,14650,5906],{"class":290},[127,14652,11927],{"class":143},[127,14654,681],{"class":147},[127,14656,14579],{"class":290},[127,14658,1943],{"class":5758},[127,14660,14619],{"class":147},[127,14662,684],{"class":290},[127,14664,3375],{"class":5758},[127,14666,687],{"class":147},[127,14668,14669],{"class":129,"line":2222},[127,14670,2090],{"class":147},[127,14672,14673,14675,14677,14680,14682],{"class":129,"line":2236},[127,14674,7071],{"class":147},[127,14676,1718],{"class":290},[127,14678,14679],{"class":781}," \"func (double a ,int b)的调用！\"",[127,14681,1989],{"class":290},[127,14683,9382],{"class":147},[127,14685,14686],{"class":129,"line":2241},[127,14687,170],{"class":147},[127,14689,14690],{"class":129,"line":2270},[127,14691,2942],{"emptyLinePlaceholder":606},[127,14693,14694],{"class":129,"line":2275},[127,14695,14696],{"class":133},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[127,14698,14699],{"class":129,"line":2292},[127,14700,14701],{"class":133},"\u002F\u002Fint func(double a, int b)\n",[127,14703,14704],{"class":129,"line":2297},[127,14705,14706],{"class":133},"\u002F\u002F{\n",[127,14708,14709],{"class":129,"line":2302},[127,14710,14711],{"class":133},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[127,14713,14714],{"class":129,"line":2307},[127,14715,14716],{"class":133},"\u002F\u002F}\n",[127,14718,14719],{"class":129,"line":2321},[127,14720,2942],{"emptyLinePlaceholder":606},[127,14722,14723],{"class":129,"line":2326},[127,14724,2942],{"emptyLinePlaceholder":606},[127,14726,14727,14729,14731],{"class":129,"line":3119},[127,14728,684],{"class":290},[127,14730,2515],{"class":143},[127,14732,11395],{"class":147},[127,14734,14735],{"class":129,"line":3133},[127,14736,2942],{"emptyLinePlaceholder":606},[127,14738,14739,14741],{"class":129,"line":3141},[127,14740,13827],{"class":143},[127,14742,6178],{"class":147},[127,14744,14745,14747,14749,14751],{"class":129,"line":3146},[127,14746,13827],{"class":143},[127,14748,681],{"class":147},[127,14750,1121],{"class":154},[127,14752,3261],{"class":147},[127,14754,14755,14757,14759,14761],{"class":129,"line":3152},[127,14756,13827],{"class":143},[127,14758,681],{"class":147},[127,14760,728],{"class":154},[127,14762,3261],{"class":147},[127,14764,14765,14767,14769,14771,14773,14775],{"class":129,"line":3158},[127,14766,13827],{"class":143},[127,14768,681],{"class":147},[127,14770,1121],{"class":154},[127,14772,1053],{"class":147},[127,14774,728],{"class":154},[127,14776,3261],{"class":147},[127,14778,14779,14781,14783,14785,14788,14790],{"class":129,"line":3163},[127,14780,13827],{"class":143},[127,14782,681],{"class":147},[127,14784,728],{"class":154},[127,14786,14787],{"class":147}," , ",[127,14789,1121],{"class":154},[127,14791,3261],{"class":147},[127,14793,14794],{"class":129,"line":8490},[127,14795,13752],{"class":147},[127,14797,14798,14800,14802,14804],{"class":129,"line":8514},[127,14799,2845],{"class":143},[127,14801,681],{"class":147},[127,14803,2850],{"class":781},[127,14805,3261],{"class":147},[127,14807,14808],{"class":129,"line":8519},[127,14809,2942],{"emptyLinePlaceholder":606},[127,14811,14812,14814,14816],{"class":129,"line":8525},[127,14813,4632],{"class":290},[127,14815,4635],{"class":154},[127,14817,164],{"class":147},[127,14819,14820],{"class":129,"line":8552},[127,14821,170],{"class":147},[19,14823,14824],{},"重点：函数返回值不可以作为函数重载条件！",[62,14826,14828],{"id":14827},"_732注意事项","7.3.2注意事项",[1681,14830,14831,14834],{},[635,14832,14833],{},"引用作为重载条件!!!",[635,14835,14836],{},"函数重载碰到函数默认参数",[117,14838,14840],{"className":669,"code":14839,"language":671,"meta":122,"style":122},"\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",[124,14841,14842,14847,14852,14856,14872,14876,14889,14893,14897,14915,14919,14932,14936,14940,14944,14949,14953,14977,14981,14994,14998,15002,15016,15020,15033,15037,15041,15049,15053,15065,15075,15088,15092,15096,15104,15108,15118,15122,15130],{"__ignoreMap":122},[127,14843,14844],{"class":129,"line":130},[127,14845,14846],{"class":133},"\u002F\u002F函数重载注意事项\n",[127,14848,14849],{"class":129,"line":137},[127,14850,14851],{"class":133},"\u002F\u002F1、引用作为重载条件\n",[127,14853,14854],{"class":129,"line":151},[127,14855,2942],{"emptyLinePlaceholder":606},[127,14857,14858,14860,14862,14864,14866,14868,14870],{"class":129,"line":167},[127,14859,5906],{"class":290},[127,14861,11927],{"class":143},[127,14863,681],{"class":147},[127,14865,684],{"class":290},[127,14867,11126],{"class":290},[127,14869,457],{"class":5758},[127,14871,687],{"class":147},[127,14873,14874],{"class":129,"line":415},[127,14875,2090],{"class":147},[127,14877,14878,14880,14882,14885,14887],{"class":129,"line":421},[127,14879,7071],{"class":147},[127,14881,1718],{"class":290},[127,14883,14884],{"class":781}," \"func (int &a) 调用 \"",[127,14886,1989],{"class":290},[127,14888,9382],{"class":147},[127,14890,14891],{"class":129,"line":1766},[127,14892,170],{"class":147},[127,14894,14895],{"class":129,"line":1856},[127,14896,2942],{"emptyLinePlaceholder":606},[127,14898,14899,14901,14903,14905,14907,14909,14911,14913],{"class":129,"line":1862},[127,14900,5906],{"class":290},[127,14902,11927],{"class":143},[127,14904,681],{"class":147},[127,14906,7334],{"class":290},[127,14908,2924],{"class":290},[127,14910,11126],{"class":290},[127,14912,457],{"class":5758},[127,14914,687],{"class":147},[127,14916,14917],{"class":129,"line":1874},[127,14918,2090],{"class":147},[127,14920,14921,14923,14925,14928,14930],{"class":129,"line":2155},[127,14922,7071],{"class":147},[127,14924,1718],{"class":290},[127,14926,14927],{"class":781}," \"func (const int &a) 调用 \"",[127,14929,1989],{"class":290},[127,14931,9382],{"class":147},[127,14933,14934],{"class":129,"line":2160},[127,14935,170],{"class":147},[127,14937,14938],{"class":129,"line":2166},[127,14939,2942],{"emptyLinePlaceholder":606},[127,14941,14942],{"class":129,"line":2171},[127,14943,2942],{"emptyLinePlaceholder":606},[127,14945,14946],{"class":129,"line":2185},[127,14947,14948],{"class":133},"\u002F\u002F2、函数重载碰到函数默认参数\n",[127,14950,14951],{"class":129,"line":2190},[127,14952,2942],{"emptyLinePlaceholder":606},[127,14954,14955,14957,14959,14961,14963,14965,14967,14969,14971,14973,14975],{"class":129,"line":2196},[127,14956,5906],{"class":290},[127,14958,14160],{"class":143},[127,14960,681],{"class":147},[127,14962,684],{"class":290},[127,14964,1943],{"class":5758},[127,14966,12977],{"class":147},[127,14968,684],{"class":290},[127,14970,3375],{"class":5758},[127,14972,14106],{"class":290},[127,14974,2580],{"class":154},[127,14976,687],{"class":147},[127,14978,14979],{"class":129,"line":2217},[127,14980,2090],{"class":147},[127,14982,14983,14985,14987,14990,14992],{"class":129,"line":2222},[127,14984,7071],{"class":147},[127,14986,1718],{"class":290},[127,14988,14989],{"class":781}," \"func2(int a, int b = 10) 调用\"",[127,14991,1989],{"class":290},[127,14993,9382],{"class":147},[127,14995,14996],{"class":129,"line":2236},[127,14997,170],{"class":147},[127,14999,15000],{"class":129,"line":2241},[127,15001,2942],{"emptyLinePlaceholder":606},[127,15003,15004,15006,15008,15010,15012,15014],{"class":129,"line":2270},[127,15005,5906],{"class":290},[127,15007,14160],{"class":143},[127,15009,681],{"class":147},[127,15011,684],{"class":290},[127,15013,1943],{"class":5758},[127,15015,687],{"class":147},[127,15017,15018],{"class":129,"line":2275},[127,15019,2090],{"class":147},[127,15021,15022,15024,15026,15029,15031],{"class":129,"line":2292},[127,15023,7071],{"class":147},[127,15025,1718],{"class":290},[127,15027,15028],{"class":781}," \"func2(int a) 调用\"",[127,15030,1989],{"class":290},[127,15032,9382],{"class":147},[127,15034,15035],{"class":129,"line":2297},[127,15036,170],{"class":147},[127,15038,15039],{"class":129,"line":2302},[127,15040,2942],{"emptyLinePlaceholder":606},[127,15042,15043,15045,15047],{"class":129,"line":2307},[127,15044,684],{"class":290},[127,15046,2515],{"class":143},[127,15048,11395],{"class":147},[127,15050,15051],{"class":129,"line":2321},[127,15052,13752],{"class":147},[127,15054,15055,15057,15059,15061,15063],{"class":129,"line":2326},[127,15056,2527],{"class":290},[127,15058,11411],{"class":147},[127,15060,725],{"class":290},[127,15062,2580],{"class":154},[127,15064,164],{"class":147},[127,15066,15067,15069,15072],{"class":129,"line":3119},[127,15068,13827],{"class":143},[127,15070,15071],{"class":147},"(a);",[127,15073,15074],{"class":133}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[127,15076,15077,15079,15081,15083,15085],{"class":129,"line":3133},[127,15078,13827],{"class":143},[127,15080,681],{"class":147},[127,15082,1121],{"class":154},[127,15084,6508],{"class":147},[127,15086,15087],{"class":133},"\u002F\u002F调用有const   10是个常量\n",[127,15089,15090],{"class":129,"line":3141},[127,15091,2942],{"emptyLinePlaceholder":606},[127,15093,15094],{"class":129,"line":3146},[127,15095,2942],{"emptyLinePlaceholder":606},[127,15097,15098,15101],{"class":129,"line":3152},[127,15099,15100],{"class":133},"    \u002F\u002Ffunc2(10);",[127,15102,15103],{"class":133}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[127,15105,15106],{"class":129,"line":3158},[127,15107,2942],{"emptyLinePlaceholder":606},[127,15109,15110,15112,15114,15116],{"class":129,"line":3163},[127,15111,2845],{"class":143},[127,15113,681],{"class":147},[127,15115,2850],{"class":781},[127,15117,3261],{"class":147},[127,15119,15120],{"class":129,"line":8490},[127,15121,2942],{"emptyLinePlaceholder":606},[127,15123,15124,15126,15128],{"class":129,"line":8514},[127,15125,4632],{"class":290},[127,15127,4635],{"class":154},[127,15129,164],{"class":147},[127,15131,15132],{"class":129,"line":8519},[127,15133,170],{"class":147},[575,15135,15136],{},"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":122,"searchDepth":137,"depth":137,"links":15138},[15139,15140,15141],{"id":14071,"depth":137,"text":14072},{"id":14328,"depth":137,"text":14329},{"id":14450,"depth":137,"text":14451,"children":15142},[15143,15144],{"id":14457,"depth":151,"text":14458},{"id":14827,"depth":151,"text":14828},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14063,"description":122},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15151,"title":15152,"body":15153,"description":23906,"extension":604,"meta":23907,"navigation":606,"path":23908,"seo":23909,"stem":23910,"__hash__":23911},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15154,"toc":23887},[15155,15158,15164,15171,15176,15179,15182,15185,15189,15193,15196,15199,15207,15212,15215,15222,15227,15386,15389,15642,15645,15648,15651,15656,15659,15662,15673,15678,15914,15918,15928,15931,15939,16086,16090,16093,16096,16100,16544,16548,16556,16564,17476,17483,17488,18116,18119,18122,18125,18244,18247,18334,18337,18463,18466,18560,18563,18916,18920,18928,18932,18939,18942,18945,18956,18962,18967,18979,18987,19007,19015,19032,19218,19221,19225,19228,19231,19234,19237,19240,19243,19246,19706,19712,19716,19719,19730,20317,20320,20809,20813,20816,20819,20822,20825,20828,20836,21232,21236,21239,21242,21689,21692,21695,21700,21703,21708,21711,21715,21718,21720,21726,21729,22035,22045,22086,22090,22093,22095,22128,22131,22438,22440,22455,22458,22481,22490,22496,22499,22503,22506,22509,22514,22525,22530,22538,22543,22673,22676,22679,22854,22859,23071,23075,23078,23192,23197,23436,23440,23444,23447,23450,23455,23560,23563,23566,23569,23573,23684,23687,23690,23695,23747,23750,23753,23758,23804,23807,23812,23880,23882,23885],[10,15156,15152],{"id":15157},"_8类和对象",[19,15159,15160,15161],{},"C++面向对象的三大特性为",[30,15162,15163],{},"封装、继承、多态",[19,15165,15166,15167,15170],{},"C++认为",[30,15168,15169],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15172,15173],{},[30,15174,15175],{},"例如：",[19,15177,15178],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15180,15181],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15183,15184],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15186,15188],{"id":15187},"_81封装","8.1封装",[62,15190,15192],{"id":15191},"_811封装的意义","8.1.1封装的意义",[19,15194,15195],{},"封装是C++面向对象三大特性之一",[19,15197,15198],{},"封装的意义：",[1681,15200,15201,15204],{},[635,15202,15203],{},"将属性和行为作为一个整体，表现生活中的事物",[635,15205,15206],{},"将属性和行为加以权限控制",[19,15208,15209],{},[30,15210,15211],{},"封装意义一：",[19,15213,15214],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15216,15217,14337,15219],{},[30,15218,5723],{},[124,15220,15221],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[632,15223,15224],{},[635,15225,15226],{},"**示例1：**设计一个圆类，求圆的周长",[117,15228,15230],{"className":669,"code":15229,"language":671,"meta":122,"style":122},"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",[124,15231,15232,15240,15244,15249,15254,15259,15264,15271,15276,15286,15290,15308,15312,15316,15324,15328,15333,15338,15343,15348,15359,15382],{"__ignoreMap":122},[127,15233,15234,15237],{"class":129,"line":130},[127,15235,15236],{"class":290},"class",[127,15238,15239],{"class":143}," Circle\n",[127,15241,15242],{"class":129,"line":137},[127,15243,2090],{"class":147},[127,15245,15246],{"class":129,"line":151},[127,15247,15248],{"class":133},"    \u002F\u002F访问权限\n",[127,15250,15251],{"class":129,"line":167},[127,15252,15253],{"class":133},"    \u002F\u002F公共权限\n",[127,15255,15256],{"class":129,"line":415},[127,15257,15258],{"class":290},"public:\n",[127,15260,15261],{"class":129,"line":421},[127,15262,15263],{"class":133},"    \u002F\u002F属性\n",[127,15265,15266,15268],{"class":129,"line":1766},[127,15267,2527],{"class":290},[127,15269,15270],{"class":147}," m_r;\n",[127,15272,15273],{"class":129,"line":1856},[127,15274,15275],{"class":133},"    \u002F\u002F行为\n",[127,15277,15278,15281,15284],{"class":129,"line":1862},[127,15279,15280],{"class":290},"    double",[127,15282,15283],{"class":143}," calculateZC",[127,15285,2518],{"class":147},[127,15287,15288],{"class":129,"line":1874},[127,15289,2572],{"class":147},[127,15291,15292,15295,15298,15300,15303,15305],{"class":129,"line":2155},[127,15293,15294],{"class":290},"        return",[127,15296,15297],{"class":154}," 2",[127,15299,1130],{"class":290},[127,15301,15302],{"class":147},"PI",[127,15304,1130],{"class":290},[127,15306,15307],{"class":147},"m_r;\n",[127,15309,15310],{"class":129,"line":2160},[127,15311,2729],{"class":147},[127,15313,15314],{"class":129,"line":2166},[127,15315,4537],{"class":147},[127,15317,15318,15320,15322],{"class":129,"line":2171},[127,15319,684],{"class":290},[127,15321,2515],{"class":143},[127,15323,2518],{"class":147},[127,15325,15326],{"class":129,"line":2185},[127,15327,2090],{"class":147},[127,15329,15330],{"class":129,"line":2190},[127,15331,15332],{"class":133},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[127,15334,15335],{"class":129,"line":2196},[127,15336,15337],{"class":133},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[127,15339,15340],{"class":129,"line":2217},[127,15341,15342],{"class":147},"    Circle c1;\n",[127,15344,15345],{"class":129,"line":2222},[127,15346,15347],{"class":133},"    \u002F\u002F给圆对象 的属性进行赋值\n",[127,15349,15350,15353,15355,15357],{"class":129,"line":2236},[127,15351,15352],{"class":147},"    c1.m_r",[127,15354,725],{"class":290},[127,15356,1121],{"class":154},[127,15358,164],{"class":147},[127,15360,15361,15363,15365,15368,15370,15373,15376,15378,15380],{"class":129,"line":2241},[127,15362,2095],{"class":147},[127,15364,1718],{"class":290},[127,15366,15367],{"class":781},"\"圆的周长\"",[127,15369,1718],{"class":290},[127,15371,15372],{"class":147},"c1.",[127,15374,15375],{"class":143},"calculateZC",[127,15377,2969],{"class":147},[127,15379,1718],{"class":290},[127,15381,1740],{"class":147},[127,15383,15384],{"class":129,"line":2270},[127,15385,170],{"class":147},[19,15387,15388],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[117,15390,15392],{"className":669,"code":15391,"language":671,"meta":122,"style":122},"#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",[124,15393,15394,15400,15410,15416,15422,15426,15430,15435,15442,15447,15465,15469,15479,15483,15488,15504,15508,15518,15522,15527,15535,15539,15571,15575,15579,15587,15591,15596,15601,15615,15629,15638],{"__ignoreMap":122},[127,15395,15396,15398],{"class":129,"line":130},[127,15397,2492],{"class":290},[127,15399,2495],{"class":781},[127,15401,15402,15404,15406,15408],{"class":129,"line":137},[127,15403,2500],{"class":290},[127,15405,2503],{"class":290},[127,15407,2506],{"class":143},[127,15409,164],{"class":147},[127,15411,15412,15414],{"class":129,"line":151},[127,15413,2492],{"class":290},[127,15415,8291],{"class":781},[127,15417,15418,15420],{"class":129,"line":167},[127,15419,15236],{"class":290},[127,15421,8304],{"class":143},[127,15423,15424],{"class":129,"line":415},[127,15425,2090],{"class":147},[127,15427,15428],{"class":129,"line":421},[127,15429,15258],{"class":290},[127,15431,15432],{"class":129,"line":1766},[127,15433,15434],{"class":147},"    string m_name;\n",[127,15436,15437,15439],{"class":129,"line":1856},[127,15438,2527],{"class":290},[127,15440,15441],{"class":147}," m_id;\n",[127,15443,15444],{"class":129,"line":1862},[127,15445,15446],{"class":133},"    \u002F\u002F赋值姓名\n",[127,15448,15449,15452,15455,15457,15460,15463],{"class":129,"line":1874},[127,15450,15451],{"class":290},"    void",[127,15453,15454],{"class":143}," setName",[127,15456,681],{"class":147},[127,15458,15459],{"class":143},"string",[127,15461,15462],{"class":5758}," name",[127,15464,687],{"class":147},[127,15466,15467],{"class":129,"line":2155},[127,15468,2572],{"class":147},[127,15470,15471,15474,15476],{"class":129,"line":2160},[127,15472,15473],{"class":147},"        m_name",[127,15475,725],{"class":290},[127,15477,15478],{"class":147},"name;\n",[127,15480,15481],{"class":129,"line":2166},[127,15482,2729],{"class":147},[127,15484,15485],{"class":129,"line":2171},[127,15486,15487],{"class":133},"    \u002F\u002F赋值学号\n",[127,15489,15490,15492,15495,15497,15499,15502],{"class":129,"line":2185},[127,15491,15451],{"class":290},[127,15493,15494],{"class":143}," setId",[127,15496,681],{"class":147},[127,15498,684],{"class":290},[127,15500,15501],{"class":5758}," id",[127,15503,687],{"class":147},[127,15505,15506],{"class":129,"line":2190},[127,15507,2572],{"class":147},[127,15509,15510,15513,15515],{"class":129,"line":2196},[127,15511,15512],{"class":147},"        m_id",[127,15514,725],{"class":290},[127,15516,15517],{"class":147},"id;\n",[127,15519,15520],{"class":129,"line":2217},[127,15521,2729],{"class":147},[127,15523,15524],{"class":129,"line":2222},[127,15525,15526],{"class":133},"    \u002F\u002F打印学生信息\n",[127,15528,15529,15531,15533],{"class":129,"line":2236},[127,15530,15451],{"class":290},[127,15532,10157],{"class":143},[127,15534,2518],{"class":147},[127,15536,15537],{"class":129,"line":2241},[127,15538,2572],{"class":147},[127,15540,15541,15543,15545,15548,15550,15553,15555,15557,15559,15562,15564,15567,15569],{"class":129,"line":2270},[127,15542,3993],{"class":147},[127,15544,1718],{"class":290},[127,15546,15547],{"class":781},"\"姓名：\"",[127,15549,1718],{"class":290},[127,15551,15552],{"class":147},"m_name",[127,15554,1718],{"class":290},[127,15556,4901],{"class":781},[127,15558,1718],{"class":290},[127,15560,15561],{"class":781},"\"学号：\"",[127,15563,1718],{"class":290},[127,15565,15566],{"class":147},"m_id",[127,15568,1718],{"class":290},[127,15570,1740],{"class":147},[127,15572,15573],{"class":129,"line":2275},[127,15574,2729],{"class":147},[127,15576,15577],{"class":129,"line":2292},[127,15578,4537],{"class":147},[127,15580,15581,15583,15585],{"class":129,"line":2297},[127,15582,684],{"class":290},[127,15584,2515],{"class":143},[127,15586,2518],{"class":147},[127,15588,15589],{"class":129,"line":2302},[127,15590,2090],{"class":147},[127,15592,15593],{"class":129,"line":2307},[127,15594,15595],{"class":133},"    \u002F\u002F实例化\n",[127,15597,15598],{"class":129,"line":2321},[127,15599,15600],{"class":147},"    Student s1;\n",[127,15602,15603,15606,15609,15611,15613],{"class":129,"line":2326},[127,15604,15605],{"class":147},"    s1.",[127,15607,15608],{"class":143},"setName",[127,15610,681],{"class":147},[127,15612,8458],{"class":781},[127,15614,3261],{"class":147},[127,15616,15617,15619,15622,15624,15627],{"class":129,"line":3119},[127,15618,15605],{"class":147},[127,15620,15621],{"class":143},"setId",[127,15623,681],{"class":147},[127,15625,15626],{"class":154},"123456",[127,15628,3261],{"class":147},[127,15630,15631,15633,15636],{"class":129,"line":3133},[127,15632,15605],{"class":147},[127,15634,15635],{"class":143},"printInfo",[127,15637,6178],{"class":147},[127,15639,15640],{"class":129,"line":3141},[127,15641,170],{"class":147},[19,15643,15644],{},"类中的属性和行为统称为成员",[19,15646,15647],{},"属性：成员属性(成员变量)",[19,15649,15650],{},"方法：成员函数(成员方法)",[19,15652,15653],{},[30,15654,15655],{},"封装意义二：",[19,15657,15658],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15660,15661],{},"访问权限有三种：",[632,15663,15664,15667,15670],{},[635,15665,15666],{},"public        公共权限",[635,15668,15669],{},"protected 保护权限",[635,15671,15672],{},"private      私有权限",[19,15674,15675],{},[30,15676,15677],{},"示例：",[117,15679,15681],{"className":10483,"code":15680,"language":10485,"meta":122,"style":122},"\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",[124,15682,15683,15688,15693,15698,15703,15707,15714,15718,15723,15727,15732,15736,15741,15746,15751,15755,15760,15765,15772,15776,15780,15788,15792,15803,15815,15827,15831,15835,15839,15847,15851,15856,15868,15876,15884,15888,15898,15902,15910],{"__ignoreMap":122},[127,15684,15685],{"class":129,"line":130},[127,15686,15687],{"class":133},"\u002F\u002F三种权限\n",[127,15689,15690],{"class":129,"line":137},[127,15691,15692],{"class":133},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[127,15694,15695],{"class":129,"line":151},[127,15696,15697],{"class":133},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[127,15699,15700],{"class":129,"line":167},[127,15701,15702],{"class":133},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[127,15704,15705],{"class":129,"line":415},[127,15706,2942],{"emptyLinePlaceholder":606},[127,15708,15709,15711],{"class":129,"line":421},[127,15710,15236],{"class":290},[127,15712,15713],{"class":143}," Person\n",[127,15715,15716],{"class":129,"line":1766},[127,15717,2090],{"class":147},[127,15719,15720],{"class":129,"line":1856},[127,15721,15722],{"class":133},"    \u002F\u002F姓名  公共权限\n",[127,15724,15725],{"class":129,"line":1862},[127,15726,15258],{"class":290},[127,15728,15729],{"class":129,"line":1874},[127,15730,15731],{"class":147},"    string m_Name;\n",[127,15733,15734],{"class":129,"line":2155},[127,15735,2942],{"emptyLinePlaceholder":606},[127,15737,15738],{"class":129,"line":2160},[127,15739,15740],{"class":133},"    \u002F\u002F汽车  保护权限\n",[127,15742,15743],{"class":129,"line":2166},[127,15744,15745],{"class":290},"protected:\n",[127,15747,15748],{"class":129,"line":2171},[127,15749,15750],{"class":147},"    string m_Car;\n",[127,15752,15753],{"class":129,"line":2185},[127,15754,2942],{"emptyLinePlaceholder":606},[127,15756,15757],{"class":129,"line":2190},[127,15758,15759],{"class":133},"    \u002F\u002F银行卡密码  私有权限\n",[127,15761,15762],{"class":129,"line":2196},[127,15763,15764],{"class":290},"private:\n",[127,15766,15767,15769],{"class":129,"line":2217},[127,15768,2527],{"class":290},[127,15770,15771],{"class":147}," m_Password;\n",[127,15773,15774],{"class":129,"line":2222},[127,15775,2942],{"emptyLinePlaceholder":606},[127,15777,15778],{"class":129,"line":2236},[127,15779,15258],{"class":290},[127,15781,15782,15784,15786],{"class":129,"line":2241},[127,15783,15451],{"class":290},[127,15785,11927],{"class":143},[127,15787,2518],{"class":147},[127,15789,15790],{"class":129,"line":2270},[127,15791,2572],{"class":147},[127,15793,15794,15797,15799,15801],{"class":129,"line":2275},[127,15795,15796],{"class":147},"        m_Name ",[127,15798,725],{"class":290},[127,15800,9480],{"class":781},[127,15802,164],{"class":147},[127,15804,15805,15808,15810,15813],{"class":129,"line":2292},[127,15806,15807],{"class":147},"        m_Car ",[127,15809,725],{"class":290},[127,15811,15812],{"class":781}," \"拖拉机\"",[127,15814,164],{"class":147},[127,15816,15817,15820,15822,15825],{"class":129,"line":2297},[127,15818,15819],{"class":147},"        m_Password ",[127,15821,725],{"class":290},[127,15823,15824],{"class":154}," 123456",[127,15826,164],{"class":147},[127,15828,15829],{"class":129,"line":2302},[127,15830,2729],{"class":147},[127,15832,15833],{"class":129,"line":2307},[127,15834,4537],{"class":147},[127,15836,15837],{"class":129,"line":2321},[127,15838,2942],{"emptyLinePlaceholder":606},[127,15840,15841,15843,15845],{"class":129,"line":2326},[127,15842,684],{"class":290},[127,15844,2515],{"class":143},[127,15846,11395],{"class":147},[127,15848,15849],{"class":129,"line":3119},[127,15850,2942],{"emptyLinePlaceholder":606},[127,15852,15853],{"class":129,"line":3133},[127,15854,15855],{"class":147},"    Person p;\n",[127,15857,15858,15861,15863,15866],{"class":129,"line":3141},[127,15859,15860],{"class":147},"    p.m_Name ",[127,15862,725],{"class":290},[127,15864,15865],{"class":781}," \"李四\"",[127,15867,164],{"class":147},[127,15869,15870,15873],{"class":129,"line":3146},[127,15871,15872],{"class":133},"    \u002F\u002Fp.m_Car = \"奔驰\";",[127,15874,15875],{"class":133},"  \u002F\u002F保护权限类外访问不到\n",[127,15877,15878,15881],{"class":129,"line":3152},[127,15879,15880],{"class":133},"    \u002F\u002Fp.m_Password = 123;",[127,15882,15883],{"class":133}," \u002F\u002F私有权限类外访问不到\n",[127,15885,15886],{"class":129,"line":3158},[127,15887,2942],{"emptyLinePlaceholder":606},[127,15889,15890,15892,15894,15896],{"class":129,"line":3163},[127,15891,2845],{"class":143},[127,15893,681],{"class":147},[127,15895,2850],{"class":781},[127,15897,3261],{"class":147},[127,15899,15900],{"class":129,"line":8490},[127,15901,2942],{"emptyLinePlaceholder":606},[127,15903,15904,15906,15908],{"class":129,"line":8514},[127,15905,4632],{"class":290},[127,15907,4635],{"class":154},[127,15909,164],{"class":147},[127,15911,15912],{"class":129,"line":8519},[127,15913,170],{"class":147},[62,15915,15917],{"id":15916},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15919,15920,15921,15924,15925],{},"在C++中 struct和class唯一的",[30,15922,15923],{},"区别","就在于 ",[30,15926,15927],{},"默认的访问权限不同",[19,15929,15930],{},"区别：",[1681,15932,15933,15936],{},[635,15934,15935],{},"struct 默认权限为公共",[635,15937,15938],{},"class   默认权限为私有",[117,15940,15942],{"className":10483,"code":15941,"language":10485,"meta":122,"style":122},"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",[124,15943,15944,15951,15955,15965,15969,15973,15980,15984,15994,15998,16002,16010,16014,16019,16033,16037,16042,16056,16060,16070,16074,16082],{"__ignoreMap":122},[127,15945,15946,15948],{"class":129,"line":130},[127,15947,15236],{"class":290},[127,15949,15950],{"class":143}," C1\n",[127,15952,15953],{"class":129,"line":137},[127,15954,2090],{"class":147},[127,15956,15957,15959,15962],{"class":129,"line":151},[127,15958,2527],{"class":290},[127,15960,15961],{"class":147},"  m_A;",[127,15963,15964],{"class":133}," \u002F\u002F默认是私有权限\n",[127,15966,15967],{"class":129,"line":167},[127,15968,4537],{"class":147},[127,15970,15971],{"class":129,"line":415},[127,15972,2942],{"emptyLinePlaceholder":606},[127,15974,15975,15977],{"class":129,"line":421},[127,15976,8301],{"class":290},[127,15978,15979],{"class":143}," C2\n",[127,15981,15982],{"class":129,"line":1766},[127,15983,2090],{"class":147},[127,15985,15986,15988,15991],{"class":129,"line":1856},[127,15987,2527],{"class":290},[127,15989,15990],{"class":147}," m_A;",[127,15992,15993],{"class":133},"  \u002F\u002F默认是公共权限\n",[127,15995,15996],{"class":129,"line":1862},[127,15997,4537],{"class":147},[127,15999,16000],{"class":129,"line":1874},[127,16001,2942],{"emptyLinePlaceholder":606},[127,16003,16004,16006,16008],{"class":129,"line":2155},[127,16005,684],{"class":290},[127,16007,2515],{"class":143},[127,16009,11395],{"class":147},[127,16011,16012],{"class":129,"line":2160},[127,16013,2942],{"emptyLinePlaceholder":606},[127,16015,16016],{"class":129,"line":2166},[127,16017,16018],{"class":147},"    C1 c1;\n",[127,16020,16021,16024,16026,16028,16030],{"class":129,"line":2171},[127,16022,16023],{"class":147},"    c1.m_A ",[127,16025,725],{"class":290},[127,16027,2580],{"class":154},[127,16029,734],{"class":147},[127,16031,16032],{"class":133}," \u002F\u002F错误，访问权限是私有\n",[127,16034,16035],{"class":129,"line":2185},[127,16036,2942],{"emptyLinePlaceholder":606},[127,16038,16039],{"class":129,"line":2190},[127,16040,16041],{"class":147},"    C2 c2;\n",[127,16043,16044,16047,16049,16051,16053],{"class":129,"line":2196},[127,16045,16046],{"class":147},"    c2.m_A ",[127,16048,725],{"class":290},[127,16050,2580],{"class":154},[127,16052,734],{"class":147},[127,16054,16055],{"class":133}," \u002F\u002F正确，访问权限是公共\n",[127,16057,16058],{"class":129,"line":2217},[127,16059,2942],{"emptyLinePlaceholder":606},[127,16061,16062,16064,16066,16068],{"class":129,"line":2222},[127,16063,2845],{"class":143},[127,16065,681],{"class":147},[127,16067,2850],{"class":781},[127,16069,3261],{"class":147},[127,16071,16072],{"class":129,"line":2236},[127,16073,2942],{"emptyLinePlaceholder":606},[127,16075,16076,16078,16080],{"class":129,"line":2241},[127,16077,4632],{"class":290},[127,16079,4635],{"class":154},[127,16081,164],{"class":147},[127,16083,16084],{"class":129,"line":2270},[127,16085,170],{"class":147},[62,16087,16089],{"id":16088},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16091,16092],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16094,16095],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16097,16098],{},[30,16099,15677],{},[117,16101,16103],{"className":10483,"code":16102,"language":10485,"meta":122,"style":122},"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",[124,16104,16105,16114,16118,16122,16127,16141,16150,16154,16164,16168,16175,16179,16183,16187,16192,16201,16208,16212,16217,16233,16256,16269,16276,16280,16289,16293,16297,16302,16318,16328,16332,16336,16340,16348,16352,16362,16366,16374,16378,16382,16390,16394,16398,16403,16416,16439,16443,16448,16461,16483,16487,16492,16506,16514,16518,16528,16532,16540],{"__ignoreMap":122},[127,16106,16107,16109,16112],{"class":129,"line":130},[127,16108,15236],{"class":290},[127,16110,16111],{"class":143}," Person",[127,16113,148],{"class":147},[127,16115,16116],{"class":129,"line":137},[127,16117,15258],{"class":290},[127,16119,16120],{"class":129,"line":151},[127,16121,2942],{"emptyLinePlaceholder":606},[127,16123,16124],{"class":129,"line":167},[127,16125,16126],{"class":133},"    \u002F\u002F姓名设置可读可写\n",[127,16128,16129,16131,16133,16135,16137,16139],{"class":129,"line":415},[127,16130,15451],{"class":290},[127,16132,15454],{"class":143},[127,16134,681],{"class":147},[127,16136,15459],{"class":143},[127,16138,15462],{"class":5758},[127,16140,12984],{"class":147},[127,16142,16143,16145,16147],{"class":129,"line":421},[127,16144,15796],{"class":147},[127,16146,725],{"class":290},[127,16148,16149],{"class":147}," name;\n",[127,16151,16152],{"class":129,"line":1766},[127,16153,2729],{"class":147},[127,16155,16156,16159,16162],{"class":129,"line":1856},[127,16157,16158],{"class":143},"    string",[127,16160,16161],{"class":143}," getName",[127,16163,2518],{"class":147},[127,16165,16166],{"class":129,"line":1862},[127,16167,2572],{"class":147},[127,16169,16170,16172],{"class":129,"line":1874},[127,16171,15294],{"class":290},[127,16173,16174],{"class":147}," m_Name;\n",[127,16176,16177],{"class":129,"line":2155},[127,16178,2729],{"class":147},[127,16180,16181],{"class":129,"line":2160},[127,16182,2942],{"emptyLinePlaceholder":606},[127,16184,16185],{"class":129,"line":2166},[127,16186,2942],{"emptyLinePlaceholder":606},[127,16188,16189],{"class":129,"line":2171},[127,16190,16191],{"class":133},"    \u002F\u002F获取年龄 \n",[127,16193,16194,16196,16199],{"class":129,"line":2185},[127,16195,2527],{"class":290},[127,16197,16198],{"class":143}," getAge",[127,16200,11395],{"class":147},[127,16202,16203,16205],{"class":129,"line":2190},[127,16204,15294],{"class":290},[127,16206,16207],{"class":147}," m_Age;\n",[127,16209,16210],{"class":129,"line":2196},[127,16211,2729],{"class":147},[127,16213,16214],{"class":129,"line":2217},[127,16215,16216],{"class":133},"    \u002F\u002F设置年龄\n",[127,16218,16219,16221,16224,16226,16228,16231],{"class":129,"line":2222},[127,16220,15451],{"class":290},[127,16222,16223],{"class":143}," setAge",[127,16225,681],{"class":147},[127,16227,684],{"class":290},[127,16229,16230],{"class":5758}," age",[127,16232,12984],{"class":147},[127,16234,16235,16237,16240,16242,16244,16246,16249,16251,16254],{"class":129,"line":2236},[127,16236,3039],{"class":290},[127,16238,16239],{"class":147}," (age ",[127,16241,1584],{"class":290},[127,16243,4635],{"class":154},[127,16245,3797],{"class":290},[127,16247,16248],{"class":147}," age ",[127,16250,1634],{"class":290},[127,16252,16253],{"class":154}," 150",[127,16255,12984],{"class":147},[127,16257,16258,16260,16262,16265,16267],{"class":129,"line":2241},[127,16259,10261],{"class":147},[127,16261,1718],{"class":290},[127,16263,16264],{"class":781}," \"你个老妖精!\"",[127,16266,1989],{"class":290},[127,16268,9382],{"class":147},[127,16270,16271,16274],{"class":129,"line":2270},[127,16272,16273],{"class":290},"            return",[127,16275,164],{"class":147},[127,16277,16278],{"class":129,"line":2275},[127,16279,3071],{"class":147},[127,16281,16282,16285,16287],{"class":129,"line":2292},[127,16283,16284],{"class":147},"        m_Age ",[127,16286,725],{"class":290},[127,16288,8339],{"class":147},[127,16290,16291],{"class":129,"line":2297},[127,16292,2729],{"class":147},[127,16294,16295],{"class":129,"line":2302},[127,16296,2942],{"emptyLinePlaceholder":606},[127,16298,16299],{"class":129,"line":2307},[127,16300,16301],{"class":133},"    \u002F\u002F情人设置为只写\n",[127,16303,16304,16306,16309,16311,16313,16316],{"class":129,"line":2321},[127,16305,15451],{"class":290},[127,16307,16308],{"class":143}," setLover",[127,16310,681],{"class":147},[127,16312,15459],{"class":143},[127,16314,16315],{"class":5758}," lover",[127,16317,12984],{"class":147},[127,16319,16320,16323,16325],{"class":129,"line":2326},[127,16321,16322],{"class":147},"        m_Lover ",[127,16324,725],{"class":290},[127,16326,16327],{"class":147}," lover;\n",[127,16329,16330],{"class":129,"line":3119},[127,16331,2729],{"class":147},[127,16333,16334],{"class":129,"line":3133},[127,16335,2942],{"emptyLinePlaceholder":606},[127,16337,16338],{"class":129,"line":3141},[127,16339,15764],{"class":290},[127,16341,16342,16345],{"class":129,"line":3146},[127,16343,16344],{"class":147},"    string m_Name;",[127,16346,16347],{"class":133}," \u002F\u002F可读可写  姓名\n",[127,16349,16350],{"class":129,"line":3152},[127,16351,13752],{"class":147},[127,16353,16354,16356,16359],{"class":129,"line":3158},[127,16355,2527],{"class":290},[127,16357,16358],{"class":147}," m_Age;",[127,16360,16361],{"class":133}," \u002F\u002F只读  年龄\n",[127,16363,16364],{"class":129,"line":3163},[127,16365,2942],{"emptyLinePlaceholder":606},[127,16367,16368,16371],{"class":129,"line":8490},[127,16369,16370],{"class":147},"    string m_Lover;",[127,16372,16373],{"class":133}," \u002F\u002F只写  情人\n",[127,16375,16376],{"class":129,"line":8514},[127,16377,4537],{"class":147},[127,16379,16380],{"class":129,"line":8519},[127,16381,2942],{"emptyLinePlaceholder":606},[127,16383,16384,16386,16388],{"class":129,"line":8525},[127,16385,684],{"class":290},[127,16387,2515],{"class":143},[127,16389,11395],{"class":147},[127,16391,16392],{"class":129,"line":8552},[127,16393,2942],{"emptyLinePlaceholder":606},[127,16395,16396],{"class":129,"line":8557},[127,16397,15855],{"class":147},[127,16399,16400],{"class":129,"line":8563},[127,16401,16402],{"class":133},"    \u002F\u002F姓名设置\n",[127,16404,16405,16408,16410,16412,16414],{"class":129,"line":8575},[127,16406,16407],{"class":147},"    p.",[127,16409,15608],{"class":143},[127,16411,681],{"class":147},[127,16413,8458],{"class":781},[127,16415,3261],{"class":147},[127,16417,16418,16420,16422,16425,16427,16430,16433,16435,16437],{"class":129,"line":8587},[127,16419,7071],{"class":147},[127,16421,1718],{"class":290},[127,16423,16424],{"class":781}," \"姓名： \"",[127,16426,1989],{"class":290},[127,16428,16429],{"class":147}," p.",[127,16431,16432],{"class":143},"getName",[127,16434,13592],{"class":147},[127,16436,1718],{"class":290},[127,16438,9382],{"class":147},[127,16440,16441],{"class":129,"line":8599},[127,16442,2942],{"emptyLinePlaceholder":606},[127,16444,16445],{"class":129,"line":10258},[127,16446,16447],{"class":133},"    \u002F\u002F年龄设置\n",[127,16449,16450,16452,16455,16457,16459],{"class":129,"line":10283},[127,16451,16407],{"class":147},[127,16453,16454],{"class":143},"setAge",[127,16456,681],{"class":147},[127,16458,1330],{"class":154},[127,16460,3261],{"class":147},[127,16462,16463,16465,16467,16470,16472,16474,16477,16479,16481],{"class":129,"line":10306},[127,16464,7071],{"class":147},[127,16466,1718],{"class":290},[127,16468,16469],{"class":781}," \"年龄： \"",[127,16471,1989],{"class":290},[127,16473,16429],{"class":147},[127,16475,16476],{"class":143},"getAge",[127,16478,13592],{"class":147},[127,16480,1718],{"class":290},[127,16482,9382],{"class":147},[127,16484,16485],{"class":129,"line":10330},[127,16486,2942],{"emptyLinePlaceholder":606},[127,16488,16489],{"class":129,"line":10335},[127,16490,16491],{"class":133},"    \u002F\u002F情人设置\n",[127,16493,16494,16496,16499,16501,16504],{"class":129,"line":10340},[127,16495,16407],{"class":147},[127,16497,16498],{"class":143},"setLover",[127,16500,681],{"class":147},[127,16502,16503],{"class":781},"\"苍井\"",[127,16505,3261],{"class":147},[127,16507,16508,16511],{"class":129,"line":10345},[127,16509,16510],{"class":133},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[127,16512,16513],{"class":133},"  \u002F\u002F只写属性，不可以读取\n",[127,16515,16516],{"class":129,"line":10354},[127,16517,2942],{"emptyLinePlaceholder":606},[127,16519,16520,16522,16524,16526],{"class":129,"line":10359},[127,16521,2845],{"class":143},[127,16523,681],{"class":147},[127,16525,2850],{"class":781},[127,16527,3261],{"class":147},[127,16529,16530],{"class":129,"line":10365},[127,16531,2942],{"emptyLinePlaceholder":606},[127,16533,16534,16536,16538],{"class":129,"line":10386},[127,16535,4632],{"class":290},[127,16537,4635],{"class":154},[127,16539,164],{"class":147},[127,16541,16542],{"class":129,"line":10392},[127,16543,170],{"class":147},[62,16545,16547],{"id":16546},"_814封装案例","8.1.4封装案例",[632,16549,16550],{},[635,16551,16552,16555],{},[30,16553,16554],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1681,16557,16558,16561],{},[635,16559,16560],{},"求出立方体的面积和体积",[635,16562,16563],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[117,16565,16567],{"className":669,"code":16566,"language":671,"meta":122,"style":122},"#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",[124,16568,16569,16575,16585,16592,16596,16600,16605,16635,16639,16649,16659,16669,16673,16682,16686,16722,16726,16735,16739,16755,16759,16764,16773,16777,16784,16788,16797,16801,16808,16812,16821,16825,16832,16836,16841,16858,16862,16908,16912,16921,16925,16929,16933,16942,16946,16950,16955,16959,16965,16971,16977,16981,16985,16990,17012,17016,17070,17074,17082,17086,17091,17096,17109,17116,17132,17143,17149,17172,17178,17201,17215,17235,17241,17252,17275,17297,17302,17308,17322,17335,17340,17354,17359,17365,17370,17384,17389,17394,17408,17420,17425,17438,17443,17448,17453,17466,17471],{"__ignoreMap":122},[127,16570,16571,16573],{"class":129,"line":130},[127,16572,2492],{"class":290},[127,16574,2495],{"class":781},[127,16576,16577,16579,16581,16583],{"class":129,"line":137},[127,16578,2500],{"class":290},[127,16580,2503],{"class":290},[127,16582,2506],{"class":143},[127,16584,164],{"class":147},[127,16586,16587,16589],{"class":129,"line":151},[127,16588,15236],{"class":290},[127,16590,16591],{"class":143}," Cube\n",[127,16593,16594],{"class":129,"line":167},[127,16595,2090],{"class":147},[127,16597,16598],{"class":129,"line":415},[127,16599,15258],{"class":290},[127,16601,16602],{"class":129,"line":421},[127,16603,16604],{"class":133},"    \u002F\u002F输入长宽高\n",[127,16606,16607,16609,16612,16614,16616,16619,16621,16623,16626,16628,16630,16633],{"class":129,"line":1766},[127,16608,15451],{"class":290},[127,16610,16611],{"class":143}," setLwh",[127,16613,681],{"class":147},[127,16615,684],{"class":290},[127,16617,16618],{"class":5758}," l",[127,16620,1053],{"class":147},[127,16622,684],{"class":290},[127,16624,16625],{"class":5758}," w",[127,16627,1053],{"class":147},[127,16629,684],{"class":290},[127,16631,16632],{"class":5758}," h",[127,16634,687],{"class":147},[127,16636,16637],{"class":129,"line":1856},[127,16638,2572],{"class":147},[127,16640,16641,16644,16646],{"class":129,"line":1862},[127,16642,16643],{"class":147},"        m_L",[127,16645,725],{"class":290},[127,16647,16648],{"class":147},"l;\n",[127,16650,16651,16654,16656],{"class":129,"line":1874},[127,16652,16653],{"class":147},"        m_W",[127,16655,725],{"class":290},[127,16657,16658],{"class":147},"w;\n",[127,16660,16661,16664,16666],{"class":129,"line":2155},[127,16662,16663],{"class":147},"        m_H",[127,16665,725],{"class":290},[127,16667,16668],{"class":147},"h;\n",[127,16670,16671],{"class":129,"line":2160},[127,16672,2729],{"class":147},[127,16674,16675,16677,16680],{"class":129,"line":2166},[127,16676,2527],{"class":290},[127,16678,16679],{"class":143}," mianji",[127,16681,2518],{"class":147},[127,16683,16684],{"class":129,"line":2171},[127,16685,2572],{"class":147},[127,16687,16688,16690,16692,16694,16697,16699,16702,16704,16707,16709,16712,16714,16717,16719],{"class":129,"line":2185},[127,16689,15294],{"class":290},[127,16691,15297],{"class":154},[127,16693,1130],{"class":290},[127,16695,16696],{"class":147},"(m_L",[127,16698,1130],{"class":290},[127,16700,16701],{"class":147},"m_W ",[127,16703,1156],{"class":290},[127,16705,16706],{"class":147}," m_L",[127,16708,1130],{"class":290},[127,16710,16711],{"class":147},"m_H ",[127,16713,1156],{"class":290},[127,16715,16716],{"class":147}," m_W",[127,16718,1130],{"class":290},[127,16720,16721],{"class":147},"m_H);\n",[127,16723,16724],{"class":129,"line":2190},[127,16725,2729],{"class":147},[127,16727,16728,16730,16733],{"class":129,"line":2196},[127,16729,2527],{"class":290},[127,16731,16732],{"class":143}," tiji",[127,16734,2518],{"class":147},[127,16736,16737],{"class":129,"line":2217},[127,16738,2572],{"class":147},[127,16740,16741,16743,16745,16747,16750,16752],{"class":129,"line":2222},[127,16742,15294],{"class":290},[127,16744,16706],{"class":147},[127,16746,1130],{"class":290},[127,16748,16749],{"class":147},"m_W",[127,16751,1130],{"class":290},[127,16753,16754],{"class":147},"m_H;\n",[127,16756,16757],{"class":129,"line":2236},[127,16758,2729],{"class":147},[127,16760,16761],{"class":129,"line":2241},[127,16762,16763],{"class":133},"    \u002F\u002F获取长宽高\n",[127,16765,16766,16768,16771],{"class":129,"line":2270},[127,16767,2527],{"class":290},[127,16769,16770],{"class":143}," getLength",[127,16772,2518],{"class":147},[127,16774,16775],{"class":129,"line":2275},[127,16776,2572],{"class":147},[127,16778,16779,16781],{"class":129,"line":2292},[127,16780,15294],{"class":290},[127,16782,16783],{"class":147}," m_L;\n",[127,16785,16786],{"class":129,"line":2297},[127,16787,2729],{"class":147},[127,16789,16790,16792,16795],{"class":129,"line":2302},[127,16791,2527],{"class":290},[127,16793,16794],{"class":143}," getWidth",[127,16796,2518],{"class":147},[127,16798,16799],{"class":129,"line":2307},[127,16800,2572],{"class":147},[127,16802,16803,16805],{"class":129,"line":2321},[127,16804,15294],{"class":290},[127,16806,16807],{"class":147}," m_W;\n",[127,16809,16810],{"class":129,"line":2326},[127,16811,2729],{"class":147},[127,16813,16814,16816,16819],{"class":129,"line":3119},[127,16815,2527],{"class":290},[127,16817,16818],{"class":143}," getHeight",[127,16820,2518],{"class":147},[127,16822,16823],{"class":129,"line":3133},[127,16824,2572],{"class":147},[127,16826,16827,16829],{"class":129,"line":3141},[127,16828,15294],{"class":290},[127,16830,16831],{"class":147}," m_H;\n",[127,16833,16834],{"class":129,"line":3146},[127,16835,2729],{"class":147},[127,16837,16838],{"class":129,"line":3152},[127,16839,16840],{"class":133},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[127,16842,16843,16846,16849,16851,16854,16856],{"class":129,"line":3158},[127,16844,16845],{"class":290},"    bool",[127,16847,16848],{"class":143}," isEqual",[127,16850,681],{"class":147},[127,16852,16853],{"class":143},"Cube",[127,16855,3391],{"class":5758},[127,16857,687],{"class":147},[127,16859,16860],{"class":129,"line":3163},[127,16861,2572],{"class":147},[127,16863,16864,16866,16869,16872,16874,16876,16879,16881,16884,16887,16889,16891,16894,16896,16898,16901,16903,16905],{"class":129,"line":8490},[127,16865,3039],{"class":290},[127,16867,16868],{"class":147}," (c.",[127,16870,16871],{"class":143},"getLength",[127,16873,13592],{"class":147},[127,16875,3491],{"class":290},[127,16877,16878],{"class":147}," m_L ",[127,16880,2258],{"class":290},[127,16882,16883],{"class":147}," c.",[127,16885,16886],{"class":143},"getWidth",[127,16888,13592],{"class":147},[127,16890,3491],{"class":290},[127,16892,16893],{"class":147}," m_W ",[127,16895,2258],{"class":290},[127,16897,16883],{"class":147},[127,16899,16900],{"class":143},"getHeight",[127,16902,13592],{"class":147},[127,16904,3491],{"class":290},[127,16906,16907],{"class":147}," m_H)\n",[127,16909,16910],{"class":129,"line":8514},[127,16911,3052],{"class":147},[127,16913,16914,16916,16919],{"class":129,"line":8519},[127,16915,16273],{"class":290},[127,16917,16918],{"class":154}," true",[127,16920,164],{"class":147},[127,16922,16923],{"class":129,"line":8525},[127,16924,3071],{"class":147},[127,16926,16927],{"class":129,"line":8552},[127,16928,3112],{"class":290},[127,16930,16931],{"class":129,"line":8557},[127,16932,3052],{"class":147},[127,16934,16935,16937,16940],{"class":129,"line":8563},[127,16936,16273],{"class":290},[127,16938,16939],{"class":154}," false",[127,16941,164],{"class":147},[127,16943,16944],{"class":129,"line":8575},[127,16945,3071],{"class":147},[127,16947,16948],{"class":129,"line":8587},[127,16949,2729],{"class":147},[127,16951,16952],{"class":129,"line":8599},[127,16953,16954],{"class":133},"    \u002F\u002F私有属性\n",[127,16956,16957],{"class":129,"line":10258},[127,16958,15764],{"class":290},[127,16960,16961,16963],{"class":129,"line":10283},[127,16962,2527],{"class":290},[127,16964,16783],{"class":147},[127,16966,16967,16969],{"class":129,"line":10306},[127,16968,2527],{"class":290},[127,16970,16807],{"class":147},[127,16972,16973,16975],{"class":129,"line":10330},[127,16974,2527],{"class":290},[127,16976,16831],{"class":147},[127,16978,16979],{"class":129,"line":10335},[127,16980,2942],{"emptyLinePlaceholder":606},[127,16982,16983],{"class":129,"line":10340},[127,16984,4537],{"class":147},[127,16986,16987],{"class":129,"line":10345},[127,16988,16989],{"class":133},"\u002F\u002F全局函数判断两个立方体是否相等\n",[127,16991,16992,16994,16996,16998,17000,17003,17005,17007,17010],{"class":129,"line":10354},[127,16993,1899],{"class":290},[127,16995,16848],{"class":143},[127,16997,681],{"class":147},[127,16999,16853],{"class":143},[127,17001,17002],{"class":5758}," c1",[127,17004,1053],{"class":147},[127,17006,16853],{"class":143},[127,17008,17009],{"class":5758}," c2",[127,17011,687],{"class":147},[127,17013,17014],{"class":129,"line":10359},[127,17015,2090],{"class":147},[127,17017,17018,17020,17023,17025,17027,17029,17032,17034,17037,17039,17041,17043,17045,17047,17049,17051,17053,17055,17057,17059,17061,17063,17065,17067],{"class":129,"line":10365},[127,17019,4632],{"class":290},[127,17021,17022],{"class":147}," (c1.",[127,17024,16871],{"class":143},[127,17026,13592],{"class":147},[127,17028,3491],{"class":290},[127,17030,17031],{"class":147}," c2.",[127,17033,16871],{"class":143},[127,17035,17036],{"class":147},"()) ",[127,17038,2258],{"class":290},[127,17040,17022],{"class":147},[127,17042,16886],{"class":143},[127,17044,13592],{"class":147},[127,17046,3491],{"class":290},[127,17048,17031],{"class":147},[127,17050,16886],{"class":143},[127,17052,17036],{"class":147},[127,17054,2258],{"class":290},[127,17056,17022],{"class":147},[127,17058,16900],{"class":143},[127,17060,13592],{"class":147},[127,17062,3491],{"class":290},[127,17064,17031],{"class":147},[127,17066,16900],{"class":143},[127,17068,17069],{"class":147},"());\n",[127,17071,17072],{"class":129,"line":10386},[127,17073,170],{"class":147},[127,17075,17076,17078,17080],{"class":129,"line":10392},[127,17077,684],{"class":290},[127,17079,2515],{"class":143},[127,17081,2518],{"class":147},[127,17083,17084],{"class":129,"line":10406},[127,17085,2090],{"class":147},[127,17087,17088],{"class":129,"line":10412},[127,17089,17090],{"class":147},"    Cube c1;\n",[127,17092,17093],{"class":129,"line":10439},[127,17094,17095],{"class":133},"    \u002F\u002F输入立方体的长宽高\n",[127,17097,17098,17100,17102,17105,17107],{"class":129,"line":10448},[127,17099,2095],{"class":147},[127,17101,1718],{"class":290},[127,17103,17104],{"class":781},"\"请输入第一个立方体的长、宽、高：\"",[127,17106,1718],{"class":290},[127,17108,1740],{"class":147},[127,17110,17111,17113],{"class":129,"line":10454},[127,17112,2527],{"class":290},[127,17114,17115],{"class":147}," l,w,h,l1,w1,h1;\n",[127,17117,17118,17120,17122,17124,17126,17128,17130],{"class":129,"line":10462},[127,17119,2554],{"class":147},[127,17121,1974],{"class":290},[127,17123,1193],{"class":147},[127,17125,1974],{"class":290},[127,17127,1469],{"class":147},[127,17129,1974],{"class":290},[127,17131,16668],{"class":147},[127,17133,17134,17137,17140],{"class":129,"line":10467},[127,17135,17136],{"class":147},"    c1.",[127,17138,17139],{"class":143},"setLwh",[127,17141,17142],{"class":147},"(l,w,h);\n",[127,17144,17146],{"class":129,"line":17145},66,[127,17147,17148],{"class":133},"    \u002F\u002F面积\n",[127,17150,17152,17154,17156,17159,17161,17163,17166,17168,17170],{"class":129,"line":17151},67,[127,17153,2095],{"class":147},[127,17155,1718],{"class":290},[127,17157,17158],{"class":781},"\"立方体的表面积为：\"",[127,17160,1718],{"class":290},[127,17162,15372],{"class":147},[127,17164,17165],{"class":143},"mianji",[127,17167,2969],{"class":147},[127,17169,1718],{"class":290},[127,17171,1740],{"class":147},[127,17173,17175],{"class":129,"line":17174},68,[127,17176,17177],{"class":133},"    \u002F\u002F体积\n",[127,17179,17181,17183,17185,17188,17190,17192,17195,17197,17199],{"class":129,"line":17180},69,[127,17182,2095],{"class":147},[127,17184,1718],{"class":290},[127,17186,17187],{"class":781},"\"立方体的体积为：\"",[127,17189,1718],{"class":290},[127,17191,15372],{"class":147},[127,17193,17194],{"class":143},"tiji",[127,17196,2969],{"class":147},[127,17198,1718],{"class":290},[127,17200,1740],{"class":147},[127,17202,17204,17206,17208,17211,17213],{"class":129,"line":17203},70,[127,17205,2095],{"class":147},[127,17207,1718],{"class":290},[127,17209,17210],{"class":781},"\"请输入第二个立方体的长、宽、高：\"",[127,17212,1718],{"class":290},[127,17214,1740],{"class":147},[127,17216,17218,17220,17222,17225,17227,17230,17232],{"class":129,"line":17217},71,[127,17219,2554],{"class":147},[127,17221,1974],{"class":290},[127,17223,17224],{"class":147},"l1",[127,17226,1974],{"class":290},[127,17228,17229],{"class":147},"w1",[127,17231,1974],{"class":290},[127,17233,17234],{"class":147},"h1;\n",[127,17236,17238],{"class":129,"line":17237},72,[127,17239,17240],{"class":147},"    Cube c2;\n",[127,17242,17244,17247,17249],{"class":129,"line":17243},73,[127,17245,17246],{"class":147},"    c2.",[127,17248,17139],{"class":143},[127,17250,17251],{"class":147},"(l1,w1,h1);\n",[127,17253,17255,17257,17259,17262,17264,17267,17269,17271,17273],{"class":129,"line":17254},74,[127,17256,2095],{"class":147},[127,17258,1718],{"class":290},[127,17260,17261],{"class":781},"\"第二个立方体的表面积为：\"",[127,17263,1718],{"class":290},[127,17265,17266],{"class":147},"c2.",[127,17268,17165],{"class":143},[127,17270,2969],{"class":147},[127,17272,1718],{"class":290},[127,17274,1740],{"class":147},[127,17276,17278,17280,17282,17285,17287,17289,17291,17293,17295],{"class":129,"line":17277},75,[127,17279,2095],{"class":147},[127,17281,1718],{"class":290},[127,17283,17284],{"class":781},"\"第二个立方体的体积为：\"",[127,17286,1718],{"class":290},[127,17288,17266],{"class":147},[127,17290,17194],{"class":143},[127,17292,2969],{"class":147},[127,17294,1718],{"class":290},[127,17296,1740],{"class":147},[127,17298,17300],{"class":129,"line":17299},76,[127,17301,2942],{"emptyLinePlaceholder":606},[127,17303,17305],{"class":129,"line":17304},77,[127,17306,17307],{"class":133},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[127,17309,17311,17313,17315,17318,17320],{"class":129,"line":17310},78,[127,17312,2095],{"class":147},[127,17314,1718],{"class":290},[127,17316,17317],{"class":781},"\"内部函数判断结果：\"",[127,17319,1718],{"class":290},[127,17321,1740],{"class":147},[127,17323,17325,17327,17329,17332],{"class":129,"line":17324},79,[127,17326,3643],{"class":290},[127,17328,17022],{"class":147},[127,17330,17331],{"class":143},"isEqual",[127,17333,17334],{"class":147},"(c2))\n",[127,17336,17338],{"class":129,"line":17337},80,[127,17339,2572],{"class":147},[127,17341,17343,17345,17347,17350,17352],{"class":129,"line":17342},81,[127,17344,3993],{"class":147},[127,17346,1718],{"class":290},[127,17348,17349],{"class":781},"\"两个立方体相等\"",[127,17351,1718],{"class":290},[127,17353,1740],{"class":147},[127,17355,17357],{"class":129,"line":17356},82,[127,17358,2729],{"class":147},[127,17360,17362],{"class":129,"line":17361},83,[127,17363,17364],{"class":290},"    else\n",[127,17366,17368],{"class":129,"line":17367},84,[127,17369,2572],{"class":147},[127,17371,17373,17375,17377,17380,17382],{"class":129,"line":17372},85,[127,17374,3993],{"class":147},[127,17376,1718],{"class":290},[127,17378,17379],{"class":781},"\"两个立方体不相等\"",[127,17381,1718],{"class":290},[127,17383,1740],{"class":147},[127,17385,17387],{"class":129,"line":17386},86,[127,17388,2729],{"class":147},[127,17390,17392],{"class":129,"line":17391},87,[127,17393,2942],{"emptyLinePlaceholder":606},[127,17395,17397,17399,17401,17404,17406],{"class":129,"line":17396},88,[127,17398,2095],{"class":147},[127,17400,1718],{"class":290},[127,17402,17403],{"class":781},"\"全局函数判断结果：\"",[127,17405,1718],{"class":290},[127,17407,1740],{"class":147},[127,17409,17411,17413,17415,17417],{"class":129,"line":17410},89,[127,17412,3643],{"class":290},[127,17414,2201],{"class":147},[127,17416,17331],{"class":143},[127,17418,17419],{"class":147},"(c1, c2))\n",[127,17421,17423],{"class":129,"line":17422},90,[127,17424,2572],{"class":147},[127,17426,17428,17430,17432,17434,17436],{"class":129,"line":17427},91,[127,17429,3993],{"class":147},[127,17431,1718],{"class":290},[127,17433,17349],{"class":781},[127,17435,1718],{"class":290},[127,17437,1740],{"class":147},[127,17439,17441],{"class":129,"line":17440},92,[127,17442,2729],{"class":147},[127,17444,17446],{"class":129,"line":17445},93,[127,17447,17364],{"class":290},[127,17449,17451],{"class":129,"line":17450},94,[127,17452,2572],{"class":147},[127,17454,17456,17458,17460,17462,17464],{"class":129,"line":17455},95,[127,17457,3993],{"class":147},[127,17459,1718],{"class":290},[127,17461,17379],{"class":781},[127,17463,1718],{"class":290},[127,17465,1740],{"class":147},[127,17467,17469],{"class":129,"line":17468},96,[127,17470,2729],{"class":147},[127,17472,17474],{"class":129,"line":17473},97,[127,17475,170],{"class":147},[632,17477,17478],{"start":137},[635,17479,17480],{},[30,17481,17482],{},"练习案例2：点和圆的关系",[1681,17484,17485],{},[635,17486,17487],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[117,17489,17491],{"className":669,"code":17490,"language":671,"meta":122,"style":122},"#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",[124,17492,17493,17499,17509,17516,17523,17527,17531,17536,17570,17575,17591,17605,17609,17613,17620,17627,17631,17637,17641,17645,17649,17671,17694,17699,17713,17728,17732,17736,17742,17747,17752,17756,17782,17786,17816,17844,17872,17889,17893,17906,17910,17914,17918,17931,17935,17939,17947,17951,17955,17959,17964,17968,17979,17986,17995,18005,18016,18023,18036,18047,18057,18068,18075,18089,18094,18104,18112],{"__ignoreMap":122},[127,17494,17495,17497],{"class":129,"line":130},[127,17496,2492],{"class":290},[127,17498,2495],{"class":781},[127,17500,17501,17503,17505,17507],{"class":129,"line":137},[127,17502,2500],{"class":290},[127,17504,2503],{"class":290},[127,17506,2506],{"class":143},[127,17508,164],{"class":147},[127,17510,17511,17513],{"class":129,"line":151},[127,17512,2492],{"class":290},[127,17514,17515],{"class":781},"\u003Ccmath>\n",[127,17517,17518,17520],{"class":129,"line":167},[127,17519,15236],{"class":290},[127,17521,17522],{"class":143}," Point\n",[127,17524,17525],{"class":129,"line":415},[127,17526,2090],{"class":147},[127,17528,17529],{"class":129,"line":421},[127,17530,15258],{"class":290},[127,17532,17533],{"class":129,"line":1766},[127,17534,17535],{"class":133},"    \u002F\u002F赋值\n",[127,17537,17538,17540,17543,17545,17547,17550,17552,17554,17557,17560,17562,17565,17567],{"class":129,"line":1856},[127,17539,15451],{"class":290},[127,17541,17542],{"class":143}," setPoint",[127,17544,681],{"class":147},[127,17546,14579],{"class":290},[127,17548,17549],{"class":5758}," x",[127,17551,12977],{"class":147},[127,17553,14579],{"class":290},[127,17555,17556],{"class":5758}," y",[127,17558,17559],{"class":147},") { m_x ",[127,17561,725],{"class":290},[127,17563,17564],{"class":147}," x; m_y ",[127,17566,725],{"class":290},[127,17568,17569],{"class":147}," y; }\n",[127,17571,17572],{"class":129,"line":1862},[127,17573,17574],{"class":133},"    \u002F\u002F获取坐标\n",[127,17576,17577,17579,17582,17585,17588],{"class":129,"line":1874},[127,17578,15280],{"class":290},[127,17580,17581],{"class":143}," getX",[127,17583,17584],{"class":147},"() { ",[127,17586,17587],{"class":290},"return",[127,17589,17590],{"class":147}," m_x; }\n",[127,17592,17593,17595,17598,17600,17602],{"class":129,"line":2155},[127,17594,15280],{"class":290},[127,17596,17597],{"class":143}," getY",[127,17599,17584],{"class":147},[127,17601,17587],{"class":290},[127,17603,17604],{"class":147}," m_y; }\n",[127,17606,17607],{"class":129,"line":2160},[127,17608,2942],{"emptyLinePlaceholder":606},[127,17610,17611],{"class":129,"line":2166},[127,17612,15764],{"class":290},[127,17614,17615,17617],{"class":129,"line":2171},[127,17616,15280],{"class":290},[127,17618,17619],{"class":147}," m_x;\n",[127,17621,17622,17624],{"class":129,"line":2185},[127,17623,15280],{"class":290},[127,17625,17626],{"class":147}," m_y;\n",[127,17628,17629],{"class":129,"line":2190},[127,17630,4537],{"class":147},[127,17632,17633,17635],{"class":129,"line":2196},[127,17634,15236],{"class":290},[127,17636,15239],{"class":143},[127,17638,17639],{"class":129,"line":2217},[127,17640,2090],{"class":147},[127,17642,17643],{"class":129,"line":2222},[127,17644,15258],{"class":290},[127,17646,17647],{"class":129,"line":2236},[127,17648,17535],{"class":133},[127,17650,17651,17653,17656,17658,17660,17663,17666,17668],{"class":129,"line":2241},[127,17652,15451],{"class":290},[127,17654,17655],{"class":143}," setRadius",[127,17657,681],{"class":147},[127,17659,14579],{"class":290},[127,17661,17662],{"class":5758}," r",[127,17664,17665],{"class":147},") { m_r ",[127,17667,725],{"class":290},[127,17669,17670],{"class":147}," r; }\n",[127,17672,17673,17675,17678,17680,17683,17686,17689,17691],{"class":129,"line":2270},[127,17674,15451],{"class":290},[127,17676,17677],{"class":143}," setCenter",[127,17679,681],{"class":147},[127,17681,17682],{"class":143},"Point",[127,17684,17685],{"class":5758}," center",[127,17687,17688],{"class":147},") { m_center ",[127,17690,725],{"class":290},[127,17692,17693],{"class":147}," center; }\n",[127,17695,17696],{"class":129,"line":2275},[127,17697,17698],{"class":133},"    \u002F\u002F获取属性\n",[127,17700,17701,17703,17706,17708,17710],{"class":129,"line":2292},[127,17702,15280],{"class":290},[127,17704,17705],{"class":143}," getRadius",[127,17707,17584],{"class":147},[127,17709,17587],{"class":290},[127,17711,17712],{"class":147}," m_r; }\n",[127,17714,17715,17718,17721,17723,17725],{"class":129,"line":2297},[127,17716,17717],{"class":143},"    Point",[127,17719,17720],{"class":143}," getCenter",[127,17722,17584],{"class":147},[127,17724,17587],{"class":290},[127,17726,17727],{"class":147}," m_center; }\n",[127,17729,17730],{"class":129,"line":2302},[127,17731,2942],{"emptyLinePlaceholder":606},[127,17733,17734],{"class":129,"line":2307},[127,17735,15764],{"class":290},[127,17737,17738,17740],{"class":129,"line":2321},[127,17739,15280],{"class":290},[127,17741,15270],{"class":147},[127,17743,17744],{"class":129,"line":2326},[127,17745,17746],{"class":133},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[127,17748,17749],{"class":129,"line":3119},[127,17750,17751],{"class":147},"    Point m_center;\n",[127,17753,17754],{"class":129,"line":3133},[127,17755,4537],{"class":147},[127,17757,17758,17760,17763,17765,17768,17770,17772,17774,17776,17778,17780],{"class":129,"line":3141},[127,17759,5906],{"class":290},[127,17761,17762],{"class":143}," isInCircle",[127,17764,681],{"class":147},[127,17766,17767],{"class":143},"Circle",[127,17769,11126],{"class":290},[127,17771,963],{"class":5758},[127,17773,1053],{"class":147},[127,17775,17682],{"class":143},[127,17777,11126],{"class":290},[127,17779,19],{"class":5758},[127,17781,687],{"class":147},[127,17783,17784],{"class":129,"line":3146},[127,17785,2090],{"class":147},[127,17787,17788,17790,17793,17795,17797,17800,17803,17806,17808,17810,17812,17814],{"class":129,"line":3152},[127,17789,15280],{"class":290},[127,17791,17792],{"class":147}," dx ",[127,17794,725],{"class":290},[127,17796,16883],{"class":147},[127,17798,17799],{"class":143},"getCenter",[127,17801,17802],{"class":147},"().",[127,17804,17805],{"class":143},"getX",[127,17807,13592],{"class":147},[127,17809,1207],{"class":290},[127,17811,16429],{"class":147},[127,17813,17805],{"class":143},[127,17815,6178],{"class":147},[127,17817,17818,17820,17823,17825,17827,17829,17831,17834,17836,17838,17840,17842],{"class":129,"line":3158},[127,17819,15280],{"class":290},[127,17821,17822],{"class":147}," dy ",[127,17824,725],{"class":290},[127,17826,16883],{"class":147},[127,17828,17799],{"class":143},[127,17830,17802],{"class":147},[127,17832,17833],{"class":143},"getY",[127,17835,13592],{"class":147},[127,17837,1207],{"class":290},[127,17839,16429],{"class":147},[127,17841,17833],{"class":143},[127,17843,6178],{"class":147},[127,17845,17846,17848,17851,17853,17856,17859,17861,17863,17865,17867,17869],{"class":129,"line":3163},[127,17847,15280],{"class":290},[127,17849,17850],{"class":147}," distance ",[127,17852,725],{"class":290},[127,17854,17855],{"class":143}," sqrt",[127,17857,17858],{"class":147},"(dx ",[127,17860,1130],{"class":290},[127,17862,17792],{"class":147},[127,17864,1156],{"class":290},[127,17866,17822],{"class":147},[127,17868,1130],{"class":290},[127,17870,17871],{"class":147}," dy);\n",[127,17873,17874,17876,17879,17881,17883,17886],{"class":129,"line":8490},[127,17875,3643],{"class":290},[127,17877,17878],{"class":147}," (distance ",[127,17880,1584],{"class":290},[127,17882,16883],{"class":147},[127,17884,17885],{"class":143},"getRadius",[127,17887,17888],{"class":147},"())\n",[127,17890,17891],{"class":129,"line":8514},[127,17892,2572],{"class":147},[127,17894,17895,17897,17899,17902,17904],{"class":129,"line":8519},[127,17896,10211],{"class":147},[127,17898,1718],{"class":290},[127,17900,17901],{"class":781}," \"点在圆内\"",[127,17903,1989],{"class":290},[127,17905,9382],{"class":147},[127,17907,17908],{"class":129,"line":8525},[127,17909,2729],{"class":147},[127,17911,17912],{"class":129,"line":8552},[127,17913,17364],{"class":290},[127,17915,17916],{"class":129,"line":8557},[127,17917,2572],{"class":147},[127,17919,17920,17922,17924,17927,17929],{"class":129,"line":8563},[127,17921,10211],{"class":147},[127,17923,1718],{"class":290},[127,17925,17926],{"class":781}," \"点在圆外\"",[127,17928,1989],{"class":290},[127,17930,9382],{"class":147},[127,17932,17933],{"class":129,"line":8575},[127,17934,2729],{"class":147},[127,17936,17937],{"class":129,"line":8587},[127,17938,170],{"class":147},[127,17940,17941,17943,17945],{"class":129,"line":8599},[127,17942,684],{"class":290},[127,17944,2515],{"class":143},[127,17946,2518],{"class":147},[127,17948,17949],{"class":129,"line":10258},[127,17950,2090],{"class":147},[127,17952,17953],{"class":129,"line":10283},[127,17954,15595],{"class":133},[127,17956,17957],{"class":129,"line":10306},[127,17958,15342],{"class":147},[127,17960,17961],{"class":129,"line":10330},[127,17962,17963],{"class":147},"    Point p1;\n",[127,17965,17966],{"class":129,"line":10335},[127,17967,17535],{"class":133},[127,17969,17970,17972,17974,17977],{"class":129,"line":10340},[127,17971,2095],{"class":147},[127,17973,1718],{"class":290},[127,17975,17976],{"class":781},"\"请输入圆的半径：\"",[127,17978,164],{"class":147},[127,17980,17981,17983],{"class":129,"line":10345},[127,17982,15280],{"class":290},[127,17984,17985],{"class":147}," r;\n",[127,17987,17988,17990,17992],{"class":129,"line":10354},[127,17989,2554],{"class":147},[127,17991,1974],{"class":290},[127,17993,17994],{"class":147},"r;\n",[127,17996,17997,17999,18002],{"class":129,"line":10359},[127,17998,17136],{"class":147},[127,18000,18001],{"class":143},"setRadius",[127,18003,18004],{"class":147},"(r);\n",[127,18006,18007,18009,18011,18014],{"class":129,"line":10365},[127,18008,2095],{"class":147},[127,18010,1718],{"class":290},[127,18012,18013],{"class":781},"\"请输入圆心坐标：\"",[127,18015,164],{"class":147},[127,18017,18018,18020],{"class":129,"line":10386},[127,18019,15280],{"class":290},[127,18021,18022],{"class":147}," x, y;\n",[127,18024,18025,18027,18029,18031,18033],{"class":129,"line":10392},[127,18026,2554],{"class":147},[127,18028,1974],{"class":290},[127,18030,1494],{"class":147},[127,18032,1974],{"class":290},[127,18034,18035],{"class":147},"y;\n",[127,18037,18038,18041,18044],{"class":129,"line":10406},[127,18039,18040],{"class":147},"    p1.",[127,18042,18043],{"class":143},"setPoint",[127,18045,18046],{"class":147},"(x, y);\n",[127,18048,18049,18051,18054],{"class":129,"line":10412},[127,18050,17136],{"class":147},[127,18052,18053],{"class":143},"setCenter",[127,18055,18056],{"class":147},"(p1);\n",[127,18058,18059,18061,18063,18066],{"class":129,"line":10439},[127,18060,2095],{"class":147},[127,18062,1718],{"class":290},[127,18064,18065],{"class":781},"\"请输入测试点坐标：\"",[127,18067,164],{"class":147},[127,18069,18070,18072],{"class":129,"line":10448},[127,18071,15280],{"class":290},[127,18073,18074],{"class":147}," x1, y1;\n",[127,18076,18077,18079,18081,18084,18086],{"class":129,"line":10454},[127,18078,2554],{"class":147},[127,18080,1974],{"class":290},[127,18082,18083],{"class":147},"x1",[127,18085,1974],{"class":290},[127,18087,18088],{"class":147},"y1;\n",[127,18090,18091],{"class":129,"line":10462},[127,18092,18093],{"class":147},"    Point p2;\n",[127,18095,18096,18099,18101],{"class":129,"line":10467},[127,18097,18098],{"class":147},"    p2.",[127,18100,18043],{"class":143},[127,18102,18103],{"class":147},"(x1, y1);\n",[127,18105,18106,18109],{"class":129,"line":17145},[127,18107,18108],{"class":143},"    isInCircle",[127,18110,18111],{"class":147},"(c1, p2);\n",[127,18113,18114],{"class":129,"line":17151},[127,18115,170],{"class":147},[19,18117,18118],{},"在类中可以让另一个类作为本来的成员",[19,18120,18121],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18123,18124],{},"创建point.h",[117,18126,18128],{"className":669,"code":18127,"language":671,"meta":122,"style":122},"#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",[124,18129,18130,18141,18147,18157,18163,18167,18172,18176,18180,18200,18204,18212,18220,18224,18228,18234,18240],{"__ignoreMap":122},[127,18131,18132,18135,18138],{"class":129,"line":130},[127,18133,18134],{"class":290},"#pragma",[127,18136,18137],{"class":143}," once",[127,18139,18140],{"class":133}," \u002F\u002F防止头文件重复包含\n",[127,18142,18143,18145],{"class":129,"line":137},[127,18144,2492],{"class":290},[127,18146,2495],{"class":781},[127,18148,18149,18151,18153,18155],{"class":129,"line":151},[127,18150,2500],{"class":290},[127,18152,2503],{"class":290},[127,18154,2506],{"class":143},[127,18156,164],{"class":147},[127,18158,18159,18161],{"class":129,"line":167},[127,18160,15236],{"class":290},[127,18162,17522],{"class":143},[127,18164,18165],{"class":129,"line":415},[127,18166,2090],{"class":147},[127,18168,18169],{"class":129,"line":421},[127,18170,18171],{"class":133},"\u002F\u002F做好声明与变量定义就可以\n",[127,18173,18174],{"class":129,"line":1766},[127,18175,15258],{"class":290},[127,18177,18178],{"class":129,"line":1856},[127,18179,17535],{"class":133},[127,18181,18182,18184,18186,18188,18190,18192,18194,18196,18198],{"class":129,"line":1862},[127,18183,15451],{"class":290},[127,18185,17542],{"class":143},[127,18187,681],{"class":147},[127,18189,14579],{"class":290},[127,18191,17549],{"class":5758},[127,18193,12977],{"class":147},[127,18195,14579],{"class":290},[127,18197,17556],{"class":5758},[127,18199,3261],{"class":147},[127,18201,18202],{"class":129,"line":1874},[127,18203,17574],{"class":133},[127,18205,18206,18208,18210],{"class":129,"line":2155},[127,18207,15280],{"class":290},[127,18209,17581],{"class":143},[127,18211,6178],{"class":147},[127,18213,18214,18216,18218],{"class":129,"line":2160},[127,18215,15280],{"class":290},[127,18217,17597],{"class":143},[127,18219,6178],{"class":147},[127,18221,18222],{"class":129,"line":2166},[127,18223,2942],{"emptyLinePlaceholder":606},[127,18225,18226],{"class":129,"line":2171},[127,18227,15764],{"class":290},[127,18229,18230,18232],{"class":129,"line":2185},[127,18231,15280],{"class":290},[127,18233,17619],{"class":147},[127,18235,18236,18238],{"class":129,"line":2190},[127,18237,15280],{"class":290},[127,18239,17626],{"class":147},[127,18241,18242],{"class":129,"line":2196},[127,18243,4537],{"class":147},[19,18245,18246],{},"创建point.cpp",[117,18248,18250],{"className":669,"code":18249,"language":671,"meta":122,"style":122},"#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",[124,18251,18252,18259,18264,18298,18302,18318],{"__ignoreMap":122},[127,18253,18254,18256],{"class":129,"line":130},[127,18255,2492],{"class":290},[127,18257,18258],{"class":781},"\u003Cpoint.h>\n",[127,18260,18261],{"class":129,"line":137},[127,18262,18263],{"class":133},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[127,18265,18266,18268,18271,18274,18276,18278,18280,18282,18284,18286,18288,18290,18292,18294,18296],{"class":129,"line":151},[127,18267,15451],{"class":290},[127,18269,18270],{"class":143}," Point",[127,18272,18273],{"class":147},"::",[127,18275,18043],{"class":143},[127,18277,681],{"class":147},[127,18279,14579],{"class":290},[127,18281,17549],{"class":5758},[127,18283,12977],{"class":147},[127,18285,14579],{"class":290},[127,18287,17556],{"class":5758},[127,18289,17559],{"class":147},[127,18291,725],{"class":290},[127,18293,17564],{"class":147},[127,18295,725],{"class":290},[127,18297,17569],{"class":147},[127,18299,18300],{"class":129,"line":167},[127,18301,17574],{"class":133},[127,18303,18304,18306,18308,18310,18312,18314,18316],{"class":129,"line":415},[127,18305,15280],{"class":290},[127,18307,18270],{"class":143},[127,18309,18273],{"class":147},[127,18311,17805],{"class":143},[127,18313,17584],{"class":147},[127,18315,17587],{"class":290},[127,18317,17590],{"class":147},[127,18319,18320,18322,18324,18326,18328,18330,18332],{"class":129,"line":421},[127,18321,15280],{"class":290},[127,18323,18270],{"class":143},[127,18325,18273],{"class":147},[127,18327,17833],{"class":143},[127,18329,17584],{"class":147},[127,18331,17587],{"class":290},[127,18333,17604],{"class":147},[19,18335,18336],{},"创建circle.h",[117,18338,18340],{"className":669,"code":18339,"language":671,"meta":122,"style":122},"#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",[124,18341,18342,18349,18355,18365,18371,18377,18381,18385,18389,18403,18417,18421,18429,18437,18441,18445,18451,18455,18459],{"__ignoreMap":122},[127,18343,18344,18346],{"class":129,"line":130},[127,18345,18134],{"class":290},[127,18347,18348],{"class":143}," once\n",[127,18350,18351,18353],{"class":129,"line":137},[127,18352,2492],{"class":290},[127,18354,2495],{"class":781},[127,18356,18357,18359,18361,18363],{"class":129,"line":151},[127,18358,2500],{"class":290},[127,18360,2503],{"class":290},[127,18362,2506],{"class":143},[127,18364,164],{"class":147},[127,18366,18367,18369],{"class":129,"line":167},[127,18368,2492],{"class":290},[127,18370,18258],{"class":781},[127,18372,18373,18375],{"class":129,"line":415},[127,18374,15236],{"class":290},[127,18376,15239],{"class":143},[127,18378,18379],{"class":129,"line":421},[127,18380,2090],{"class":147},[127,18382,18383],{"class":129,"line":1766},[127,18384,15258],{"class":290},[127,18386,18387],{"class":129,"line":1856},[127,18388,17535],{"class":133},[127,18390,18391,18393,18395,18397,18399,18401],{"class":129,"line":1862},[127,18392,15451],{"class":290},[127,18394,17655],{"class":143},[127,18396,681],{"class":147},[127,18398,14579],{"class":290},[127,18400,17662],{"class":5758},[127,18402,3261],{"class":147},[127,18404,18405,18407,18409,18411,18413,18415],{"class":129,"line":1874},[127,18406,15451],{"class":290},[127,18408,17677],{"class":143},[127,18410,681],{"class":147},[127,18412,17682],{"class":143},[127,18414,17685],{"class":5758},[127,18416,3261],{"class":147},[127,18418,18419],{"class":129,"line":2155},[127,18420,17698],{"class":133},[127,18422,18423,18425,18427],{"class":129,"line":2160},[127,18424,15280],{"class":290},[127,18426,17705],{"class":143},[127,18428,6178],{"class":147},[127,18430,18431,18433,18435],{"class":129,"line":2166},[127,18432,17717],{"class":143},[127,18434,17720],{"class":143},[127,18436,6178],{"class":147},[127,18438,18439],{"class":129,"line":2171},[127,18440,2942],{"emptyLinePlaceholder":606},[127,18442,18443],{"class":129,"line":2185},[127,18444,15764],{"class":290},[127,18446,18447,18449],{"class":129,"line":2190},[127,18448,15280],{"class":290},[127,18450,15270],{"class":147},[127,18452,18453],{"class":129,"line":2196},[127,18454,17746],{"class":133},[127,18456,18457],{"class":129,"line":2217},[127,18458,17751],{"class":147},[127,18460,18461],{"class":129,"line":2222},[127,18462,4537],{"class":147},[19,18464,18465],{},"创建circle.cpp",[117,18467,18469],{"className":669,"code":18468,"language":671,"meta":122,"style":122},"#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",[124,18470,18471,18478,18501,18523,18528,18544],{"__ignoreMap":122},[127,18472,18473,18475],{"class":129,"line":130},[127,18474,2492],{"class":290},[127,18476,18477],{"class":781},"\u003Ccircle.h>\n",[127,18479,18480,18482,18485,18487,18489,18491,18493,18495,18497,18499],{"class":129,"line":137},[127,18481,5906],{"class":290},[127,18483,18484],{"class":143}," Circle",[127,18486,18273],{"class":147},[127,18488,18001],{"class":143},[127,18490,681],{"class":147},[127,18492,14579],{"class":290},[127,18494,17662],{"class":5758},[127,18496,17665],{"class":147},[127,18498,725],{"class":290},[127,18500,17670],{"class":147},[127,18502,18503,18505,18507,18509,18511,18513,18515,18517,18519,18521],{"class":129,"line":151},[127,18504,5906],{"class":290},[127,18506,18484],{"class":143},[127,18508,18273],{"class":147},[127,18510,18053],{"class":143},[127,18512,681],{"class":147},[127,18514,17682],{"class":143},[127,18516,17685],{"class":5758},[127,18518,17688],{"class":147},[127,18520,725],{"class":290},[127,18522,17693],{"class":147},[127,18524,18525],{"class":129,"line":167},[127,18526,18527],{"class":133},"\u002F\u002F获取属性\n",[127,18529,18530,18532,18534,18536,18538,18540,18542],{"class":129,"line":415},[127,18531,14579],{"class":290},[127,18533,18484],{"class":143},[127,18535,18273],{"class":147},[127,18537,17885],{"class":143},[127,18539,17584],{"class":147},[127,18541,17587],{"class":290},[127,18543,17712],{"class":147},[127,18545,18546,18548,18550,18552,18554,18556,18558],{"class":129,"line":421},[127,18547,17682],{"class":143},[127,18549,18484],{"class":143},[127,18551,18273],{"class":147},[127,18553,17799],{"class":143},[127,18555,17584],{"class":147},[127,18557,17587],{"class":290},[127,18559,17727],{"class":147},[19,18561,18562],{},"使用封装的类",[117,18564,18566],{"className":669,"code":18565,"language":671,"meta":122,"style":122},"#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",[124,18567,18568,18574,18584,18590,18596,18620,18624,18650,18676,18700,18714,18718,18730,18734,18738,18742,18754,18758,18762,18770,18774,18778,18782,18786,18790,18800,18806,18814,18822,18832,18838,18850,18858,18866,18876,18882,18894,18898,18906,18912],{"__ignoreMap":122},[127,18569,18570,18572],{"class":129,"line":130},[127,18571,2492],{"class":290},[127,18573,2495],{"class":781},[127,18575,18576,18578,18580,18582],{"class":129,"line":137},[127,18577,2500],{"class":290},[127,18579,2503],{"class":290},[127,18581,2506],{"class":143},[127,18583,164],{"class":147},[127,18585,18586,18588],{"class":129,"line":151},[127,18587,2492],{"class":290},[127,18589,18477],{"class":781},[127,18591,18592,18594],{"class":129,"line":167},[127,18593,2492],{"class":290},[127,18595,18258],{"class":781},[127,18597,18598,18600,18602,18604,18606,18608,18610,18612,18614,18616,18618],{"class":129,"line":415},[127,18599,5906],{"class":290},[127,18601,17762],{"class":143},[127,18603,681],{"class":147},[127,18605,17767],{"class":143},[127,18607,11126],{"class":290},[127,18609,963],{"class":5758},[127,18611,1053],{"class":147},[127,18613,17682],{"class":143},[127,18615,11126],{"class":290},[127,18617,19],{"class":5758},[127,18619,687],{"class":147},[127,18621,18622],{"class":129,"line":421},[127,18623,2090],{"class":147},[127,18625,18626,18628,18630,18632,18634,18636,18638,18640,18642,18644,18646,18648],{"class":129,"line":1766},[127,18627,15280],{"class":290},[127,18629,17792],{"class":147},[127,18631,725],{"class":290},[127,18633,16883],{"class":147},[127,18635,17799],{"class":143},[127,18637,17802],{"class":147},[127,18639,17805],{"class":143},[127,18641,13592],{"class":147},[127,18643,1207],{"class":290},[127,18645,16429],{"class":147},[127,18647,17805],{"class":143},[127,18649,6178],{"class":147},[127,18651,18652,18654,18656,18658,18660,18662,18664,18666,18668,18670,18672,18674],{"class":129,"line":1856},[127,18653,15280],{"class":290},[127,18655,17822],{"class":147},[127,18657,725],{"class":290},[127,18659,16883],{"class":147},[127,18661,17799],{"class":143},[127,18663,17802],{"class":147},[127,18665,17833],{"class":143},[127,18667,13592],{"class":147},[127,18669,1207],{"class":290},[127,18671,16429],{"class":147},[127,18673,17833],{"class":143},[127,18675,6178],{"class":147},[127,18677,18678,18680,18682,18684,18686,18688,18690,18692,18694,18696,18698],{"class":129,"line":1862},[127,18679,15280],{"class":290},[127,18681,17850],{"class":147},[127,18683,725],{"class":290},[127,18685,17855],{"class":143},[127,18687,17858],{"class":147},[127,18689,1130],{"class":290},[127,18691,17792],{"class":147},[127,18693,1156],{"class":290},[127,18695,17822],{"class":147},[127,18697,1130],{"class":290},[127,18699,17871],{"class":147},[127,18701,18702,18704,18706,18708,18710,18712],{"class":129,"line":1874},[127,18703,3643],{"class":290},[127,18705,17878],{"class":147},[127,18707,1584],{"class":290},[127,18709,16883],{"class":147},[127,18711,17885],{"class":143},[127,18713,17888],{"class":147},[127,18715,18716],{"class":129,"line":2155},[127,18717,2572],{"class":147},[127,18719,18720,18722,18724,18726,18728],{"class":129,"line":2160},[127,18721,10211],{"class":147},[127,18723,1718],{"class":290},[127,18725,17901],{"class":781},[127,18727,1989],{"class":290},[127,18729,9382],{"class":147},[127,18731,18732],{"class":129,"line":2166},[127,18733,2729],{"class":147},[127,18735,18736],{"class":129,"line":2171},[127,18737,17364],{"class":290},[127,18739,18740],{"class":129,"line":2185},[127,18741,2572],{"class":147},[127,18743,18744,18746,18748,18750,18752],{"class":129,"line":2190},[127,18745,10211],{"class":147},[127,18747,1718],{"class":290},[127,18749,17926],{"class":781},[127,18751,1989],{"class":290},[127,18753,9382],{"class":147},[127,18755,18756],{"class":129,"line":2196},[127,18757,2729],{"class":147},[127,18759,18760],{"class":129,"line":2217},[127,18761,170],{"class":147},[127,18763,18764,18766,18768],{"class":129,"line":2222},[127,18765,684],{"class":290},[127,18767,2515],{"class":143},[127,18769,2518],{"class":147},[127,18771,18772],{"class":129,"line":2236},[127,18773,2090],{"class":147},[127,18775,18776],{"class":129,"line":2241},[127,18777,15595],{"class":133},[127,18779,18780],{"class":129,"line":2270},[127,18781,15342],{"class":147},[127,18783,18784],{"class":129,"line":2275},[127,18785,17963],{"class":147},[127,18787,18788],{"class":129,"line":2292},[127,18789,17535],{"class":133},[127,18791,18792,18794,18796,18798],{"class":129,"line":2297},[127,18793,2095],{"class":147},[127,18795,1718],{"class":290},[127,18797,17976],{"class":781},[127,18799,164],{"class":147},[127,18801,18802,18804],{"class":129,"line":2302},[127,18803,15280],{"class":290},[127,18805,17985],{"class":147},[127,18807,18808,18810,18812],{"class":129,"line":2307},[127,18809,2554],{"class":147},[127,18811,1974],{"class":290},[127,18813,17994],{"class":147},[127,18815,18816,18818,18820],{"class":129,"line":2321},[127,18817,17136],{"class":147},[127,18819,18001],{"class":143},[127,18821,18004],{"class":147},[127,18823,18824,18826,18828,18830],{"class":129,"line":2326},[127,18825,2095],{"class":147},[127,18827,1718],{"class":290},[127,18829,18013],{"class":781},[127,18831,164],{"class":147},[127,18833,18834,18836],{"class":129,"line":3119},[127,18835,15280],{"class":290},[127,18837,18022],{"class":147},[127,18839,18840,18842,18844,18846,18848],{"class":129,"line":3133},[127,18841,2554],{"class":147},[127,18843,1974],{"class":290},[127,18845,1494],{"class":147},[127,18847,1974],{"class":290},[127,18849,18035],{"class":147},[127,18851,18852,18854,18856],{"class":129,"line":3141},[127,18853,18040],{"class":147},[127,18855,18043],{"class":143},[127,18857,18046],{"class":147},[127,18859,18860,18862,18864],{"class":129,"line":3146},[127,18861,17136],{"class":147},[127,18863,18053],{"class":143},[127,18865,18056],{"class":147},[127,18867,18868,18870,18872,18874],{"class":129,"line":3152},[127,18869,2095],{"class":147},[127,18871,1718],{"class":290},[127,18873,18065],{"class":781},[127,18875,164],{"class":147},[127,18877,18878,18880],{"class":129,"line":3158},[127,18879,15280],{"class":290},[127,18881,18074],{"class":147},[127,18883,18884,18886,18888,18890,18892],{"class":129,"line":3163},[127,18885,2554],{"class":147},[127,18887,1974],{"class":290},[127,18889,18083],{"class":147},[127,18891,1974],{"class":290},[127,18893,18088],{"class":147},[127,18895,18896],{"class":129,"line":8490},[127,18897,18093],{"class":147},[127,18899,18900,18902,18904],{"class":129,"line":8514},[127,18901,18098],{"class":147},[127,18903,18043],{"class":143},[127,18905,18103],{"class":147},[127,18907,18908,18910],{"class":129,"line":8519},[127,18909,18108],{"class":143},[127,18911,18111],{"class":147},[127,18913,18914],{"class":129,"line":8525},[127,18915,170],{"class":147},[14,18917,18919],{"id":18918},"_82对象的初始化清理","8.2对象的初始化清理",[1681,18921,18922,18925],{},[635,18923,18924],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[635,18926,18927],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[62,18929,18931],{"id":18930},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18933,18934,18935,18938],{},"对象的",[30,18936,18937],{},"初始化和清理","也是两个非常重要的安全问题",[19,18940,18941],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18943,18944],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18946,18947,18948,18951,18952,18955],{},"c++利用了",[30,18949,18950],{},"构造函数","和",[30,18953,18954],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18957,18958,18959],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[30,18960,18961],{},"我们不提供构造和析构，编译器会提供",[19,18963,18964],{},[30,18965,18966],{},"编译器提供的构造函数和析构函数是空实现。",[1681,18968,18969,18972],{},[635,18970,18971],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[635,18973,18974,18975,18978],{},"析构函数：主要作用在于对象",[30,18976,18977],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18980,18981,18984],{},[30,18982,18983],{},"构造函数语法：",[124,18985,18986],{},"类名(){}",[632,18988,18989,18992,18995,18998,19001],{},[635,18990,18991],{},"构造函数，没有返回值也不写void",[635,18993,18994],{},"函数名称与类名相同",[635,18996,18997],{},"构造函数可以有参数，因此可以发生重载",[635,18999,19000],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[635,19002,19003,19004,1104],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[124,19005,19006],{},"Person(){}",[19,19008,19009,14337,19012],{},[30,19010,19011],{},"析构函数语法：",[124,19013,19014],{},"~类名(){}",[632,19016,19017,19020,19023,19029],{},[635,19018,19019],{},"析构函数，没有返回值也不写void",[635,19021,19022],{},"函数名称与类名相同,在名称前加上符号  ~",[635,19024,19025,19026],{},"析构函数不可以有参数，因此",[30,19027,19028],{},"不可以发生重载",[635,19030,19031],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[117,19033,19035],{"className":669,"code":19034,"language":671,"meta":122,"style":122},"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",[124,19036,19037,19043,19047,19051,19056,19063,19067,19080,19084,19089,19096,19100,19113,19117,19121,19125,19129,19137,19141,19149,19153,19157,19165,19169,19174,19178,19185,19189,19202,19206,19214],{"__ignoreMap":122},[127,19038,19039,19041],{"class":129,"line":130},[127,19040,15236],{"class":290},[127,19042,15713],{"class":143},[127,19044,19045],{"class":129,"line":137},[127,19046,2090],{"class":147},[127,19048,19049],{"class":129,"line":151},[127,19050,15258],{"class":290},[127,19052,19053],{"class":129,"line":167},[127,19054,19055],{"class":133},"    \u002F\u002F构造函数\n",[127,19057,19058,19061],{"class":129,"line":415},[127,19059,19060],{"class":143},"    Person",[127,19062,2518],{"class":147},[127,19064,19065],{"class":129,"line":421},[127,19066,2572],{"class":147},[127,19068,19069,19071,19073,19076,19078],{"class":129,"line":1766},[127,19070,10211],{"class":147},[127,19072,1718],{"class":290},[127,19074,19075],{"class":781}," \"Person的构造函数调用\"",[127,19077,1989],{"class":290},[127,19079,9382],{"class":147},[127,19081,19082],{"class":129,"line":1856},[127,19083,2729],{"class":147},[127,19085,19086],{"class":129,"line":1862},[127,19087,19088],{"class":133},"    \u002F\u002F析构函数\n",[127,19090,19091,19094],{"class":129,"line":1874},[127,19092,19093],{"class":143},"    ~Person",[127,19095,2518],{"class":147},[127,19097,19098],{"class":129,"line":2155},[127,19099,2572],{"class":147},[127,19101,19102,19104,19106,19109,19111],{"class":129,"line":2160},[127,19103,10211],{"class":147},[127,19105,1718],{"class":290},[127,19107,19108],{"class":781}," \"Person的析构函数调用\"",[127,19110,1989],{"class":290},[127,19112,9382],{"class":147},[127,19114,19115],{"class":129,"line":2166},[127,19116,2729],{"class":147},[127,19118,19119],{"class":129,"line":2171},[127,19120,2942],{"emptyLinePlaceholder":606},[127,19122,19123],{"class":129,"line":2185},[127,19124,4537],{"class":147},[127,19126,19127],{"class":129,"line":2190},[127,19128,2942],{"emptyLinePlaceholder":606},[127,19130,19131,19133,19135],{"class":129,"line":2196},[127,19132,5906],{"class":290},[127,19134,6130],{"class":143},[127,19136,2518],{"class":147},[127,19138,19139],{"class":129,"line":2217},[127,19140,2090],{"class":147},[127,19142,19143,19146],{"class":129,"line":2222},[127,19144,19145],{"class":147},"    Person p;",[127,19147,19148],{"class":133},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[127,19150,19151],{"class":129,"line":2236},[127,19152,170],{"class":147},[127,19154,19155],{"class":129,"line":2241},[127,19156,2942],{"emptyLinePlaceholder":606},[127,19158,19159,19161,19163],{"class":129,"line":2270},[127,19160,684],{"class":290},[127,19162,2515],{"class":143},[127,19164,11395],{"class":147},[127,19166,19167],{"class":129,"line":2275},[127,19168,13752],{"class":147},[127,19170,19171],{"class":129,"line":2292},[127,19172,19173],{"class":133},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[127,19175,19176],{"class":129,"line":2297},[127,19177,2942],{"emptyLinePlaceholder":606},[127,19179,19180,19182],{"class":129,"line":2302},[127,19181,19145],{"class":147},[127,19183,19184],{"class":133},"\u002F\u002F只有构造函数\n",[127,19186,19187],{"class":129,"line":2307},[127,19188,2942],{"emptyLinePlaceholder":606},[127,19190,19191,19193,19195,19197,19199],{"class":129,"line":2321},[127,19192,2845],{"class":143},[127,19194,681],{"class":147},[127,19196,2850],{"class":781},[127,19198,6508],{"class":147},[127,19200,19201],{"class":133},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[127,19203,19204],{"class":129,"line":2326},[127,19205,2942],{"emptyLinePlaceholder":606},[127,19207,19208,19210,19212],{"class":129,"line":3119},[127,19209,4632],{"class":290},[127,19211,4635],{"class":154},[127,19213,164],{"class":147},[127,19215,19216],{"class":129,"line":3133},[127,19217,170],{"class":147},[19,19219,19220],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[62,19222,19224],{"id":19223},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19226,19227],{},"两种分类方式：",[19,19229,19230],{},"​\t按参数分为： 有参构造和无参构造",[19,19232,19233],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19235,19236],{},"三种调用方式：",[19,19238,19239],{},"​\t括号法",[19,19241,19242],{},"​\t显示法",[19,19244,19245],{},"​\t隐式转换法",[117,19247,19249],{"className":669,"code":19248,"language":671,"meta":122,"style":122},"#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",[124,19250,19251,19257,19267,19272,19277,19282,19287,19291,19299,19303,19307,19311,19317,19321,19334,19338,19350,19354,19363,19376,19380,19384,19390,19394,19407,19411,19416,19432,19436,19441,19450,19463,19467,19473,19477,19482,19490,19494,19499,19503,19511,19515,19520,19525,19530,19535,19540,19544,19549,19554,19559,19564,19568,19573,19578,19594,19606,19611,19615,19620,19625,19630,19634,19639,19653,19666,19670,19678,19682,19688,19694,19702],{"__ignoreMap":122},[127,19252,19253,19255],{"class":129,"line":130},[127,19254,2492],{"class":290},[127,19256,2495],{"class":781},[127,19258,19259,19261,19263,19265],{"class":129,"line":137},[127,19260,2500],{"class":290},[127,19262,2503],{"class":290},[127,19264,2506],{"class":143},[127,19266,164],{"class":147},[127,19268,19269],{"class":129,"line":151},[127,19270,19271],{"class":133},"\u002F\u002F1.构造函数的分类及调用\n",[127,19273,19274],{"class":129,"line":167},[127,19275,19276],{"class":133},"\u002F\u002F分类\n",[127,19278,19279],{"class":129,"line":415},[127,19280,19281],{"class":133},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[127,19283,19284],{"class":129,"line":421},[127,19285,19286],{"class":133},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[127,19288,19289],{"class":129,"line":1766},[127,19290,2942],{"emptyLinePlaceholder":606},[127,19292,19293,19295,19297],{"class":129,"line":1856},[127,19294,15236],{"class":290},[127,19296,16111],{"class":143},[127,19298,3216],{"class":147},[127,19300,19301],{"class":129,"line":1862},[127,19302,2090],{"class":147},[127,19304,19305],{"class":129,"line":1874},[127,19306,15258],{"class":290},[127,19308,19309],{"class":129,"line":2155},[127,19310,19055],{"class":133},[127,19312,19313,19315],{"class":129,"line":2160},[127,19314,19060],{"class":143},[127,19316,2518],{"class":147},[127,19318,19319],{"class":129,"line":2166},[127,19320,2572],{"class":147},[127,19322,19323,19325,19327,19330,19332],{"class":129,"line":2171},[127,19324,3993],{"class":147},[127,19326,1718],{"class":290},[127,19328,19329],{"class":781},"\"Person构造函数无参构造\"",[127,19331,1718],{"class":290},[127,19333,1740],{"class":147},[127,19335,19336],{"class":129,"line":2185},[127,19337,2729],{"class":147},[127,19339,19340,19342,19344,19346,19348],{"class":129,"line":2190},[127,19341,19060],{"class":143},[127,19343,681],{"class":147},[127,19345,684],{"class":290},[127,19347,1943],{"class":5758},[127,19349,687],{"class":147},[127,19351,19352],{"class":129,"line":2196},[127,19353,2572],{"class":147},[127,19355,19356,19359,19361],{"class":129,"line":2217},[127,19357,19358],{"class":147},"        age",[127,19360,725],{"class":290},[127,19362,6739],{"class":147},[127,19364,19365,19367,19369,19372,19374],{"class":129,"line":2222},[127,19366,3993],{"class":147},[127,19368,1718],{"class":290},[127,19370,19371],{"class":781},"\"Person构造函数有参构造\"",[127,19373,1718],{"class":290},[127,19375,1740],{"class":147},[127,19377,19378],{"class":129,"line":2236},[127,19379,2729],{"class":147},[127,19381,19382],{"class":129,"line":2241},[127,19383,19088],{"class":133},[127,19385,19386,19388],{"class":129,"line":2270},[127,19387,19093],{"class":143},[127,19389,2518],{"class":147},[127,19391,19392],{"class":129,"line":2275},[127,19393,2572],{"class":147},[127,19395,19396,19398,19400,19403,19405],{"class":129,"line":2292},[127,19397,3993],{"class":147},[127,19399,1718],{"class":290},[127,19401,19402],{"class":781},"\"Person析构函数被调用\"",[127,19404,1718],{"class":290},[127,19406,1740],{"class":147},[127,19408,19409],{"class":129,"line":2297},[127,19410,2729],{"class":147},[127,19412,19413],{"class":129,"line":2302},[127,19414,19415],{"class":133},"    \u002F\u002F拷贝构造函数\n",[127,19417,19418,19420,19422,19424,19426,19428,19430],{"class":129,"line":2307},[127,19419,19060],{"class":143},[127,19421,681],{"class":147},[127,19423,7334],{"class":290},[127,19425,16111],{"class":143},[127,19427,11126],{"class":290},[127,19429,19],{"class":5758},[127,19431,687],{"class":147},[127,19433,19434],{"class":129,"line":2321},[127,19435,2572],{"class":147},[127,19437,19438],{"class":129,"line":2326},[127,19439,19440],{"class":133},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[127,19442,19443,19445,19447],{"class":129,"line":3119},[127,19444,19358],{"class":147},[127,19446,725],{"class":290},[127,19448,19449],{"class":147},"p.age;\n",[127,19451,19452,19454,19456,19459,19461],{"class":129,"line":3133},[127,19453,3993],{"class":147},[127,19455,1718],{"class":290},[127,19457,19458],{"class":781},"\"Person拷贝构造函数被调用\"",[127,19460,1718],{"class":290},[127,19462,1740],{"class":147},[127,19464,19465],{"class":129,"line":3141},[127,19466,2729],{"class":147},[127,19468,19469,19471],{"class":129,"line":3146},[127,19470,2527],{"class":290},[127,19472,8339],{"class":147},[127,19474,19475],{"class":129,"line":3152},[127,19476,4537],{"class":147},[127,19478,19479],{"class":129,"line":3158},[127,19480,19481],{"class":133},"\u002F\u002F调用\n",[127,19483,19484,19486,19488],{"class":129,"line":3163},[127,19485,5906],{"class":290},[127,19487,6130],{"class":143},[127,19489,2518],{"class":147},[127,19491,19492],{"class":129,"line":8490},[127,19493,2090],{"class":147},[127,19495,19496],{"class":129,"line":8514},[127,19497,19498],{"class":133},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[127,19500,19501],{"class":129,"line":8519},[127,19502,170],{"class":147},[127,19504,19505,19507,19509],{"class":129,"line":8525},[127,19506,5906],{"class":290},[127,19508,6199],{"class":143},[127,19510,2518],{"class":147},[127,19512,19513],{"class":129,"line":8552},[127,19514,2090],{"class":147},[127,19516,19517],{"class":129,"line":8557},[127,19518,19519],{"class":133},"    \u002F\u002F1.括号法\n",[127,19521,19522],{"class":129,"line":8563},[127,19523,19524],{"class":133},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[127,19526,19527],{"class":129,"line":8575},[127,19528,19529],{"class":133},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[127,19531,19532],{"class":129,"line":8587},[127,19533,19534],{"class":133},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[127,19536,19537],{"class":129,"line":8599},[127,19538,19539],{"class":133},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[127,19541,19542],{"class":129,"line":10258},[127,19543,2942],{"emptyLinePlaceholder":606},[127,19545,19546],{"class":129,"line":10283},[127,19547,19548],{"class":133},"    \u002F\u002F注意事项\n",[127,19550,19551],{"class":129,"line":10306},[127,19552,19553],{"class":133},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[127,19555,19556],{"class":129,"line":10330},[127,19557,19558],{"class":133},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[127,19560,19561],{"class":129,"line":10335},[127,19562,19563],{"class":133},"    \u002F\u002F Person p4();\n",[127,19565,19566],{"class":129,"line":10340},[127,19567,2942],{"emptyLinePlaceholder":606},[127,19569,19570],{"class":129,"line":10345},[127,19571,19572],{"class":133},"    \u002F\u002F2.显示法\n",[127,19574,19575],{"class":129,"line":10354},[127,19576,19577],{"class":147},"    Person p1;\n",[127,19579,19580,19583,19585,19588,19590,19592],{"class":129,"line":10359},[127,19581,19582],{"class":147},"    Person p2",[127,19584,725],{"class":290},[127,19586,19587],{"class":143},"Person",[127,19589,681],{"class":147},[127,19591,1121],{"class":154},[127,19593,3261],{"class":147},[127,19595,19596,19599,19601,19603],{"class":129,"line":10365},[127,19597,19598],{"class":147},"    Person p3",[127,19600,725],{"class":290},[127,19602,19587],{"class":143},[127,19604,19605],{"class":147},"(p2);\n",[127,19607,19608],{"class":129,"line":10386},[127,19609,19610],{"class":133},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[127,19612,19613],{"class":129,"line":10392},[127,19614,2942],{"emptyLinePlaceholder":606},[127,19616,19617],{"class":129,"line":10406},[127,19618,19619],{"class":133},"    \u002F\u002F 注意事项2\n",[127,19621,19622],{"class":129,"line":10412},[127,19623,19624],{"class":133},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[127,19626,19627],{"class":129,"line":10439},[127,19628,19629],{"class":133},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[127,19631,19632],{"class":129,"line":10448},[127,19633,2942],{"emptyLinePlaceholder":606},[127,19635,19636],{"class":129,"line":10454},[127,19637,19638],{"class":133},"    \u002F\u002F3.隐士转换法\n",[127,19640,19641,19644,19646,19648,19650],{"class":129,"line":10462},[127,19642,19643],{"class":147},"    Person p4",[127,19645,725],{"class":290},[127,19647,1121],{"class":154},[127,19649,734],{"class":147},[127,19651,19652],{"class":133},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[127,19654,19655,19658,19660,19663],{"class":129,"line":10467},[127,19656,19657],{"class":147},"    Person p5",[127,19659,725],{"class":290},[127,19661,19662],{"class":147},"p4;",[127,19664,19665],{"class":133}," \u002F\u002F 这里会调用拷贝构造函数\n",[127,19667,19668],{"class":129,"line":17145},[127,19669,170],{"class":147},[127,19671,19672,19674,19676],{"class":129,"line":17151},[127,19673,684],{"class":290},[127,19675,2515],{"class":143},[127,19677,2518],{"class":147},[127,19679,19680],{"class":129,"line":17174},[127,19681,2090],{"class":147},[127,19683,19684,19686],{"class":129,"line":17180},[127,19685,6175],{"class":143},[127,19687,6178],{"class":147},[127,19689,19690,19692],{"class":129,"line":17203},[127,19691,6244],{"class":143},[127,19693,6178],{"class":147},[127,19695,19696,19698,19700],{"class":129,"line":17217},[127,19697,4632],{"class":290},[127,19699,4635],{"class":154},[127,19701,164],{"class":147},[127,19703,19704],{"class":129,"line":17237},[127,19705,170],{"class":147},[19,19707,19708,19711],{},[30,19709,19710],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[62,19713,19715],{"id":19714},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19717,19718],{},"C++中拷贝构造函数调用时机通常有三种情况",[1681,19720,19721,19724,19727],{},[635,19722,19723],{},"使用一个已经创建完毕的对象来初始化一个新对象",[635,19725,19726],{},"值传递的方式给函数参数传值",[635,19728,19729],{},"以值方式返回局部对象",[117,19731,19733],{"className":669,"code":19732,"language":671,"meta":122,"style":122},"#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",[124,19734,19735,19741,19751,19755,19760,19764,19769,19774,19779,19785,19789,19793,19799,19803,19816,19820,19825,19837,19841,19849,19862,19866,19870,19886,19890,19899,19912,19916,19922,19926,19938,19942,19948,19952,19956,19964,19968,19981,19989,20007,20011,20016,20021,20036,20040,20053,20057,20065,20069,20073,20081,20085,20090,20099,20103,20107,20132,20142,20146,20154,20158,20169,20194,20198,20202,20206,20214,20218,20223,20228,20235,20240,20245,20250,20255,20259,20264,20268,20273,20277,20282,20287,20291,20295,20300,20305,20313],{"__ignoreMap":122},[127,19736,19737,19739],{"class":129,"line":130},[127,19738,2492],{"class":290},[127,19740,2495],{"class":781},[127,19742,19743,19745,19747,19749],{"class":129,"line":137},[127,19744,2500],{"class":290},[127,19746,2503],{"class":290},[127,19748,2506],{"class":143},[127,19750,164],{"class":147},[127,19752,19753],{"class":129,"line":151},[127,19754,2942],{"emptyLinePlaceholder":606},[127,19756,19757],{"class":129,"line":167},[127,19758,19759],{"class":133},"\u002F\u002F拷贝构造函数调用时机\n",[127,19761,19762],{"class":129,"line":415},[127,19763,2942],{"emptyLinePlaceholder":606},[127,19765,19766],{"class":129,"line":421},[127,19767,19768],{"class":133},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[127,19770,19771],{"class":129,"line":1766},[127,19772,19773],{"class":133},"\u002F\u002F2.值传递的方式给函数参数传值\n",[127,19775,19776],{"class":129,"line":1856},[127,19777,19778],{"class":133},"\u002F\u002F3.以值方式返回局部对象\n",[127,19780,19781,19783],{"class":129,"line":1862},[127,19782,15236],{"class":290},[127,19784,15713],{"class":143},[127,19786,19787],{"class":129,"line":1874},[127,19788,2090],{"class":147},[127,19790,19791],{"class":129,"line":2155},[127,19792,15258],{"class":290},[127,19794,19795,19797],{"class":129,"line":2160},[127,19796,19060],{"class":143},[127,19798,2518],{"class":147},[127,19800,19801],{"class":129,"line":2166},[127,19802,2572],{"class":147},[127,19804,19805,19807,19809,19812,19814],{"class":129,"line":2171},[127,19806,10211],{"class":147},[127,19808,1718],{"class":290},[127,19810,19811],{"class":781}," \"Person的默认构造函数调用\"",[127,19813,1989],{"class":290},[127,19815,9382],{"class":147},[127,19817,19818],{"class":129,"line":2185},[127,19819,2729],{"class":147},[127,19821,19822],{"class":129,"line":2190},[127,19823,19824],{"class":133},"    \u002F\u002F有参构造\n",[127,19826,19827,19829,19831,19833,19835],{"class":129,"line":2196},[127,19828,19060],{"class":143},[127,19830,681],{"class":147},[127,19832,684],{"class":290},[127,19834,16230],{"class":5758},[127,19836,687],{"class":147},[127,19838,19839],{"class":129,"line":2217},[127,19840,2572],{"class":147},[127,19842,19843,19845,19847],{"class":129,"line":2222},[127,19844,16284],{"class":147},[127,19846,725],{"class":290},[127,19848,8339],{"class":147},[127,19850,19851,19853,19855,19858,19860],{"class":129,"line":2236},[127,19852,10211],{"class":147},[127,19854,1718],{"class":290},[127,19856,19857],{"class":781}," \"Person的有参构造函数调用\"",[127,19859,1989],{"class":290},[127,19861,9382],{"class":147},[127,19863,19864],{"class":129,"line":2241},[127,19865,2729],{"class":147},[127,19867,19868],{"class":129,"line":2270},[127,19869,19415],{"class":133},[127,19871,19872,19874,19876,19878,19880,19882,19884],{"class":129,"line":2275},[127,19873,19060],{"class":143},[127,19875,681],{"class":147},[127,19877,7334],{"class":290},[127,19879,16111],{"class":143},[127,19881,11126],{"class":290},[127,19883,19],{"class":5758},[127,19885,687],{"class":147},[127,19887,19888],{"class":129,"line":2292},[127,19889,2572],{"class":147},[127,19891,19892,19894,19896],{"class":129,"line":2297},[127,19893,16284],{"class":147},[127,19895,725],{"class":290},[127,19897,19898],{"class":147}," p.m_Age;\n",[127,19900,19901,19903,19905,19908,19910],{"class":129,"line":2302},[127,19902,10211],{"class":147},[127,19904,1718],{"class":290},[127,19906,19907],{"class":781}," \"Person的拷贝构造函数调用\"",[127,19909,1989],{"class":290},[127,19911,9382],{"class":147},[127,19913,19914],{"class":129,"line":2307},[127,19915,2729],{"class":147},[127,19917,19918,19920],{"class":129,"line":2321},[127,19919,19093],{"class":143},[127,19921,2518],{"class":147},[127,19923,19924],{"class":129,"line":2326},[127,19925,2572],{"class":147},[127,19927,19928,19930,19932,19934,19936],{"class":129,"line":3119},[127,19929,10211],{"class":147},[127,19931,1718],{"class":290},[127,19933,19108],{"class":781},[127,19935,1989],{"class":290},[127,19937,9382],{"class":147},[127,19939,19940],{"class":129,"line":3133},[127,19941,2729],{"class":147},[127,19943,19944,19946],{"class":129,"line":3141},[127,19945,2527],{"class":290},[127,19947,16207],{"class":147},[127,19949,19950],{"class":129,"line":3146},[127,19951,4537],{"class":147},[127,19953,19954],{"class":129,"line":3152},[127,19955,19768],{"class":133},[127,19957,19958,19960,19962],{"class":129,"line":3158},[127,19959,5906],{"class":290},[127,19961,6130],{"class":143},[127,19963,2518],{"class":147},[127,19965,19966],{"class":129,"line":3163},[127,19967,2090],{"class":147},[127,19969,19970,19973,19975,19977,19979],{"class":129,"line":8490},[127,19971,19972],{"class":147},"    Person ",[127,19974,7672],{"class":143},[127,19976,681],{"class":147},[127,19978,1374],{"class":154},[127,19980,3261],{"class":147},[127,19982,19983,19985,19987],{"class":129,"line":8514},[127,19984,19972],{"class":147},[127,19986,7575],{"class":143},[127,19988,18056],{"class":147},[127,19990,19991,19993,19995,19998,20000,20003,20005],{"class":129,"line":8519},[127,19992,2095],{"class":147},[127,19994,1718],{"class":290},[127,19996,19997],{"class":781},"\"P2的年龄为：\"",[127,19999,1718],{"class":290},[127,20001,20002],{"class":147},"p2.m_Age",[127,20004,1718],{"class":290},[127,20006,1740],{"class":147},[127,20008,20009],{"class":129,"line":8525},[127,20010,170],{"class":147},[127,20012,20013],{"class":129,"line":8552},[127,20014,20015],{"class":133},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[127,20017,20018],{"class":129,"line":8557},[127,20019,20020],{"class":133},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[127,20022,20023,20025,20028,20030,20032,20034],{"class":129,"line":8563},[127,20024,5906],{"class":290},[127,20026,20027],{"class":143}," doWork",[127,20029,681],{"class":147},[127,20031,19587],{"class":143},[127,20033,7367],{"class":5758},[127,20035,687],{"class":147},[127,20037,20038],{"class":129,"line":8575},[127,20039,2090],{"class":147},[127,20041,20042,20044,20046,20049,20051],{"class":129,"line":8587},[127,20043,7071],{"class":147},[127,20045,1718],{"class":290},[127,20047,20048],{"class":781}," \"doWork函数调用\"",[127,20050,1989],{"class":290},[127,20052,9382],{"class":147},[127,20054,20055],{"class":129,"line":8599},[127,20056,170],{"class":147},[127,20058,20059,20061,20063],{"class":129,"line":10258},[127,20060,5906],{"class":290},[127,20062,6199],{"class":143},[127,20064,2518],{"class":147},[127,20066,20067],{"class":129,"line":10283},[127,20068,2090],{"class":147},[127,20070,20071],{"class":129,"line":10306},[127,20072,15855],{"class":147},[127,20074,20075,20078],{"class":129,"line":10330},[127,20076,20077],{"class":143},"    doWork",[127,20079,20080],{"class":147},"(p);\n",[127,20082,20083],{"class":129,"line":10335},[127,20084,170],{"class":147},[127,20086,20087],{"class":129,"line":10340},[127,20088,20089],{"class":133},"\u002F\u002F 3.以值方式返回局部对象\n",[127,20091,20092,20094,20097],{"class":129,"line":10345},[127,20093,19587],{"class":143},[127,20095,20096],{"class":143}," doWork2",[127,20098,2518],{"class":147},[127,20100,20101],{"class":129,"line":10354},[127,20102,2090],{"class":147},[127,20104,20105],{"class":129,"line":10359},[127,20106,19577],{"class":147},[127,20108,20109,20111,20113,20115,20117,20119,20121,20123,20125,20127,20129],{"class":129,"line":10365},[127,20110,2095],{"class":147},[127,20112,1718],{"class":290},[127,20114,681],{"class":147},[127,20116,684],{"class":290},[127,20118,7060],{"class":290},[127,20120,1104],{"class":147},[127,20122,1028],{"class":290},[127,20124,7672],{"class":147},[127,20126,1718],{"class":290},[127,20128,1784],{"class":147},[127,20130,20131],{"class":133},"\u002F\u002F打印p1的地址\n",[127,20133,20134,20136,20139],{"class":129,"line":10386},[127,20135,4632],{"class":290},[127,20137,20138],{"class":147}," p1;",[127,20140,20141],{"class":133},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[127,20143,20144],{"class":129,"line":10392},[127,20145,170],{"class":147},[127,20147,20148,20150,20152],{"class":129,"line":10406},[127,20149,5906],{"class":290},[127,20151,6271],{"class":143},[127,20153,2518],{"class":147},[127,20155,20156],{"class":129,"line":10412},[127,20157,2090],{"class":147},[127,20159,20160,20163,20165,20167],{"class":129,"line":10439},[127,20161,20162],{"class":147},"    Person p ",[127,20164,725],{"class":290},[127,20166,20096],{"class":143},[127,20168,6178],{"class":147},[127,20170,20171,20173,20175,20177,20179,20181,20183,20185,20187,20189,20191],{"class":129,"line":10448},[127,20172,2095],{"class":147},[127,20174,1718],{"class":290},[127,20176,681],{"class":147},[127,20178,684],{"class":290},[127,20180,7060],{"class":290},[127,20182,1104],{"class":147},[127,20184,1028],{"class":290},[127,20186,19],{"class":147},[127,20188,1718],{"class":290},[127,20190,1784],{"class":147},[127,20192,20193],{"class":133},"\u002F\u002F打印p的地址\n",[127,20195,20196],{"class":129,"line":10454},[127,20197,170],{"class":147},[127,20199,20200],{"class":129,"line":10462},[127,20201,2942],{"emptyLinePlaceholder":606},[127,20203,20204],{"class":129,"line":10467},[127,20205,2942],{"emptyLinePlaceholder":606},[127,20207,20208,20210,20212],{"class":129,"line":17145},[127,20209,684],{"class":290},[127,20211,2515],{"class":143},[127,20213,2518],{"class":147},[127,20215,20216],{"class":129,"line":17151},[127,20217,2090],{"class":147},[127,20219,20220],{"class":129,"line":17174},[127,20221,20222],{"class":133},"    \u002F\u002F test01();\n",[127,20224,20225],{"class":129,"line":17180},[127,20226,20227],{"class":133},"    \u002F\u002F test02();\n",[127,20229,20230,20233],{"class":129,"line":17203},[127,20231,20232],{"class":143},"    test03",[127,20234,6178],{"class":147},[127,20236,20237],{"class":129,"line":17217},[127,20238,20239],{"class":133},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[127,20241,20242],{"class":129,"line":17237},[127,20243,20244],{"class":133},"\u002F\u002F 输出结果如下：\n",[127,20246,20247],{"class":129,"line":17243},[127,20248,20249],{"class":133},"\u002F\u002F Person的默认构造函数调用\n",[127,20251,20252],{"class":129,"line":17254},[127,20253,20254],{"class":133},"\u002F\u002F 0x7fffffffceec\n",[127,20256,20257],{"class":129,"line":17277},[127,20258,20254],{"class":133},[127,20260,20261],{"class":129,"line":17299},[127,20262,20263],{"class":133},"\u002F\u002F Person的析构函数调用\n",[127,20265,20266],{"class":129,"line":17304},[127,20267,2942],{"emptyLinePlaceholder":606},[127,20269,20270],{"class":129,"line":17310},[127,20271,20272],{"class":133},"\u002F\u002F 之前的输出结果如下：\n",[127,20274,20275],{"class":129,"line":17324},[127,20276,20249],{"class":133},[127,20278,20279],{"class":129,"line":17337},[127,20280,20281],{"class":133},"\u002F\u002F 地址\n",[127,20283,20284],{"class":129,"line":17342},[127,20285,20286],{"class":133},"\u002F\u002F Person的拷贝构造函数调用\n",[127,20288,20289],{"class":129,"line":17356},[127,20290,20263],{"class":133},[127,20292,20293],{"class":129,"line":17361},[127,20294,20281],{"class":133},[127,20296,20297],{"class":129,"line":17367},[127,20298,20299],{"class":133},"\u002F\u002F (这两次输出的地址也是不同的) \n",[127,20301,20302],{"class":129,"line":17372},[127,20303,20304],{"class":133},"\u002F\u002F Person的析构函数调用     \n",[127,20306,20307,20309,20311],{"class":129,"line":17386},[127,20308,4632],{"class":290},[127,20310,4635],{"class":154},[127,20312,164],{"class":147},[127,20314,20315],{"class":129,"line":17391},[127,20316,170],{"class":147},[19,20318,20319],{},"简化版理解",[117,20321,20323],{"className":669,"code":20322,"language":671,"meta":122,"style":122},"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",[124,20324,20325,20333,20337,20343,20356,20367,20371,20383,20396,20404,20408,20424,20437,20446,20450,20455,20461,20474,20478,20482,20489,20493,20497,20502,20510,20514,20530,20543,20556,20560,20565,20573,20577,20581,20586,20591,20607,20615,20622,20628,20632,20636,20641,20649,20653,20657,20680,20687,20691,20695,20703,20707,20717,20739,20743,20747,20751,20759,20763,20768,20773,20779,20783,20793,20797,20805],{"__ignoreMap":122},[127,20326,20327,20329,20331],{"class":129,"line":130},[127,20328,15236],{"class":290},[127,20330,16111],{"class":143},[127,20332,148],{"class":147},[127,20334,20335],{"class":129,"line":137},[127,20336,15258],{"class":290},[127,20338,20339,20341],{"class":129,"line":151},[127,20340,19060],{"class":143},[127,20342,11395],{"class":147},[127,20344,20345,20347,20349,20352,20354],{"class":129,"line":167},[127,20346,10211],{"class":147},[127,20348,1718],{"class":290},[127,20350,20351],{"class":781}," \"无参构造函数!\"",[127,20353,1989],{"class":290},[127,20355,9382],{"class":147},[127,20357,20358,20361,20363,20365],{"class":129,"line":415},[127,20359,20360],{"class":147},"        mAge ",[127,20362,725],{"class":290},[127,20364,4635],{"class":154},[127,20366,164],{"class":147},[127,20368,20369],{"class":129,"line":421},[127,20370,2729],{"class":147},[127,20372,20373,20375,20377,20379,20381],{"class":129,"line":1766},[127,20374,19060],{"class":143},[127,20376,681],{"class":147},[127,20378,684],{"class":290},[127,20380,16230],{"class":5758},[127,20382,12984],{"class":147},[127,20384,20385,20387,20389,20392,20394],{"class":129,"line":1856},[127,20386,10211],{"class":147},[127,20388,1718],{"class":290},[127,20390,20391],{"class":781}," \"有参构造函数!\"",[127,20393,1989],{"class":290},[127,20395,9382],{"class":147},[127,20397,20398,20400,20402],{"class":129,"line":1862},[127,20399,20360],{"class":147},[127,20401,725],{"class":290},[127,20403,8339],{"class":147},[127,20405,20406],{"class":129,"line":1874},[127,20407,2729],{"class":147},[127,20409,20410,20412,20414,20416,20418,20420,20422],{"class":129,"line":2155},[127,20411,19060],{"class":143},[127,20413,681],{"class":147},[127,20415,7334],{"class":290},[127,20417,16111],{"class":143},[127,20419,1028],{"class":290},[127,20421,7367],{"class":5758},[127,20423,12984],{"class":147},[127,20425,20426,20428,20430,20433,20435],{"class":129,"line":2160},[127,20427,10211],{"class":147},[127,20429,1718],{"class":290},[127,20431,20432],{"class":781}," \"拷贝构造函数!\"",[127,20434,1989],{"class":290},[127,20436,9382],{"class":147},[127,20438,20439,20441,20443],{"class":129,"line":2166},[127,20440,20360],{"class":147},[127,20442,725],{"class":290},[127,20444,20445],{"class":147}," p.mAge;\n",[127,20447,20448],{"class":129,"line":2171},[127,20449,2729],{"class":147},[127,20451,20452],{"class":129,"line":2185},[127,20453,20454],{"class":133},"    \u002F\u002F析构函数在释放内存之前调用\n",[127,20456,20457,20459],{"class":129,"line":2190},[127,20458,19093],{"class":143},[127,20460,11395],{"class":147},[127,20462,20463,20465,20467,20470,20472],{"class":129,"line":2196},[127,20464,10211],{"class":147},[127,20466,1718],{"class":290},[127,20468,20469],{"class":781}," \"析构函数!\"",[127,20471,1989],{"class":290},[127,20473,9382],{"class":147},[127,20475,20476],{"class":129,"line":2217},[127,20477,2729],{"class":147},[127,20479,20480],{"class":129,"line":2222},[127,20481,15258],{"class":290},[127,20483,20484,20486],{"class":129,"line":2236},[127,20485,2527],{"class":290},[127,20487,20488],{"class":147}," mAge;\n",[127,20490,20491],{"class":129,"line":2241},[127,20492,4537],{"class":147},[127,20494,20495],{"class":129,"line":2270},[127,20496,2942],{"emptyLinePlaceholder":606},[127,20498,20499],{"class":129,"line":2275},[127,20500,20501],{"class":133},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[127,20503,20504,20506,20508],{"class":129,"line":2292},[127,20505,5906],{"class":290},[127,20507,6130],{"class":143},[127,20509,11395],{"class":147},[127,20511,20512],{"class":129,"line":2297},[127,20513,2942],{"emptyLinePlaceholder":606},[127,20515,20516,20518,20521,20523,20525,20527],{"class":129,"line":2302},[127,20517,19972],{"class":147},[127,20519,20520],{"class":143},"man",[127,20522,681],{"class":147},[127,20524,986],{"class":154},[127,20526,6508],{"class":147},[127,20528,20529],{"class":133}," \u002F\u002Fp对象已经创建完毕\n",[127,20531,20532,20534,20537,20540],{"class":129,"line":2307},[127,20533,19972],{"class":147},[127,20535,20536],{"class":143},"newman",[127,20538,20539],{"class":147},"(man);",[127,20541,20542],{"class":133}," \u002F\u002F调用拷贝构造函数\n",[127,20544,20545,20548,20550,20553],{"class":129,"line":2321},[127,20546,20547],{"class":147},"    Person newman2 ",[127,20549,725],{"class":290},[127,20551,20552],{"class":147}," man;",[127,20554,20555],{"class":133}," \u002F\u002F拷贝构造\n",[127,20557,20558],{"class":129,"line":2326},[127,20559,2942],{"emptyLinePlaceholder":606},[127,20561,20562],{"class":129,"line":3119},[127,20563,20564],{"class":133},"    \u002F\u002FPerson newman3;\n",[127,20566,20567,20570],{"class":129,"line":3133},[127,20568,20569],{"class":133},"    \u002F\u002Fnewman3 = man;",[127,20571,20572],{"class":133}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[127,20574,20575],{"class":129,"line":3141},[127,20576,170],{"class":147},[127,20578,20579],{"class":129,"line":3146},[127,20580,2942],{"emptyLinePlaceholder":606},[127,20582,20583],{"class":129,"line":3152},[127,20584,20585],{"class":133},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[127,20587,20588],{"class":129,"line":3158},[127,20589,20590],{"class":133},"\u002F\u002F相当于Person p1 = p;\n",[127,20592,20593,20595,20597,20599,20601,20604],{"class":129,"line":3163},[127,20594,5906],{"class":290},[127,20596,20027],{"class":143},[127,20598,681],{"class":147},[127,20600,19587],{"class":143},[127,20602,20603],{"class":5758}," p1",[127,20605,20606],{"class":147},") {}\n",[127,20608,20609,20611,20613],{"class":129,"line":8490},[127,20610,5906],{"class":290},[127,20612,6199],{"class":143},[127,20614,11395],{"class":147},[127,20616,20617,20619],{"class":129,"line":8514},[127,20618,19145],{"class":147},[127,20620,20621],{"class":133}," \u002F\u002F无参构造函数\n",[127,20623,20624,20626],{"class":129,"line":8519},[127,20625,20077],{"class":143},[127,20627,20080],{"class":147},[127,20629,20630],{"class":129,"line":8525},[127,20631,170],{"class":147},[127,20633,20634],{"class":129,"line":8552},[127,20635,2942],{"emptyLinePlaceholder":606},[127,20637,20638],{"class":129,"line":8557},[127,20639,20640],{"class":133},"\u002F\u002F3. 以值方式返回局部对象\n",[127,20642,20643,20645,20647],{"class":129,"line":8563},[127,20644,19587],{"class":143},[127,20646,20096],{"class":143},[127,20648,2518],{"class":147},[127,20650,20651],{"class":129,"line":8575},[127,20652,2090],{"class":147},[127,20654,20655],{"class":129,"line":8587},[127,20656,19577],{"class":147},[127,20658,20659,20661,20663,20665,20667,20669,20671,20673,20676,20678],{"class":129,"line":8599},[127,20660,7071],{"class":147},[127,20662,1718],{"class":290},[127,20664,2201],{"class":147},[127,20666,684],{"class":290},[127,20668,7060],{"class":290},[127,20670,1104],{"class":147},[127,20672,1028],{"class":290},[127,20674,20675],{"class":147},"p1 ",[127,20677,1718],{"class":290},[127,20679,9382],{"class":147},[127,20681,20682,20684],{"class":129,"line":10258},[127,20683,4632],{"class":290},[127,20685,20686],{"class":147}," p1;\n",[127,20688,20689],{"class":129,"line":10283},[127,20690,170],{"class":147},[127,20692,20693],{"class":129,"line":10306},[127,20694,2942],{"emptyLinePlaceholder":606},[127,20696,20697,20699,20701],{"class":129,"line":10330},[127,20698,5906],{"class":290},[127,20700,6271],{"class":143},[127,20702,2518],{"class":147},[127,20704,20705],{"class":129,"line":10335},[127,20706,2090],{"class":147},[127,20708,20709,20711,20713,20715],{"class":129,"line":10340},[127,20710,20162],{"class":147},[127,20712,725],{"class":290},[127,20714,20096],{"class":143},[127,20716,6178],{"class":147},[127,20718,20719,20721,20723,20725,20727,20729,20731,20733,20735,20737],{"class":129,"line":10345},[127,20720,7071],{"class":147},[127,20722,1718],{"class":290},[127,20724,2201],{"class":147},[127,20726,684],{"class":290},[127,20728,7060],{"class":290},[127,20730,1104],{"class":147},[127,20732,1028],{"class":290},[127,20734,11990],{"class":147},[127,20736,1718],{"class":290},[127,20738,9382],{"class":147},[127,20740,20741],{"class":129,"line":10354},[127,20742,170],{"class":147},[127,20744,20745],{"class":129,"line":10359},[127,20746,2942],{"emptyLinePlaceholder":606},[127,20748,20749],{"class":129,"line":10365},[127,20750,2942],{"emptyLinePlaceholder":606},[127,20752,20753,20755,20757],{"class":129,"line":10386},[127,20754,684],{"class":290},[127,20756,2515],{"class":143},[127,20758,11395],{"class":147},[127,20760,20761],{"class":129,"line":10392},[127,20762,2942],{"emptyLinePlaceholder":606},[127,20764,20765],{"class":129,"line":10406},[127,20766,20767],{"class":133},"    \u002F\u002Ftest01();\n",[127,20769,20770],{"class":129,"line":10412},[127,20771,20772],{"class":133},"    \u002F\u002Ftest02();\n",[127,20774,20775,20777],{"class":129,"line":10439},[127,20776,20232],{"class":143},[127,20778,6178],{"class":147},[127,20780,20781],{"class":129,"line":10448},[127,20782,2942],{"emptyLinePlaceholder":606},[127,20784,20785,20787,20789,20791],{"class":129,"line":10454},[127,20786,2845],{"class":143},[127,20788,681],{"class":147},[127,20790,2850],{"class":781},[127,20792,3261],{"class":147},[127,20794,20795],{"class":129,"line":10462},[127,20796,2942],{"emptyLinePlaceholder":606},[127,20798,20799,20801,20803],{"class":129,"line":10467},[127,20800,4632],{"class":290},[127,20802,4635],{"class":154},[127,20804,164],{"class":147},[127,20806,20807],{"class":129,"line":17145},[127,20808,170],{"class":147},[62,20810,20812],{"id":20811},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20814,20815],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20817,20818],{},"1．默认构造函数(无参，函数体为空)",[19,20820,20821],{},"2．默认析构函数(无参，函数体为空)",[19,20823,20824],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20826,20827],{},"构造函数调用规则如下：",[1681,20829,20830,20833],{},[635,20831,20832],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[635,20834,20835],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[117,20837,20839],{"className":669,"code":20838,"language":671,"meta":122,"style":122},"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",[124,20840,20841,20849,20853,20858,20864,20876,20880,20885,20897,20906,20918,20922,20926,20942,20951,20963,20967,20971,20977,20989,20993,20997,21003,21007,21011,21019,21023,21035,21040,21048,21052,21070,21074,21078,21086,21090,21095,21103,21118,21131,21135,21140,21147,21163,21176,21180,21184,21192,21196,21202,21206,21216,21220,21228],{"__ignoreMap":122},[127,20842,20843,20845,20847],{"class":129,"line":130},[127,20844,15236],{"class":290},[127,20846,16111],{"class":143},[127,20848,148],{"class":147},[127,20850,20851],{"class":129,"line":137},[127,20852,15258],{"class":290},[127,20854,20855],{"class":129,"line":151},[127,20856,20857],{"class":133},"    \u002F\u002F无参（默认）构造函数\n",[127,20859,20860,20862],{"class":129,"line":167},[127,20861,19060],{"class":143},[127,20863,11395],{"class":147},[127,20865,20866,20868,20870,20872,20874],{"class":129,"line":415},[127,20867,10211],{"class":147},[127,20869,1718],{"class":290},[127,20871,20351],{"class":781},[127,20873,1989],{"class":290},[127,20875,9382],{"class":147},[127,20877,20878],{"class":129,"line":421},[127,20879,2729],{"class":147},[127,20881,20882],{"class":129,"line":1766},[127,20883,20884],{"class":133},"    \u002F\u002F有参构造函数\n",[127,20886,20887,20889,20891,20893,20895],{"class":129,"line":1856},[127,20888,19060],{"class":143},[127,20890,681],{"class":147},[127,20892,684],{"class":290},[127,20894,1943],{"class":5758},[127,20896,12984],{"class":147},[127,20898,20899,20902,20904],{"class":129,"line":1862},[127,20900,20901],{"class":147},"        age ",[127,20903,725],{"class":290},[127,20905,1977],{"class":147},[127,20907,20908,20910,20912,20914,20916],{"class":129,"line":1874},[127,20909,10211],{"class":147},[127,20911,1718],{"class":290},[127,20913,20391],{"class":781},[127,20915,1989],{"class":290},[127,20917,9382],{"class":147},[127,20919,20920],{"class":129,"line":2155},[127,20921,2729],{"class":147},[127,20923,20924],{"class":129,"line":2160},[127,20925,19415],{"class":133},[127,20927,20928,20930,20932,20934,20936,20938,20940],{"class":129,"line":2166},[127,20929,19060],{"class":143},[127,20931,681],{"class":147},[127,20933,7334],{"class":290},[127,20935,16111],{"class":143},[127,20937,1028],{"class":290},[127,20939,7367],{"class":5758},[127,20941,12984],{"class":147},[127,20943,20944,20946,20948],{"class":129,"line":2171},[127,20945,20901],{"class":147},[127,20947,725],{"class":290},[127,20949,20950],{"class":147}," p.age;\n",[127,20952,20953,20955,20957,20959,20961],{"class":129,"line":2185},[127,20954,10211],{"class":147},[127,20956,1718],{"class":290},[127,20958,20432],{"class":781},[127,20960,1989],{"class":290},[127,20962,9382],{"class":147},[127,20964,20965],{"class":129,"line":2190},[127,20966,2729],{"class":147},[127,20968,20969],{"class":129,"line":2196},[127,20970,19088],{"class":133},[127,20972,20973,20975],{"class":129,"line":2217},[127,20974,19093],{"class":143},[127,20976,11395],{"class":147},[127,20978,20979,20981,20983,20985,20987],{"class":129,"line":2222},[127,20980,10211],{"class":147},[127,20982,1718],{"class":290},[127,20984,20469],{"class":781},[127,20986,1989],{"class":290},[127,20988,9382],{"class":147},[127,20990,20991],{"class":129,"line":2236},[127,20992,2729],{"class":147},[127,20994,20995],{"class":129,"line":2241},[127,20996,15258],{"class":290},[127,20998,20999,21001],{"class":129,"line":2270},[127,21000,2527],{"class":290},[127,21002,8339],{"class":147},[127,21004,21005],{"class":129,"line":2275},[127,21006,4537],{"class":147},[127,21008,21009],{"class":129,"line":2292},[127,21010,2942],{"emptyLinePlaceholder":606},[127,21012,21013,21015,21017],{"class":129,"line":2297},[127,21014,5906],{"class":290},[127,21016,6130],{"class":143},[127,21018,2518],{"class":147},[127,21020,21021],{"class":129,"line":2302},[127,21022,2090],{"class":147},[127,21024,21025,21027,21029,21031,21033],{"class":129,"line":2307},[127,21026,19972],{"class":147},[127,21028,7672],{"class":143},[127,21030,681],{"class":147},[127,21032,1324],{"class":154},[127,21034,3261],{"class":147},[127,21036,21037],{"class":129,"line":2321},[127,21038,21039],{"class":133},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[127,21041,21042,21044,21046],{"class":129,"line":2326},[127,21043,19972],{"class":147},[127,21045,7575],{"class":143},[127,21047,18056],{"class":147},[127,21049,21050],{"class":129,"line":3119},[127,21051,2942],{"emptyLinePlaceholder":606},[127,21053,21054,21056,21058,21061,21063,21066,21068],{"class":129,"line":3133},[127,21055,7071],{"class":147},[127,21057,1718],{"class":290},[127,21059,21060],{"class":781}," \"p2的年龄为： \"",[127,21062,1989],{"class":290},[127,21064,21065],{"class":147}," p2.age ",[127,21067,1718],{"class":290},[127,21069,9382],{"class":147},[127,21071,21072],{"class":129,"line":3141},[127,21073,170],{"class":147},[127,21075,21076],{"class":129,"line":3146},[127,21077,2942],{"emptyLinePlaceholder":606},[127,21079,21080,21082,21084],{"class":129,"line":3152},[127,21081,5906],{"class":290},[127,21083,6199],{"class":143},[127,21085,2518],{"class":147},[127,21087,21088],{"class":129,"line":3158},[127,21089,2090],{"class":147},[127,21091,21092],{"class":129,"line":3163},[127,21093,21094],{"class":133},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[127,21096,21097,21100],{"class":129,"line":8490},[127,21098,21099],{"class":147},"    Person p1;",[127,21101,21102],{"class":133}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[127,21104,21105,21107,21109,21111,21113,21115],{"class":129,"line":8514},[127,21106,19972],{"class":147},[127,21108,7575],{"class":143},[127,21110,681],{"class":147},[127,21112,1121],{"class":154},[127,21114,6508],{"class":147},[127,21116,21117],{"class":133}," \u002F\u002F用户提供的有参\n",[127,21119,21120,21122,21125,21128],{"class":129,"line":8519},[127,21121,19972],{"class":147},[127,21123,21124],{"class":143},"p3",[127,21126,21127],{"class":147},"(p2);",[127,21129,21130],{"class":133}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[127,21132,21133],{"class":129,"line":8525},[127,21134,2942],{"emptyLinePlaceholder":606},[127,21136,21137],{"class":129,"line":8552},[127,21138,21139],{"class":133},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[127,21141,21142,21145],{"class":129,"line":8557},[127,21143,21144],{"class":147},"    Person p4;",[127,21146,21102],{"class":133},[127,21148,21149,21151,21154,21156,21158,21160],{"class":129,"line":8563},[127,21150,19972],{"class":147},[127,21152,21153],{"class":143},"p5",[127,21155,681],{"class":147},[127,21157,1121],{"class":154},[127,21159,6508],{"class":147},[127,21161,21162],{"class":133}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[127,21164,21165,21167,21170,21173],{"class":129,"line":8575},[127,21166,19972],{"class":147},[127,21168,21169],{"class":143},"p6",[127,21171,21172],{"class":147},"(p5);",[127,21174,21175],{"class":133}," \u002F\u002F用户自己提供拷贝构造\n",[127,21177,21178],{"class":129,"line":8587},[127,21179,170],{"class":147},[127,21181,21182],{"class":129,"line":8599},[127,21183,2942],{"emptyLinePlaceholder":606},[127,21185,21186,21188,21190],{"class":129,"line":10258},[127,21187,684],{"class":290},[127,21189,2515],{"class":143},[127,21191,11395],{"class":147},[127,21193,21194],{"class":129,"line":10283},[127,21195,2942],{"emptyLinePlaceholder":606},[127,21197,21198,21200],{"class":129,"line":10306},[127,21199,6175],{"class":143},[127,21201,6178],{"class":147},[127,21203,21204],{"class":129,"line":10330},[127,21205,2942],{"emptyLinePlaceholder":606},[127,21207,21208,21210,21212,21214],{"class":129,"line":10335},[127,21209,2845],{"class":143},[127,21211,681],{"class":147},[127,21213,2850],{"class":781},[127,21215,3261],{"class":147},[127,21217,21218],{"class":129,"line":10340},[127,21219,2942],{"emptyLinePlaceholder":606},[127,21221,21222,21224,21226],{"class":129,"line":10345},[127,21223,4632],{"class":290},[127,21225,4635],{"class":154},[127,21227,164],{"class":147},[127,21229,21230],{"class":129,"line":10354},[127,21231,170],{"class":147},[62,21233,21235],{"id":21234},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21237,21238],{},"浅拷贝：简单的赋值拷贝操作",[19,21240,21241],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[117,21243,21245],{"className":669,"code":21244,"language":671,"meta":122,"style":122},"#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",[124,21246,21247,21253,21263,21269,21273,21277,21282,21288,21292,21305,21309,21313,21320,21324,21334,21349,21362,21366,21371,21376,21392,21396,21409,21414,21419,21424,21433,21438,21453,21457,21461,21465,21471,21475,21480,21495,21499,21510,21524,21528,21537,21541,21547,21559,21563,21571,21575,21592,21623,21631,21659,21663,21667,21675,21679,21685],{"__ignoreMap":122},[127,21248,21249,21251],{"class":129,"line":130},[127,21250,2492],{"class":290},[127,21252,2495],{"class":781},[127,21254,21255,21257,21259,21261],{"class":129,"line":137},[127,21256,2500],{"class":290},[127,21258,2503],{"class":290},[127,21260,2506],{"class":143},[127,21262,164],{"class":147},[127,21264,21265,21267],{"class":129,"line":151},[127,21266,15236],{"class":290},[127,21268,15713],{"class":143},[127,21270,21271],{"class":129,"line":167},[127,21272,2090],{"class":147},[127,21274,21275],{"class":129,"line":415},[127,21276,15258],{"class":290},[127,21278,21279],{"class":129,"line":421},[127,21280,21281],{"class":133},"    \u002F\u002F默认构造函数\n",[127,21283,21284,21286],{"class":129,"line":1766},[127,21285,19060],{"class":143},[127,21287,2518],{"class":147},[127,21289,21290],{"class":129,"line":1856},[127,21291,2572],{"class":147},[127,21293,21294,21296,21298,21301,21303],{"class":129,"line":1862},[127,21295,3993],{"class":147},[127,21297,1718],{"class":290},[127,21299,21300],{"class":781},"\"默认构造函数\"",[127,21302,1718],{"class":290},[127,21304,1740],{"class":147},[127,21306,21307],{"class":129,"line":1874},[127,21308,2729],{"class":147},[127,21310,21311],{"class":129,"line":2155},[127,21312,20884],{"class":133},[127,21314,21315,21317],{"class":129,"line":2160},[127,21316,19093],{"class":143},[127,21318,21319],{"class":147},"(int age,int height)\n",[127,21321,21322],{"class":129,"line":2166},[127,21323,2572],{"class":147},[127,21325,21326,21329,21331],{"class":129,"line":2171},[127,21327,21328],{"class":147},"        m_Age",[127,21330,725],{"class":290},[127,21332,21333],{"class":147},"age;\n",[127,21335,21336,21339,21341,21343,21346],{"class":129,"line":2185},[127,21337,21338],{"class":147},"        m_Height",[127,21340,12259],{"class":290},[127,21342,2924],{"class":290},[127,21344,21345],{"class":147},"(height);",[127,21347,21348],{"class":133},"\u002F\u002F放到堆区\n",[127,21350,21351,21353,21355,21358,21360],{"class":129,"line":2190},[127,21352,3993],{"class":147},[127,21354,1718],{"class":290},[127,21356,21357],{"class":781},"\"有参构造函数\"",[127,21359,1718],{"class":290},[127,21361,1740],{"class":147},[127,21363,21364],{"class":129,"line":2196},[127,21365,2729],{"class":147},[127,21367,21368],{"class":129,"line":2217},[127,21369,21370],{"class":133},"    \u002F\u002F深拷贝解决上述问题\n",[127,21372,21373],{"class":129,"line":2222},[127,21374,21375],{"class":133},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[127,21377,21378,21380,21382,21384,21386,21388,21390],{"class":129,"line":2236},[127,21379,19060],{"class":143},[127,21381,681],{"class":147},[127,21383,7334],{"class":290},[127,21385,16111],{"class":143},[127,21387,11126],{"class":290},[127,21389,19],{"class":5758},[127,21391,687],{"class":147},[127,21393,21394],{"class":129,"line":2241},[127,21395,2572],{"class":147},[127,21397,21398,21400,21402,21405,21407],{"class":129,"line":2270},[127,21399,3993],{"class":147},[127,21401,1718],{"class":290},[127,21403,21404],{"class":781},"\"拷贝构造函数\"",[127,21406,1718],{"class":290},[127,21408,1740],{"class":147},[127,21410,21411],{"class":129,"line":2275},[127,21412,21413],{"class":133},"        \u002F\u002F编译器默认的写如下注释部分\n",[127,21415,21416],{"class":129,"line":2292},[127,21417,21418],{"class":133},"        \u002F\u002Fm_Age=p.m_Age;\n",[127,21420,21421],{"class":129,"line":2297},[127,21422,21423],{"class":133},"        \u002F\u002Fm_Height=p.m_Height;\n",[127,21425,21426,21428,21430],{"class":129,"line":2302},[127,21427,21328],{"class":147},[127,21429,725],{"class":290},[127,21431,21432],{"class":147},"p.m_Age;\n",[127,21434,21435],{"class":129,"line":2307},[127,21436,21437],{"class":133},"        \u002F\u002F深拷贝操作\n",[127,21439,21440,21442,21444,21446,21448,21450],{"class":129,"line":2321},[127,21441,21338],{"class":147},[127,21443,12259],{"class":290},[127,21445,2924],{"class":290},[127,21447,681],{"class":147},[127,21449,1130],{"class":290},[127,21451,21452],{"class":147},"p.m_Height);\n",[127,21454,21455],{"class":129,"line":2326},[127,21456,2729],{"class":147},[127,21458,21459],{"class":129,"line":3119},[127,21460,2942],{"emptyLinePlaceholder":606},[127,21462,21463],{"class":129,"line":3133},[127,21464,19088],{"class":133},[127,21466,21467,21469],{"class":129,"line":3141},[127,21468,19093],{"class":143},[127,21470,2518],{"class":147},[127,21472,21473],{"class":129,"line":3146},[127,21474,2572],{"class":147},[127,21476,21477],{"class":129,"line":3152},[127,21478,21479],{"class":133},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[127,21481,21482,21484,21487,21490,21493],{"class":129,"line":3158},[127,21483,3039],{"class":290},[127,21485,21486],{"class":147},"(m_Height ",[127,21488,21489],{"class":290},"!=",[127,21491,21492],{"class":154}," NULL",[127,21494,687],{"class":147},[127,21496,21497],{"class":129,"line":3163},[127,21498,3052],{"class":147},[127,21500,21501,21504,21507],{"class":129,"line":8490},[127,21502,21503],{"class":290},"            delete",[127,21505,21506],{"class":147}," m_Height;",[127,21508,21509],{"class":133}," \u002F\u002F释放堆区内存\n",[127,21511,21512,21515,21517,21519,21521],{"class":129,"line":8514},[127,21513,21514],{"class":147},"            m_Height",[127,21516,725],{"class":290},[127,21518,2934],{"class":154},[127,21520,734],{"class":147},[127,21522,21523],{"class":133}," \u002F\u002F防止野指针\n",[127,21525,21526],{"class":129,"line":8519},[127,21527,3071],{"class":147},[127,21529,21530,21532,21534],{"class":129,"line":8525},[127,21531,3993],{"class":147},[127,21533,1718],{"class":290},[127,21535,21536],{"class":781},"\"Person的析构函数调用\"\n",[127,21538,21539],{"class":129,"line":8552},[127,21540,2729],{"class":147},[127,21542,21543,21545],{"class":129,"line":8557},[127,21544,2527],{"class":290},[127,21546,16207],{"class":147},[127,21548,21549,21551,21553,21556],{"class":129,"line":8563},[127,21550,2527],{"class":290},[127,21552,7060],{"class":290},[127,21554,21555],{"class":147},"m_Height;",[127,21557,21558],{"class":133}," \u002F\u002F定义一个指针，指向身高\n",[127,21560,21561],{"class":129,"line":8575},[127,21562,4537],{"class":147},[127,21564,21565,21567,21569],{"class":129,"line":8587},[127,21566,5906],{"class":290},[127,21568,6130],{"class":143},[127,21570,2518],{"class":147},[127,21572,21573],{"class":129,"line":8599},[127,21574,2090],{"class":147},[127,21576,21577,21579,21581,21583,21585,21587,21590],{"class":129,"line":10258},[127,21578,19972],{"class":147},[127,21580,7672],{"class":143},[127,21582,681],{"class":147},[127,21584,1324],{"class":154},[127,21586,1053],{"class":147},[127,21588,21589],{"class":154},"160",[127,21591,3261],{"class":147},[127,21593,21594,21596,21598,21601,21603,21606,21608,21611,21613,21616,21618,21620],{"class":129,"line":10283},[127,21595,2095],{"class":147},[127,21597,1718],{"class":290},[127,21599,21600],{"class":781},"\"p1的年龄为:\"",[127,21602,1718],{"class":290},[127,21604,21605],{"class":147},"p1.m_Age",[127,21607,1718],{"class":290},[127,21609,21610],{"class":781},"\"身高为：\"",[127,21612,6961],{"class":290},[127,21614,21615],{"class":147},"p1.m_Height",[127,21617,1718],{"class":290},[127,21619,1784],{"class":147},[127,21621,21622],{"class":133},"  \u002F\u002F18\n",[127,21624,21625,21627,21629],{"class":129,"line":10306},[127,21626,19972],{"class":147},[127,21628,7575],{"class":143},[127,21630,18056],{"class":147},[127,21632,21633,21635,21637,21640,21642,21644,21646,21648,21650,21653,21655,21657],{"class":129,"line":10330},[127,21634,2095],{"class":147},[127,21636,1718],{"class":290},[127,21638,21639],{"class":781},"\"p2的年龄为：\"",[127,21641,1718],{"class":290},[127,21643,20002],{"class":147},[127,21645,1718],{"class":290},[127,21647,21610],{"class":781},[127,21649,6961],{"class":290},[127,21651,21652],{"class":147},"p2.m_Height",[127,21654,1718],{"class":290},[127,21656,1784],{"class":147},[127,21658,21622],{"class":133},[127,21660,21661],{"class":129,"line":10335},[127,21662,13752],{"class":147},[127,21664,21665],{"class":129,"line":10340},[127,21666,170],{"class":147},[127,21668,21669,21671,21673],{"class":129,"line":10345},[127,21670,684],{"class":290},[127,21672,2515],{"class":143},[127,21674,2518],{"class":147},[127,21676,21677],{"class":129,"line":10354},[127,21678,2090],{"class":147},[127,21680,21681,21683],{"class":129,"line":10359},[127,21682,6175],{"class":143},[127,21684,6178],{"class":147},[127,21686,21687],{"class":129,"line":10365},[127,21688,170],{"class":147},[19,21690,21691],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21693,21694],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21696,21697],{},[23,21698],{"alt":122,"src":21699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21701,21702],{},"浅拷贝问题要使用深拷贝来解决",[19,21704,21705],{},[23,21706],{"alt":122,"src":21707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21709,21710],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[62,21712,21714],{"id":21713},"_826初始化列表","8.2.6初始化列表",[19,21716,21717],{},"作用：初始化属性",[19,21719,5723],{},[117,21721,21724],{"className":21722,"code":21723,"language":5729},[5727],"构造函数():属性1(值1),属性2(值2).....{}\n",[124,21725,21723],{"__ignoreMap":122},[19,21727,21728],{},"例子",[117,21730,21732],{"className":669,"code":21731,"language":671,"meta":122,"style":122},"#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",[124,21733,21734,21740,21750,21756,21760,21765,21769,21774,21779,21784,21789,21794,21799,21803,21808,21813,21856,21865,21883,21901,21919,21923,21927,21934,21941,21948,21952,21956,21964,21968,21972,21992,22001,22005,22009,22019,22023,22031],{"__ignoreMap":122},[127,21735,21736,21738],{"class":129,"line":130},[127,21737,2492],{"class":290},[127,21739,2495],{"class":781},[127,21741,21742,21744,21746,21748],{"class":129,"line":137},[127,21743,2500],{"class":290},[127,21745,2503],{"class":290},[127,21747,2506],{"class":143},[127,21749,164],{"class":147},[127,21751,21752,21754],{"class":129,"line":151},[127,21753,15236],{"class":290},[127,21755,15713],{"class":143},[127,21757,21758],{"class":129,"line":167},[127,21759,2090],{"class":147},[127,21761,21762],{"class":129,"line":415},[127,21763,21764],{"class":290},"    public:\n",[127,21766,21767],{"class":129,"line":421},[127,21768,2942],{"emptyLinePlaceholder":606},[127,21770,21771],{"class":129,"line":1766},[127,21772,21773],{"class":133},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[127,21775,21776],{"class":129,"line":1856},[127,21777,21778],{"class":133},"    \u002F\u002FPerson(int a, int b, int c) {\n",[127,21780,21781],{"class":129,"line":1862},[127,21782,21783],{"class":133},"    \u002F\u002F  m_A = a;\n",[127,21785,21786],{"class":129,"line":1874},[127,21787,21788],{"class":133},"    \u002F\u002F  m_B = b;\n",[127,21790,21791],{"class":129,"line":2155},[127,21792,21793],{"class":133},"    \u002F\u002F  m_C = c;\n",[127,21795,21796],{"class":129,"line":2160},[127,21797,21798],{"class":133},"    \u002F\u002F}\n",[127,21800,21801],{"class":129,"line":2166},[127,21802,2942],{"emptyLinePlaceholder":606},[127,21804,21805],{"class":129,"line":2171},[127,21806,21807],{"class":133},"    \u002F\u002F初始化列表方式初始化\n",[127,21809,21810],{"class":129,"line":2185},[127,21811,21812],{"class":133},"    \u002F\u002F使用有参构造函数\n",[127,21814,21815,21817,21819,21821,21823,21825,21827,21829,21831,21833,21835,21838,21841,21844,21847,21850,21853],{"class":129,"line":2190},[127,21816,19060],{"class":143},[127,21818,681],{"class":147},[127,21820,684],{"class":290},[127,21822,1943],{"class":5758},[127,21824,12977],{"class":147},[127,21826,684],{"class":290},[127,21828,3375],{"class":5758},[127,21830,12977],{"class":147},[127,21832,684],{"class":290},[127,21834,3391],{"class":5758},[127,21836,21837],{"class":147},") :",[127,21839,21840],{"class":143},"m_A",[127,21842,21843],{"class":147},"(a), ",[127,21845,21846],{"class":143},"m_B",[127,21848,21849],{"class":147},"(b), ",[127,21851,21852],{"class":143},"m_C",[127,21854,21855],{"class":147},"(c) {}\n",[127,21857,21858,21860,21863],{"class":129,"line":2196},[127,21859,15451],{"class":290},[127,21861,21862],{"class":143}," PrintPerson",[127,21864,11395],{"class":147},[127,21866,21867,21869,21871,21874,21876,21879,21881],{"class":129,"line":2217},[127,21868,10211],{"class":147},[127,21870,1718],{"class":290},[127,21872,21873],{"class":781}," \"mA:\"",[127,21875,1989],{"class":290},[127,21877,21878],{"class":147}," m_A ",[127,21880,1718],{"class":290},[127,21882,9382],{"class":147},[127,21884,21885,21887,21889,21892,21894,21897,21899],{"class":129,"line":2222},[127,21886,10211],{"class":147},[127,21888,1718],{"class":290},[127,21890,21891],{"class":781}," \"mB:\"",[127,21893,1989],{"class":290},[127,21895,21896],{"class":147}," m_B ",[127,21898,1718],{"class":290},[127,21900,9382],{"class":147},[127,21902,21903,21905,21907,21910,21912,21915,21917],{"class":129,"line":2236},[127,21904,10211],{"class":147},[127,21906,1718],{"class":290},[127,21908,21909],{"class":781}," \"mC:\"",[127,21911,1989],{"class":290},[127,21913,21914],{"class":147}," m_C ",[127,21916,1718],{"class":290},[127,21918,9382],{"class":147},[127,21920,21921],{"class":129,"line":2241},[127,21922,2729],{"class":147},[127,21924,21925],{"class":129,"line":2270},[127,21926,15764],{"class":290},[127,21928,21929,21931],{"class":129,"line":2275},[127,21930,2527],{"class":290},[127,21932,21933],{"class":147}," m_A;\n",[127,21935,21936,21938],{"class":129,"line":2292},[127,21937,2527],{"class":290},[127,21939,21940],{"class":147}," m_B;\n",[127,21942,21943,21945],{"class":129,"line":2297},[127,21944,2527],{"class":290},[127,21946,21947],{"class":147}," m_C;\n",[127,21949,21950],{"class":129,"line":2302},[127,21951,4537],{"class":147},[127,21953,21954],{"class":129,"line":2307},[127,21955,2942],{"emptyLinePlaceholder":606},[127,21957,21958,21960,21962],{"class":129,"line":2321},[127,21959,684],{"class":290},[127,21961,2515],{"class":143},[127,21963,6520],{"class":147},[127,21965,21966],{"class":129,"line":2326},[127,21967,2090],{"class":147},[127,21969,21970],{"class":129,"line":3119},[127,21971,2942],{"emptyLinePlaceholder":606},[127,21973,21974,21976,21978,21980,21982,21984,21986,21988,21990],{"class":129,"line":3133},[127,21975,19972],{"class":147},[127,21977,19],{"class":143},[127,21979,681],{"class":147},[127,21981,893],{"class":154},[127,21983,12977],{"class":147},[127,21985,530],{"class":154},[127,21987,12977],{"class":147},[127,21989,749],{"class":154},[127,21991,3261],{"class":147},[127,21993,21994,21996,21999],{"class":129,"line":3141},[127,21995,16407],{"class":147},[127,21997,21998],{"class":143},"PrintPerson",[127,22000,6178],{"class":147},[127,22002,22003],{"class":129,"line":3146},[127,22004,2942],{"emptyLinePlaceholder":606},[127,22006,22007],{"class":129,"line":3152},[127,22008,2942],{"emptyLinePlaceholder":606},[127,22010,22011,22013,22015,22017],{"class":129,"line":3158},[127,22012,2845],{"class":143},[127,22014,681],{"class":147},[127,22016,2850],{"class":781},[127,22018,3261],{"class":147},[127,22020,22021],{"class":129,"line":3163},[127,22022,2942],{"emptyLinePlaceholder":606},[127,22024,22025,22027,22029],{"class":129,"line":8490},[127,22026,4632],{"class":290},[127,22028,4635],{"class":154},[127,22030,164],{"class":147},[127,22032,22033],{"class":129,"line":8514},[127,22034,170],{"class":147},[19,22036,22037,22038,22041,22042],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[30,22039,22040],{},"参数名就是定义的对象属性","，",[30,22043,22044],{},"属性后面的值为有参构造函数的形参",[117,22046,22048],{"className":669,"code":22047,"language":671,"meta":122,"style":122},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[124,22049,22050],{"__ignoreMap":122},[127,22051,22052,22054,22056,22058,22061,22063,22066,22068,22071,22073,22076,22078,22081,22083],{"class":129,"line":130},[127,22053,19587],{"class":143},[127,22055,681],{"class":147},[127,22057,684],{"class":290},[127,22059,22060],{"class":147}," a.",[127,22062,684],{"class":290},[127,22064,22065],{"class":147}," b,",[127,22067,684],{"class":290},[127,22069,22070],{"class":147}," b):",[127,22072,21840],{"class":143},[127,22074,22075],{"class":147},"(a),",[127,22077,21846],{"class":143},[127,22079,22080],{"class":147},"(c),",[127,22082,21852],{"class":143},[127,22084,22085],{"class":147},"(b) {}\n",[62,22087,22089],{"id":22088},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22091,22092],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22094,15175],{},[117,22096,22098],{"className":669,"code":22097,"language":671,"meta":122,"style":122},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[124,22099,22100,22105,22110,22114,22119,22123],{"__ignoreMap":122},[127,22101,22102],{"class":129,"line":130},[127,22103,22104],{"class":147},"A{};\n",[127,22106,22107],{"class":129,"line":137},[127,22108,22109],{"class":147},"B\n",[127,22111,22112],{"class":129,"line":151},[127,22113,2090],{"class":147},[127,22115,22116],{"class":129,"line":167},[127,22117,22118],{"class":147},"    A a;\n",[127,22120,22121],{"class":129,"line":415},[127,22122,170],{"class":147},[127,22124,22125],{"class":129,"line":421},[127,22126,22127],{"class":133},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22129,22130],{},"案例",[117,22132,22134],{"className":669,"code":22133,"language":671,"meta":122,"style":122},"\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",[124,22135,22136,22141,22148,22152,22157,22162,22176,22180,22190,22201,22205,22212,22216,22229,22233,22238,22243,22247,22253,22257,22261,22265,22296,22300,22311,22315,22321,22325,22338,22342,22346,22350,22355,22360,22364,22372,22376,22393,22412,22416,22424,22428,22434],{"__ignoreMap":122},[127,22137,22138],{"class":129,"line":130},[127,22139,22140],{"class":133},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[127,22142,22143,22145],{"class":129,"line":137},[127,22144,15236],{"class":290},[127,22146,22147],{"class":143}," Phone\n",[127,22149,22150],{"class":129,"line":151},[127,22151,2090],{"class":147},[127,22153,22154],{"class":129,"line":167},[127,22155,22156],{"class":147},"public：\n",[127,22158,22159],{"class":129,"line":415},[127,22160,22161],{"class":133},"    \u002F\u002F 赋值(构造函数)\n",[127,22163,22164,22167,22169,22171,22174],{"class":129,"line":421},[127,22165,22166],{"class":143},"    Phone",[127,22168,681],{"class":147},[127,22170,15459],{"class":143},[127,22172,22173],{"class":5758}," pName",[127,22175,687],{"class":147},[127,22177,22178],{"class":129,"line":1766},[127,22179,2572],{"class":147},[127,22181,22182,22185,22187],{"class":129,"line":1856},[127,22183,22184],{"class":147},"        m_pName",[127,22186,725],{"class":290},[127,22188,22189],{"class":147},"pName;\n",[127,22191,22192,22194,22196,22199],{"class":129,"line":1862},[127,22193,3993],{"class":147},[127,22195,1718],{"class":290},[127,22197,22198],{"class":781},"\"Phone的构造函数调用\"",[127,22200,164],{"class":147},[127,22202,22203],{"class":129,"line":1874},[127,22204,2729],{"class":147},[127,22206,22207,22210],{"class":129,"line":2155},[127,22208,22209],{"class":143},"    ~Phone",[127,22211,2518],{"class":147},[127,22213,22214],{"class":129,"line":2160},[127,22215,2572],{"class":147},[127,22217,22218,22220,22222,22225,22227],{"class":129,"line":2166},[127,22219,3993],{"class":147},[127,22221,1718],{"class":290},[127,22223,22224],{"class":781},"\"Phone析构函数调用\"",[127,22226,1718],{"class":290},[127,22228,1740],{"class":147},[127,22230,22231],{"class":129,"line":2171},[127,22232,2729],{"class":147},[127,22234,22235],{"class":129,"line":2185},[127,22236,22237],{"class":133},"    \u002F\u002F\n",[127,22239,22240],{"class":129,"line":2190},[127,22241,22242],{"class":147},"    string m_PName;\n",[127,22244,22245],{"class":129,"line":2196},[127,22246,4537],{"class":147},[127,22248,22249,22251],{"class":129,"line":2217},[127,22250,15236],{"class":290},[127,22252,15713],{"class":143},[127,22254,22255],{"class":129,"line":2222},[127,22256,2090],{"class":147},[127,22258,22259],{"class":129,"line":2236},[127,22260,15258],{"class":290},[127,22262,22263],{"class":129,"line":2241},[127,22264,17535],{"class":133},[127,22266,22267,22269,22271,22273,22275,22277,22279,22282,22285,22287,22290,22293],{"class":129,"line":2270},[127,22268,19060],{"class":143},[127,22270,681],{"class":147},[127,22272,15459],{"class":143},[127,22274,15462],{"class":5758},[127,22276,1053],{"class":147},[127,22278,15459],{"class":143},[127,22280,22281],{"class":5758}," pname",[127,22283,22284],{"class":147},"):",[127,22286,15552],{"class":143},[127,22288,22289],{"class":147},"(name),m_phone.",[127,22291,22292],{"class":143},"m_PName",[127,22294,22295],{"class":147},"(pname) \n",[127,22297,22298],{"class":129,"line":2275},[127,22299,2572],{"class":147},[127,22301,22302,22304,22306,22309],{"class":129,"line":2292},[127,22303,3993],{"class":147},[127,22305,1718],{"class":290},[127,22307,22308],{"class":781},"\"Person的构造函数调用\"",[127,22310,164],{"class":147},[127,22312,22313],{"class":129,"line":2297},[127,22314,2729],{"class":147},[127,22316,22317,22319],{"class":129,"line":2302},[127,22318,19093],{"class":143},[127,22320,2518],{"class":147},[127,22322,22323],{"class":129,"line":2307},[127,22324,2572],{"class":147},[127,22326,22327,22329,22331,22334,22336],{"class":129,"line":2321},[127,22328,3993],{"class":147},[127,22330,1718],{"class":290},[127,22332,22333],{"class":781},"\"Person析构函数调用\"",[127,22335,1718],{"class":290},[127,22337,1740],{"class":147},[127,22339,22340],{"class":129,"line":2326},[127,22341,2729],{"class":147},[127,22343,22344],{"class":129,"line":3119},[127,22345,8322],{"class":133},[127,22347,22348],{"class":129,"line":3133},[127,22349,15434],{"class":147},[127,22351,22352],{"class":129,"line":3141},[127,22353,22354],{"class":133},"    \u002F\u002F手机\n",[127,22356,22357],{"class":129,"line":3146},[127,22358,22359],{"class":147},"    Phone m_Phone;\n",[127,22361,22362],{"class":129,"line":3152},[127,22363,4537],{"class":147},[127,22365,22366,22368,22370],{"class":129,"line":3158},[127,22367,5906],{"class":290},[127,22369,6130],{"class":143},[127,22371,2518],{"class":147},[127,22373,22374],{"class":129,"line":3163},[127,22375,2090],{"class":147},[127,22377,22378,22380,22382,22384,22386,22388,22391],{"class":129,"line":8490},[127,22379,19972],{"class":147},[127,22381,19],{"class":143},[127,22383,681],{"class":147},[127,22385,8458],{"class":781},[127,22387,1053],{"class":147},[127,22389,22390],{"class":781},"\"安卓\"",[127,22392,3261],{"class":147},[127,22394,22395,22397,22399,22402,22404,22407,22409],{"class":129,"line":8514},[127,22396,2095],{"class":147},[127,22398,1718],{"class":290},[127,22400,22401],{"class":147},"p.Name",[127,22403,1718],{"class":290},[127,22405,22406],{"class":781},"\"拿着：\"",[127,22408,1718],{"class":290},[127,22410,22411],{"class":147},"p.m_phone.m_PName;\n",[127,22413,22414],{"class":129,"line":8519},[127,22415,170],{"class":147},[127,22417,22418,22420,22422],{"class":129,"line":8525},[127,22419,684],{"class":290},[127,22421,2515],{"class":143},[127,22423,2518],{"class":147},[127,22425,22426],{"class":129,"line":8552},[127,22427,2090],{"class":147},[127,22429,22430,22432],{"class":129,"line":8557},[127,22431,6175],{"class":143},[127,22433,6178],{"class":147},[127,22435,22436],{"class":129,"line":8563},[127,22437,170],{"class":147},[19,22439,9567],{},[117,22441,22443],{"className":669,"code":22442,"language":671,"meta":122,"style":122},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[124,22444,22445,22450],{"__ignoreMap":122},[127,22446,22447],{"class":129,"line":130},[127,22448,22449],{"class":133},"    \u002F\u002F不需要写这个：\n",[127,22451,22452],{"class":129,"line":137},[127,22453,22454],{"class":133},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22456,22457],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[117,22459,22461],{"className":669,"code":22460,"language":671,"meta":122,"style":122},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[124,22462,22463],{"__ignoreMap":122},[127,22464,22465,22467,22470,22472,22475,22478],{"class":129,"line":130},[127,22466,19587],{"class":143},[127,22468,22469],{"class":147},"(string name.string pname):",[127,22471,15552],{"class":143},[127,22473,22474],{"class":147},"(name),",[127,22476,22477],{"class":143},"m_phone",[127,22479,22480],{"class":147},"(pname) {}\n",[19,22482,22483,22484,725,22487],{},"采用的是隐式转换法，实际为如下：\n",[124,22485,22486],{},"m_phone(pname)",[124,22488,22489],{},"Phone m_phone=pname",[19,22491,22492,22495],{},[30,22493,22494],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22497,22498],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[62,22500,22502],{"id":22501},"_828静态对象","8.2.8静态对象",[19,22504,22505],{},"静态对象在成员对象前static，称为静态对象",[19,22507,22508],{},"静态对象分为两类：",[632,22510,22511],{},[635,22512,22513],{},"静态成员变量",[1681,22515,22516,22519,22522],{},[635,22517,22518],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[635,22520,22521],{},"②在编译阶段分配内存",[635,22523,22524],{},"③类内声明，类外初始化",[632,22526,22527],{"start":137},[635,22528,22529],{},"静态成员函数",[1681,22531,22532,22535],{},[635,22533,22534],{},"①所有对象共享同一个函数",[635,22536,22537],{},"②静态成员函数只能访问静态成员变量",[22539,22540,22542],"h4",{"id":22541},"_8281静态成员变量","8.2.8.1静态成员变量",[117,22544,22546],{"className":669,"code":22545,"language":671,"meta":122,"style":122},"#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",[124,22547,22548,22554,22564,22570,22574,22578,22583,22588,22593,22601,22605,22609,22613,22621,22625,22629,22634,22647,22651,22659,22663,22669],{"__ignoreMap":122},[127,22549,22550,22552],{"class":129,"line":130},[127,22551,2492],{"class":290},[127,22553,2495],{"class":781},[127,22555,22556,22558,22560,22562],{"class":129,"line":137},[127,22557,2500],{"class":290},[127,22559,2503],{"class":290},[127,22561,2506],{"class":143},[127,22563,164],{"class":147},[127,22565,22566,22568],{"class":129,"line":151},[127,22567,15236],{"class":290},[127,22569,15713],{"class":143},[127,22571,22572],{"class":129,"line":167},[127,22573,2090],{"class":147},[127,22575,22576],{"class":129,"line":415},[127,22577,15258],{"class":290},[127,22579,22580],{"class":129,"line":421},[127,22581,22582],{"class":133},"    \u002F\u002F非静态成员变量\n",[127,22584,22585],{"class":129,"line":1766},[127,22586,22587],{"class":133},"    \u002F\u002F int m_A;\n",[127,22589,22590],{"class":129,"line":1856},[127,22591,22592],{"class":133},"    \u002F\u002F定义静态成员变量\n",[127,22594,22595,22597,22599],{"class":129,"line":1862},[127,22596,11562],{"class":290},[127,22598,2924],{"class":290},[127,22600,21933],{"class":147},[127,22602,22603],{"class":129,"line":1874},[127,22604,2942],{"emptyLinePlaceholder":606},[127,22606,22607],{"class":129,"line":2155},[127,22608,2942],{"emptyLinePlaceholder":606},[127,22610,22611],{"class":129,"line":2160},[127,22612,4537],{"class":147},[127,22614,22615,22617,22619],{"class":129,"line":2166},[127,22616,5906],{"class":290},[127,22618,6130],{"class":143},[127,22620,2518],{"class":147},[127,22622,22623],{"class":129,"line":2171},[127,22624,2090],{"class":147},[127,22626,22627],{"class":129,"line":2185},[127,22628,15855],{"class":147},[127,22630,22631],{"class":129,"line":2190},[127,22632,22633],{"class":133},"    \u002F\u002F输出类成员变量这块内存\n",[127,22635,22636,22638,22640,22643,22645],{"class":129,"line":2196},[127,22637,2095],{"class":147},[127,22639,1718],{"class":290},[127,22641,22642],{"class":147},"p.m_A",[127,22644,1718],{"class":290},[127,22646,1740],{"class":147},[127,22648,22649],{"class":129,"line":2217},[127,22650,170],{"class":147},[127,22652,22653,22655,22657],{"class":129,"line":2222},[127,22654,684],{"class":290},[127,22656,2515],{"class":143},[127,22658,2518],{"class":147},[127,22660,22661],{"class":129,"line":2236},[127,22662,2090],{"class":147},[127,22664,22665,22667],{"class":129,"line":2241},[127,22666,6175],{"class":143},[127,22668,2518],{"class":147},[127,22670,22671],{"class":129,"line":2270},[127,22672,170],{"class":147},[19,22674,22675],{},"此时输出是报错的：无法解析外部命令",[19,22677,22678],{},"解决这一问题：必须用到类内声明，类外初始化操作",[117,22680,22682],{"className":669,"code":22681,"language":671,"meta":122,"style":122},"#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",[124,22683,22684,22690,22700,22706,22710,22714,22719,22727,22731,22736,22751,22759,22763,22767,22772,22777,22789,22794,22805,22810,22815,22828,22832,22840,22844,22850],{"__ignoreMap":122},[127,22685,22686,22688],{"class":129,"line":130},[127,22687,2492],{"class":290},[127,22689,2495],{"class":781},[127,22691,22692,22694,22696,22698],{"class":129,"line":137},[127,22693,2500],{"class":290},[127,22695,2503],{"class":290},[127,22697,2506],{"class":143},[127,22699,164],{"class":147},[127,22701,22702,22704],{"class":129,"line":151},[127,22703,15236],{"class":290},[127,22705,15713],{"class":143},[127,22707,22708],{"class":129,"line":167},[127,22709,2090],{"class":147},[127,22711,22712],{"class":129,"line":415},[127,22713,15258],{"class":290},[127,22715,22716],{"class":129,"line":421},[127,22717,22718],{"class":133},"    \u002F\u002F类内声明\n",[127,22720,22721,22723,22725],{"class":129,"line":1766},[127,22722,11562],{"class":290},[127,22724,2924],{"class":290},[127,22726,21933],{"class":147},[127,22728,22729],{"class":129,"line":1856},[127,22730,4537],{"class":147},[127,22732,22733],{"class":129,"line":1862},[127,22734,22735],{"class":133},"\u002F\u002F类外初始化\n",[127,22737,22738,22740,22742,22745,22747,22749],{"class":129,"line":1874},[127,22739,684],{"class":290},[127,22741,16111],{"class":143},[127,22743,22744],{"class":147},"::m_A",[127,22746,725],{"class":290},[127,22748,1121],{"class":154},[127,22750,164],{"class":147},[127,22752,22753,22755,22757],{"class":129,"line":2155},[127,22754,5906],{"class":290},[127,22756,6130],{"class":143},[127,22758,2518],{"class":147},[127,22760,22761],{"class":129,"line":2160},[127,22762,2090],{"class":147},[127,22764,22765],{"class":129,"line":2166},[127,22766,15855],{"class":147},[127,22768,22769],{"class":129,"line":2171},[127,22770,22771],{"class":133},"    \u002F\u002F访问变量的原内存空间\n",[127,22773,22774],{"class":129,"line":2185},[127,22775,22776],{"class":133},"    \u002F\u002F100\n",[127,22778,22779,22781,22783,22785,22787],{"class":129,"line":2190},[127,22780,2095],{"class":147},[127,22782,1718],{"class":290},[127,22784,22642],{"class":147},[127,22786,1718],{"class":290},[127,22788,1740],{"class":147},[127,22790,22791],{"class":129,"line":2196},[127,22792,22793],{"class":147},"    Person p2;\n",[127,22795,22796,22799,22801,22803],{"class":129,"line":2217},[127,22797,22798],{"class":147},"    p2.m_A",[127,22800,725],{"class":290},[127,22802,2265],{"class":154},[127,22804,164],{"class":147},[127,22806,22807],{"class":129,"line":2222},[127,22808,22809],{"class":133},"    \u002F\u002F继续访问这片空间\n",[127,22811,22812],{"class":129,"line":2236},[127,22813,22814],{"class":133},"    \u002F\u002F200\n",[127,22816,22817,22819,22821,22824,22826],{"class":129,"line":2241},[127,22818,2095],{"class":147},[127,22820,1718],{"class":290},[127,22822,22823],{"class":147},"p2.m_A",[127,22825,1718],{"class":290},[127,22827,1740],{"class":147},[127,22829,22830],{"class":129,"line":2270},[127,22831,170],{"class":147},[127,22833,22834,22836,22838],{"class":129,"line":2275},[127,22835,684],{"class":290},[127,22837,2515],{"class":143},[127,22839,2518],{"class":147},[127,22841,22842],{"class":129,"line":2292},[127,22843,2090],{"class":147},[127,22845,22846,22848],{"class":129,"line":2297},[127,22847,6175],{"class":143},[127,22849,6178],{"class":147},[127,22851,22852],{"class":129,"line":2302},[127,22853,170],{"class":147},[19,22855,22856],{},[30,22857,22858],{},"静态变量的访问",[117,22860,22862],{"className":669,"code":22861,"language":671,"meta":122,"style":122},"#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",[124,22863,22864,22870,22880,22886,22890,22894,22898,22906,22910,22915,22923,22927,22931,22945,22960,22968,22972,22977,22982,22987,22992,23004,23009,23014,23028,23045,23049,23057,23061,23067],{"__ignoreMap":122},[127,22865,22866,22868],{"class":129,"line":130},[127,22867,2492],{"class":290},[127,22869,2495],{"class":781},[127,22871,22872,22874,22876,22878],{"class":129,"line":137},[127,22873,2500],{"class":290},[127,22875,2503],{"class":290},[127,22877,2506],{"class":143},[127,22879,164],{"class":147},[127,22881,22882,22884],{"class":129,"line":151},[127,22883,15236],{"class":290},[127,22885,15713],{"class":143},[127,22887,22888],{"class":129,"line":167},[127,22889,2090],{"class":147},[127,22891,22892],{"class":129,"line":415},[127,22893,15258],{"class":290},[127,22895,22896],{"class":129,"line":421},[127,22897,22718],{"class":133},[127,22899,22900,22902,22904],{"class":129,"line":1766},[127,22901,11562],{"class":290},[127,22903,2924],{"class":290},[127,22905,21933],{"class":147},[127,22907,22908],{"class":129,"line":1856},[127,22909,15764],{"class":290},[127,22911,22912],{"class":129,"line":1862},[127,22913,22914],{"class":133},"    \u002F\u002F静态成员变量也是有访问权限的\n",[127,22916,22917,22919,22921],{"class":129,"line":1874},[127,22918,11562],{"class":290},[127,22920,2924],{"class":290},[127,22922,21940],{"class":147},[127,22924,22925],{"class":129,"line":2155},[127,22926,4537],{"class":147},[127,22928,22929],{"class":129,"line":2160},[127,22930,22735],{"class":133},[127,22932,22933,22935,22937,22939,22941,22943],{"class":129,"line":2166},[127,22934,684],{"class":290},[127,22936,16111],{"class":143},[127,22938,22744],{"class":147},[127,22940,725],{"class":290},[127,22942,1121],{"class":154},[127,22944,164],{"class":147},[127,22946,22947,22949,22951,22954,22956,22958],{"class":129,"line":2171},[127,22948,684],{"class":290},[127,22950,16111],{"class":143},[127,22952,22953],{"class":147},"::m_B",[127,22955,725],{"class":290},[127,22957,1374],{"class":154},[127,22959,164],{"class":147},[127,22961,22962,22964,22966],{"class":129,"line":2185},[127,22963,5906],{"class":290},[127,22965,6199],{"class":143},[127,22967,2518],{"class":147},[127,22969,22970],{"class":129,"line":2190},[127,22971,2090],{"class":147},[127,22973,22974],{"class":129,"line":2196},[127,22975,22976],{"class":133},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[127,22978,22979],{"class":129,"line":2217},[127,22980,22981],{"class":133},"    \u002F\u002F静态成员变量有两种访问方式：\n",[127,22983,22984],{"class":129,"line":2222},[127,22985,22986],{"class":133},"    \u002F\u002F1.通过对象进行访问\n",[127,22988,22989],{"class":129,"line":2236},[127,22990,22991],{"class":147},"    Person p;  \n",[127,22993,22994,22996,22998,23000,23002],{"class":129,"line":2241},[127,22995,2095],{"class":147},[127,22997,1718],{"class":290},[127,22999,22642],{"class":147},[127,23001,1718],{"class":290},[127,23003,1740],{"class":147},[127,23005,23006],{"class":129,"line":2270},[127,23007,23008],{"class":133},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[127,23010,23011],{"class":129,"line":2275},[127,23012,23013],{"class":133},"    \u002F\u002F2.通过类名进行访问\n",[127,23015,23016,23018,23020,23022,23024,23026],{"class":129,"line":2292},[127,23017,2095],{"class":147},[127,23019,1718],{"class":290},[127,23021,19587],{"class":143},[127,23023,22744],{"class":147},[127,23025,1718],{"class":290},[127,23027,1740],{"class":147},[127,23029,23030,23032,23034,23036,23038,23040,23042],{"class":129,"line":2297},[127,23031,2095],{"class":147},[127,23033,1718],{"class":290},[127,23035,19587],{"class":143},[127,23037,22953],{"class":147},[127,23039,1718],{"class":290},[127,23041,1784],{"class":147},[127,23043,23044],{"class":133}," \u002F\u002F没有访问权限，报错\n",[127,23046,23047],{"class":129,"line":2302},[127,23048,170],{"class":147},[127,23050,23051,23053,23055],{"class":129,"line":2307},[127,23052,684],{"class":290},[127,23054,2515],{"class":143},[127,23056,2518],{"class":147},[127,23058,23059],{"class":129,"line":2321},[127,23060,2090],{"class":147},[127,23062,23063,23065],{"class":129,"line":2326},[127,23064,6244],{"class":143},[127,23066,6178],{"class":147},[127,23068,23069],{"class":129,"line":3119},[127,23070,170],{"class":147},[22539,23072,23074],{"id":23073},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23076,23077],{},"1.静态成员函数定义与访问",[117,23079,23081],{"className":669,"code":23080,"language":671,"meta":122,"style":122},"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",[124,23082,23083,23089,23093,23097,23102,23113,23117,23131,23135,23139,23147,23151,23156,23161,23165,23173,23178,23188],{"__ignoreMap":122},[127,23084,23085,23087],{"class":129,"line":130},[127,23086,15236],{"class":290},[127,23088,15713],{"class":143},[127,23090,23091],{"class":129,"line":137},[127,23092,2090],{"class":147},[127,23094,23095],{"class":129,"line":151},[127,23096,15258],{"class":290},[127,23098,23099],{"class":129,"line":167},[127,23100,23101],{"class":133},"    \u002F\u002F在公共权限下定义静态成员函数\n",[127,23103,23104,23106,23109,23111],{"class":129,"line":415},[127,23105,11562],{"class":290},[127,23107,23108],{"class":290}," void",[127,23110,11927],{"class":143},[127,23112,2518],{"class":147},[127,23114,23115],{"class":129,"line":421},[127,23116,2572],{"class":147},[127,23118,23119,23122,23124,23127,23129],{"class":129,"line":1766},[127,23120,23121],{"class":147},"        coout",[127,23123,1718],{"class":290},[127,23125,23126],{"class":781},"\"静态成员函数的调用\"",[127,23128,1718],{"class":290},[127,23130,1740],{"class":147},[127,23132,23133],{"class":129,"line":1856},[127,23134,2729],{"class":147},[127,23136,23137],{"class":129,"line":1862},[127,23138,4537],{"class":147},[127,23140,23141,23143,23145],{"class":129,"line":1874},[127,23142,5906],{"class":290},[127,23144,6130],{"class":143},[127,23146,2518],{"class":147},[127,23148,23149],{"class":129,"line":2155},[127,23150,2090],{"class":147},[127,23152,23153],{"class":129,"line":2160},[127,23154,23155],{"class":133},"    \u002F\u002F静态成员函数的调用方式:\n",[127,23157,23158],{"class":129,"line":2166},[127,23159,23160],{"class":133},"    \u002F\u002F1.通过对象访问\n",[127,23162,23163],{"class":129,"line":2171},[127,23164,15855],{"class":147},[127,23166,23167,23169,23171],{"class":129,"line":2185},[127,23168,16407],{"class":147},[127,23170,12093],{"class":143},[127,23172,6178],{"class":147},[127,23174,23175],{"class":129,"line":2190},[127,23176,23177],{"class":133},"    \u002F\u002F2.通过类名访问\n",[127,23179,23180,23182,23184,23186],{"class":129,"line":2196},[127,23181,19060],{"class":143},[127,23183,18273],{"class":147},[127,23185,12093],{"class":143},[127,23187,6178],{"class":147},[127,23189,23190],{"class":129,"line":2217},[127,23191,170],{"class":147},[632,23193,23194],{"start":137},[635,23195,23196],{},"静态成员函数只能访问静态成员变量",[117,23198,23200],{"className":669,"code":23199,"language":671,"meta":122,"style":122},"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",[124,23201,23202,23208,23212,23216,23220,23230,23234,23248,23253,23265,23269,23280,23290,23294,23298,23302,23312,23316,23329,23333,23337,23341,23345,23359,23367,23371,23375,23379,23383,23391,23395,23405,23410,23414,23422,23426,23432],{"__ignoreMap":122},[127,23203,23204,23206],{"class":129,"line":130},[127,23205,15236],{"class":290},[127,23207,15713],{"class":143},[127,23209,23210],{"class":129,"line":137},[127,23211,2090],{"class":147},[127,23213,23214],{"class":129,"line":151},[127,23215,15258],{"class":290},[127,23217,23218],{"class":129,"line":167},[127,23219,23101],{"class":133},[127,23221,23222,23224,23226,23228],{"class":129,"line":415},[127,23223,11562],{"class":290},[127,23225,23108],{"class":290},[127,23227,11927],{"class":143},[127,23229,2518],{"class":147},[127,23231,23232],{"class":129,"line":421},[127,23233,2572],{"class":147},[127,23235,23236,23239,23241,23243,23245],{"class":129,"line":1766},[127,23237,23238],{"class":147},"        m_A",[127,23240,725],{"class":290},[127,23242,986],{"class":154},[127,23244,734],{"class":147},[127,23246,23247],{"class":133}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[127,23249,23250],{"class":129,"line":1856},[127,23251,23252],{"class":133},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[127,23254,23255,23257,23259,23261,23263],{"class":129,"line":1862},[127,23256,23121],{"class":147},[127,23258,1718],{"class":290},[127,23260,23126],{"class":781},[127,23262,1718],{"class":290},[127,23264,1740],{"class":147},[127,23266,23267],{"class":129,"line":1874},[127,23268,2729],{"class":147},[127,23270,23271,23273,23275,23277],{"class":129,"line":2155},[127,23272,11562],{"class":290},[127,23274,2924],{"class":290},[127,23276,15990],{"class":147},[127,23278,23279],{"class":133}," \u002F\u002F静态成员变量\n",[127,23281,23282,23284,23287],{"class":129,"line":2160},[127,23283,2527],{"class":290},[127,23285,23286],{"class":147}," m_B;",[127,23288,23289],{"class":133}," \u002F\u002F非静态成员变量\n",[127,23291,23292],{"class":129,"line":2166},[127,23293,2942],{"emptyLinePlaceholder":606},[127,23295,23296],{"class":129,"line":2171},[127,23297,15764],{"class":290},[127,23299,23300],{"class":129,"line":2185},[127,23301,22914],{"class":133},[127,23303,23304,23306,23308,23310],{"class":129,"line":2190},[127,23305,11562],{"class":290},[127,23307,23108],{"class":290},[127,23309,14160],{"class":143},[127,23311,2518],{"class":147},[127,23313,23314],{"class":129,"line":2196},[127,23315,2572],{"class":147},[127,23317,23318,23320,23322,23325,23327],{"class":129,"line":2217},[127,23319,3993],{"class":147},[127,23321,1718],{"class":290},[127,23323,23324],{"class":781},"\"这是私有权限下的静态函数调用\"",[127,23326,1718],{"class":290},[127,23328,1740],{"class":147},[127,23330,23331],{"class":129,"line":2222},[127,23332,2729],{"class":147},[127,23334,23335],{"class":129,"line":2236},[127,23336,2942],{"emptyLinePlaceholder":606},[127,23338,23339],{"class":129,"line":2241},[127,23340,2942],{"emptyLinePlaceholder":606},[127,23342,23343],{"class":129,"line":2270},[127,23344,4537],{"class":147},[127,23346,23347,23349,23351,23353,23355,23357],{"class":129,"line":2275},[127,23348,684],{"class":290},[127,23350,16111],{"class":143},[127,23352,22744],{"class":147},[127,23354,725],{"class":290},[127,23356,867],{"class":154},[127,23358,164],{"class":147},[127,23360,23361,23363,23365],{"class":129,"line":2292},[127,23362,5906],{"class":290},[127,23364,6130],{"class":143},[127,23366,2518],{"class":147},[127,23368,23369],{"class":129,"line":2297},[127,23370,2090],{"class":147},[127,23372,23373],{"class":129,"line":2302},[127,23374,23155],{"class":133},[127,23376,23377],{"class":129,"line":2307},[127,23378,23160],{"class":133},[127,23380,23381],{"class":129,"line":2321},[127,23382,15855],{"class":147},[127,23384,23385,23387,23389],{"class":129,"line":2326},[127,23386,16407],{"class":147},[127,23388,12093],{"class":143},[127,23390,6178],{"class":147},[127,23392,23393],{"class":129,"line":3119},[127,23394,23177],{"class":133},[127,23396,23397,23399,23401,23403],{"class":129,"line":3133},[127,23398,19060],{"class":143},[127,23400,18273],{"class":147},[127,23402,12093],{"class":143},[127,23404,6178],{"class":147},[127,23406,23407],{"class":129,"line":3141},[127,23408,23409],{"class":133},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[127,23411,23412],{"class":129,"line":3146},[127,23413,170],{"class":147},[127,23415,23416,23418,23420],{"class":129,"line":3152},[127,23417,684],{"class":290},[127,23419,2515],{"class":143},[127,23421,2518],{"class":147},[127,23423,23424],{"class":129,"line":3158},[127,23425,2090],{"class":147},[127,23427,23428,23430],{"class":129,"line":3163},[127,23429,6175],{"class":143},[127,23431,6178],{"class":147},[127,23433,23434],{"class":129,"line":8490},[127,23435,170],{"class":147},[62,23437,23439],{"id":23438},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22539,23441,23443],{"id":23442},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23445,23446],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23448,23449],{},"只有非静态成员变量才属于类的对象上",[23451,23452,23454],"h5",{"id":23453},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[117,23456,23458],{"className":669,"code":23457,"language":671,"meta":122,"style":122},"#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",[124,23459,23460,23467,23477,23483,23487,23491,23495,23503,23507,23511,23534,23538,23546,23550,23556],{"__ignoreMap":122},[127,23461,23462,23464],{"class":129,"line":130},[127,23463,2492],{"class":290},[127,23465,23466],{"class":781},"\u003Ciostraem>\n",[127,23468,23469,23471,23473,23475],{"class":129,"line":137},[127,23470,2500],{"class":290},[127,23472,2503],{"class":290},[127,23474,2506],{"class":143},[127,23476,164],{"class":147},[127,23478,23479,23481],{"class":129,"line":151},[127,23480,15236],{"class":290},[127,23482,15713],{"class":143},[127,23484,23485],{"class":129,"line":167},[127,23486,2090],{"class":147},[127,23488,23489],{"class":129,"line":415},[127,23490,2942],{"emptyLinePlaceholder":606},[127,23492,23493],{"class":129,"line":421},[127,23494,4537],{"class":147},[127,23496,23497,23499,23501],{"class":129,"line":1766},[127,23498,5906],{"class":290},[127,23500,6130],{"class":143},[127,23502,2518],{"class":147},[127,23504,23505],{"class":129,"line":1856},[127,23506,2090],{"class":147},[127,23508,23509],{"class":129,"line":1862},[127,23510,15855],{"class":147},[127,23512,23513,23515,23517,23520,23522,23525,23527,23529,23531],{"class":129,"line":1874},[127,23514,2095],{"class":147},[127,23516,1718],{"class":290},[127,23518,23519],{"class":781},"\"size of p=\"",[127,23521,1718],{"class":290},[127,23523,23524],{"class":143},"sizeoif",[127,23526,7081],{"class":147},[127,23528,1718],{"class":290},[127,23530,1784],{"class":147},[127,23532,23533],{"class":133}," \u002F\u002F查看这个空类的占用的内存空间\n",[127,23535,23536],{"class":129,"line":2155},[127,23537,170],{"class":147},[127,23539,23540,23542,23544],{"class":129,"line":2160},[127,23541,684],{"class":290},[127,23543,2515],{"class":143},[127,23545,2518],{"class":147},[127,23547,23548],{"class":129,"line":2166},[127,23549,2090],{"class":147},[127,23551,23552,23554],{"class":129,"line":2171},[127,23553,6175],{"class":143},[127,23555,6178],{"class":147},[127,23557,23558],{"class":129,"line":2185},[127,23559,170],{"class":147},[19,23561,23562],{},"输出结果为：size of p=1",[19,23564,23565],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23567,23568],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23451,23570,23572],{"id":23571},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[117,23574,23576],{"className":669,"code":23575,"language":671,"meta":122,"style":122},"#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",[124,23577,23578,23584,23594,23602,23606,23615,23619,23627,23631,23635,23654,23658,23662,23670,23674,23680],{"__ignoreMap":122},[127,23579,23580,23582],{"class":129,"line":130},[127,23581,2492],{"class":290},[127,23583,2495],{"class":781},[127,23585,23586,23588,23590,23592],{"class":129,"line":137},[127,23587,2500],{"class":290},[127,23589,2503],{"class":290},[127,23591,2506],{"class":143},[127,23593,164],{"class":147},[127,23595,23596,23598,23600],{"class":129,"line":151},[127,23597,15236],{"class":290},[127,23599,16111],{"class":143},[127,23601,3216],{"class":147},[127,23603,23604],{"class":129,"line":167},[127,23605,2090],{"class":147},[127,23607,23608,23610,23612],{"class":129,"line":415},[127,23609,2527],{"class":290},[127,23611,15990],{"class":147},[127,23613,23614],{"class":133},"\u002F\u002F非静态成员变量\n",[127,23616,23617],{"class":129,"line":421},[127,23618,4537],{"class":147},[127,23620,23621,23623,23625],{"class":129,"line":1766},[127,23622,5906],{"class":290},[127,23624,6130],{"class":143},[127,23626,2518],{"class":147},[127,23628,23629],{"class":129,"line":1856},[127,23630,2090],{"class":147},[127,23632,23633],{"class":129,"line":1862},[127,23634,15855],{"class":147},[127,23636,23637,23639,23641,23643,23645,23647,23649,23651],{"class":129,"line":1874},[127,23638,2095],{"class":147},[127,23640,1718],{"class":290},[127,23642,23519],{"class":781},[127,23644,1917],{"class":290},[127,23646,7081],{"class":147},[127,23648,1718],{"class":290},[127,23650,1784],{"class":147},[127,23652,23653],{"class":133}," \u002F\u002F查看不是空对象时占用多少内存\n",[127,23655,23656],{"class":129,"line":2155},[127,23657,2942],{"emptyLinePlaceholder":606},[127,23659,23660],{"class":129,"line":2160},[127,23661,170],{"class":147},[127,23663,23664,23666,23668],{"class":129,"line":2166},[127,23665,684],{"class":290},[127,23667,2515],{"class":143},[127,23669,2518],{"class":147},[127,23671,23672],{"class":129,"line":2171},[127,23673,2090],{"class":147},[127,23675,23676,23678],{"class":129,"line":2185},[127,23677,6175],{"class":143},[127,23679,6178],{"class":147},[127,23681,23682],{"class":129,"line":2190},[127,23683,170],{"class":147},[19,23685,23686],{},"输出结果：size of p=4",[19,23688,23689],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[632,23691,23692],{},[635,23693,23694],{},"如果加上非静态成员变量，Person类修改如下",[117,23696,23698],{"className":669,"code":23697,"language":671,"meta":122,"style":122},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[124,23699,23700,23706,23710,23716,23724,23728,23733],{"__ignoreMap":122},[127,23701,23702,23704],{"class":129,"line":130},[127,23703,15236],{"class":290},[127,23705,15713],{"class":143},[127,23707,23708],{"class":129,"line":137},[127,23709,2090],{"class":147},[127,23711,23712,23714],{"class":129,"line":151},[127,23713,2527],{"class":290},[127,23715,21933],{"class":147},[127,23717,23718,23720,23722],{"class":129,"line":167},[127,23719,11562],{"class":290},[127,23721,2924],{"class":290},[127,23723,21940],{"class":147},[127,23725,23726],{"class":129,"line":415},[127,23727,4537],{"class":147},[127,23729,23730],{"class":129,"line":421},[127,23731,23732],{"class":133},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[127,23734,23735,23737,23739,23741,23743,23745],{"class":129,"line":1766},[127,23736,684],{"class":290},[127,23738,16111],{"class":143},[127,23740,22953],{"class":147},[127,23742,725],{"class":290},[127,23744,867],{"class":154},[127,23746,164],{"class":147},[19,23748,23749],{},"输出结果：4",[19,23751,23752],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[632,23754,23755],{"start":137},[635,23756,23757],{},"加上非静态成员函数",[117,23759,23761],{"className":669,"code":23760,"language":671,"meta":122,"style":122},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[124,23762,23763,23770,23774,23780,23788,23792,23796,23800],{"__ignoreMap":122},[127,23764,23765,23767],{"class":129,"line":130},[127,23766,15236],{"class":290},[127,23768,23769],{"class":143},"  Person\n",[127,23771,23772],{"class":129,"line":137},[127,23773,2090],{"class":147},[127,23775,23776,23778],{"class":129,"line":151},[127,23777,2527],{"class":290},[127,23779,21933],{"class":147},[127,23781,23782,23784,23786],{"class":129,"line":167},[127,23783,15451],{"class":290},[127,23785,11927],{"class":143},[127,23787,2518],{"class":147},[127,23789,23790],{"class":129,"line":415},[127,23791,2572],{"class":147},[127,23793,23794],{"class":129,"line":421},[127,23795,2942],{"emptyLinePlaceholder":606},[127,23797,23798],{"class":129,"line":1766},[127,23799,2729],{"class":147},[127,23801,23802],{"class":129,"line":1856},[127,23803,4537],{"class":147},[19,23805,23806],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[632,23808,23809],{"start":151},[635,23810,23811],{},"加上静态成员函数",[117,23813,23815],{"className":669,"code":23814,"language":671,"meta":122,"style":122},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[124,23816,23817,23823,23827,23833,23841,23845,23849,23853,23864,23868,23872,23876],{"__ignoreMap":122},[127,23818,23819,23821],{"class":129,"line":130},[127,23820,15236],{"class":290},[127,23822,23769],{"class":143},[127,23824,23825],{"class":129,"line":137},[127,23826,2090],{"class":147},[127,23828,23829,23831],{"class":129,"line":151},[127,23830,2527],{"class":290},[127,23832,21933],{"class":147},[127,23834,23835,23837,23839],{"class":129,"line":167},[127,23836,15451],{"class":290},[127,23838,11927],{"class":143},[127,23840,2518],{"class":147},[127,23842,23843],{"class":129,"line":415},[127,23844,2572],{"class":147},[127,23846,23847],{"class":129,"line":421},[127,23848,2942],{"emptyLinePlaceholder":606},[127,23850,23851],{"class":129,"line":1766},[127,23852,2729],{"class":147},[127,23854,23855,23857,23859,23862],{"class":129,"line":1856},[127,23856,11562],{"class":290},[127,23858,23108],{"class":290},[127,23860,23861],{"class":143}," func1",[127,23863,2518],{"class":147},[127,23865,23866],{"class":129,"line":1862},[127,23867,2572],{"class":147},[127,23869,23870],{"class":129,"line":1874},[127,23871,2942],{"emptyLinePlaceholder":606},[127,23873,23874],{"class":129,"line":2155},[127,23875,2729],{"class":147},[127,23877,23878],{"class":129,"line":2160},[127,23879,4537],{"class":147},[19,23881,23749],{},[19,23883,23884],{},"解释：静态成员函数也不属于类上",[575,23886,8216],{},{"title":122,"searchDepth":137,"depth":137,"links":23888},[23889,23895],{"id":15187,"depth":137,"text":15188,"children":23890},[23891,23892,23893,23894],{"id":15191,"depth":151,"text":15192},{"id":15916,"depth":151,"text":15917},{"id":16088,"depth":151,"text":16089},{"id":16546,"depth":151,"text":16547},{"id":18918,"depth":137,"text":18919,"children":23896},[23897,23898,23899,23900,23901,23902,23903,23904,23905],{"id":18930,"depth":151,"text":18931},{"id":19223,"depth":151,"text":19224},{"id":19714,"depth":151,"text":19715},{"id":20811,"depth":151,"text":20812},{"id":21234,"depth":151,"text":21235},{"id":21713,"depth":151,"text":21714},{"id":22088,"depth":151,"text":22089},{"id":22501,"depth":151,"text":22502},{"id":23438,"depth":151,"text":23439},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15152,"description":23906},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23913,"title":671,"body":23914,"description":603,"extension":604,"meta":23918,"navigation":606,"path":23920,"seo":23921,"stem":23922,"__hash__":23923},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23915,"toc":23916},[],{"title":122,"searchDepth":137,"depth":137,"links":23917},[],{"category":23919},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":671,"description":603},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23925,"title":23926,"body":23927,"description":122,"extension":604,"meta":24517,"navigation":606,"path":24518,"seo":24519,"stem":24520,"__hash__":24521},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23928,"toc":24499},[23929,23932,23936,23939,23942,23945,23963,23968,23971,23974,23977,23980,23985,23988,23993,23996,23999,24003,24006,24009,24015,24018,24036,24040,24044,24047,24052,24055,24059,24062,24075,24078,24082,24085,24088,24091,24115,24118,24127,24138,24153,24185,24189,24196,24204,24208,24211,24214,24219,24223,24226,24229,24234,24237,24241,24244,24247,24252,24255,24259,24264,24268,24335,24339,24342,24345,24348,24351,24354,24360,24381,24384,24398,24407,24411,24414,24417,24422,24425,24430,24435,24438,24441,24446,24451,24454,24459,24464,24467,24472,24477,24480,24483,24488,24491,24496],[10,23930,23926],{"id":23931},"_1强化学习基本认识",[14,23933,23935],{"id":23934},"_11什么是强化学习","1.1.什么是强化学习",[19,23937,23938],{},"强化学习有两部分组成：智能体和环境；",[19,23940,23941],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23943,23944],{},"强化学习与监督学习的区别:",[632,23946,23947,23950,23953,23956],{},[635,23948,23949],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[635,23951,23952],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[635,23954,23955],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[635,23957,23958,23959,23962],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[30,23960,23961],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23964,23965],{},[23,23966],{"alt":122,"src":23967},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23969,23970],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23972,23973],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23975,23976],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23978,23979],{},"获取奖励",[19,23981,23982],{},[23,23983],{"alt":122,"src":23984},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23986,23987],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23989,23990],{},[23,23991],{"alt":122,"src":23992},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23994,23995],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23997,23998],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24000,24002],{"id":24001},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24004,24005],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24007,24008],{},"具身智能中的应用",[19,24010,24011,24014],{},[30,24012,24013],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24016,24017],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24019,24020,24021,24024,24025,24028,24029,24032,24033],{},"机器人是",[30,24022,24023],{},"躯体","，深度学习是",[30,24026,24027],{},"神经元****网络","，VLA是",[30,24030,24031],{},"通用的行为逻辑","，而强化学习是",[30,24034,24035],{},"教练",[14,24037,24039],{"id":24038},"_13序列决策","1.3.序列决策",[62,24041,24043],{"id":24042},"_131智能体与环境","1.3.1.智能体与环境",[19,24045,24046],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24048,24049],{},[23,24050],{"alt":122,"src":24051},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24053,24054],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[62,24056,24058],{"id":24057},"_132奖励","1.3.2.奖励",[19,24060,24061],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24063,24064,24065,24074],{},"取某个策略的表现如何。强化学习的目的就是",[30,24066,24067,24068,24073],{},"最大化",[30,24069,24070],{},[30,24071,24072],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24076,24077],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[62,24079,24081],{"id":24080},"_133序列决策","1.3.3.序列决策",[19,24083,24084],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24086,24087],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24089,24090],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24092,24093,24096,24097,24099,24100,24102,24103,24105,24106,14337,24109,14337,24112],{},[533,24094,24095],{},"Ht"," = ",[533,24098,1271],{},"1*, a",[533,24101,893],{},", r",[533,24104,893],{},", . . . ,* ",[533,24107,24108],{},"ot",[533,24110,24111],{},", at ,",[533,24113,24114],{},"rt",[19,24116,24117],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24119,24120,24096,24123,2201,24125,1104],{},[533,24121,24122],{},"st",[533,24124,731],{},[533,24126,24095],{},[19,24128,24129,24130,24133,24134,24137],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[30,24131,24132],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[30,24135,24136],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24139,24140,24141,24144,24145,24148,24149,24152],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[30,24142,24143],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[30,24146,24147],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[533,24150,24151],{},"S, A, T, R, Ω, O, γ",")。",[19,24154,24155,24156,24158,24159,24161,24162,681,24164,24167,24168,24170,24171,681,24174,24177,24178,24180,24181,24184],{},"其中 ",[533,24157,1363],{}," 表示状态空间，为隐变量，",[533,24160,908],{}," 为动作空间，",[533,24163,1388],{},[533,24165,24166],{},"s ′ |s, a",") 为状态转移概率，",[533,24169,1338],{}," 为奖励函数，",[533,24172,24173],{},"Ω",[533,24175,24176],{},"o|s, a",") 为观测概率，",[533,24179,1265],{}," 为观测空间，",[533,24182,24183],{},"γ"," 为折扣因子。",[14,24186,24188],{"id":24187},"_14动作空间","1.4.动作空间",[19,24190,24191,24192,24195],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[30,24193,24194],{},"动作空间"," ，动作空间分为:",[632,24197,24198,24201],{},[635,24199,24200],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[635,24202,24203],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24205,24207],{"id":24206},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24209,24210],{},"由策略、价值函数、模型三部分组成",[19,24212,24213],{},"这三者组成马尔可夫决策过程",[19,24215,24216],{},[23,24217],{"alt":122,"src":24218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[62,24220,24222],{"id":24221},"_151策略","1.5.1.策略",[19,24224,24225],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24227,24228],{},"策略可分为两种：",[19,24230,24231],{},[23,24232],{"alt":122,"src":24233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24235,24236],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[62,24238,24240],{"id":24239},"_152价值函数","1.5.2.价值函数",[19,24242,24243],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24245,24246],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24248,24249],{},[23,24250],{"alt":122,"src":24251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24253,24254],{},"进入某个状态采取的最优动作可以通过Q函数得到",[62,24256,24258],{"id":24257},"_153模型","1.5.3.模型",[19,24260,24261],{},[23,24262],{"alt":122,"src":24263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24265,24267],{"id":24266},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[814,24269,24270,24281],{},[817,24271,24272],{},[820,24273,24274,24278],{},[823,24275,24277],{"align":24276},"left","类型",[823,24279,24280],{"align":24276},"特点",[860,24282,24283,24293,24303,24313,24325],{},[820,24284,24285,24290],{},[865,24286,24287],{"align":24276},[30,24288,24289],{},"基于价值的智能体",[865,24291,24292],{"align":24276},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[820,24294,24295,24300],{},[865,24296,24297],{"align":24276},[30,24298,24299],{},"基于策略的智能体",[865,24301,24302],{"align":24276},"直接学习策略，没有学习价值函数",[820,24304,24305,24310],{},[865,24306,24307],{"align":24276},[30,24308,24309],{},"演员-评论员智能体",[865,24311,24312],{"align":24276},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[820,24314,24315,24320],{},[865,24316,24317],{"align":24276},[30,24318,24319],{},"有模型强化学习智能体",[865,24321,24322],{"align":24276},[23,24323],{"alt":122,"src":24324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[820,24326,24327,24332],{},[865,24328,24329],{"align":24276},[30,24330,24331],{},"免模型强化学习智能体",[865,24333,24334],{"align":24276},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24336,24338],{"id":24337},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24340,24341],{},"学习和规划是序列决策的两个基本问题",[19,24343,24344],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24346,24347],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24349,24350],{},"强化学习用到的库：Gym",[19,24352,24353],{},"Gym可以检验强化学习算法的优劣",[19,24355,24356,24359],{},[30,24357,24358],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[117,24361,24365],{"className":24362,"code":24363,"language":24364,"meta":122,"style":122},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[124,24366,24367],{"__ignoreMap":122},[127,24368,24369,24372,24375,24378],{"class":129,"line":130},[127,24370,24371],{"class":143},"pip",[127,24373,24374],{"class":781}," install",[127,24376,24377],{"class":781}," gym==",[127,24379,24380],{"class":154},"0.25.2\n",[19,24382,24383],{},"显示图形界面需要",[117,24385,24387],{"className":24362,"code":24386,"language":24364,"meta":122,"style":122},"pip install pygame\n",[124,24388,24389],{"__ignoreMap":122},[127,24390,24391,24393,24395],{"class":129,"line":130},[127,24392,24371],{"class":143},[127,24394,24374],{"class":781},[127,24396,24397],{"class":781}," pygame\n",[19,24399,24400,24401],{},"有关Gym库的相关文档介绍：",[457,24402,24406],{"href":24403,"rel":24404},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24405],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24408,24410],{"id":24409},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24412,24413],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24415,24416],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24418,24419],{},[23,24420],{"alt":122,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24423,24424],{},"折扣率需要自己来设定",[19,24426,24427],{},[23,24428],{"alt":122,"src":24429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[632,24431,24432],{},[635,24433,24434],{},"状态转移函数：",[19,24436,24437],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24439,24440],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24442,24443],{},[23,24444],{"alt":122,"src":24445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[632,24447,24448],{"start":137},[635,24449,24450],{},"动作价值函数：",[19,24452,24453],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24455,24456],{},[23,24457],{"alt":122,"src":24458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[632,24460,24461],{"start":151},[635,24462,24463],{},"最优动作价值函数：",[19,24465,24466],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[19,24468,24469],{},[23,24470],{"alt":122,"src":24471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[632,24473,24474],{"start":167},[635,24475,24476],{},"状态价值函数:",[19,24478,24479],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24481,24482],{},"它衡量的是“一个具体动作”的长期价值",[19,24484,24485],{},[23,24486],{"alt":122,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24489,24490],{},"几个价值函数之间的比较：",[19,24492,24493],{},[23,24494],{"alt":122,"src":24495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[575,24497,24498],{},"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":122,"searchDepth":137,"depth":137,"links":24500},[24501,24502,24503,24508,24509,24514,24515,24516],{"id":23934,"depth":137,"text":23935},{"id":24001,"depth":137,"text":24002},{"id":24038,"depth":137,"text":24039,"children":24504},[24505,24506,24507],{"id":24042,"depth":151,"text":24043},{"id":24057,"depth":151,"text":24058},{"id":24080,"depth":151,"text":24081},{"id":24187,"depth":137,"text":24188},{"id":24206,"depth":137,"text":24207,"children":24510},[24511,24512,24513],{"id":24221,"depth":151,"text":24222},{"id":24239,"depth":151,"text":24240},{"id":24257,"depth":151,"text":24258},{"id":24266,"depth":137,"text":24267},{"id":24337,"depth":137,"text":24338},{"id":24409,"depth":137,"text":24410},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23926,"description":122},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24523,"title":24524,"body":24525,"description":24532,"extension":604,"meta":24543,"navigation":606,"path":24544,"seo":24545,"stem":24546,"__hash__":24547},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24526,"toc":24541},[24527,24530,24533,24538],[10,24528,24524],{"id":24529},"_2马尔可夫决策过程",[19,24531,24532],{},"这是强化学习的基本框架",[19,24534,24535],{},[23,24536],{"alt":122,"src":24537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24539,24540],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":122,"searchDepth":137,"depth":137,"links":24542},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24524,"description":24532},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24549,"title":24550,"body":24551,"description":122,"extension":604,"meta":24667,"navigation":606,"path":24668,"seo":24669,"stem":24670,"__hash__":24671},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24552,"toc":24662},[24553,24556,24560,24563,24568,24573,24576,24581,24584,24589,24592,24596,24601,24604,24609,24614,24619,24622,24626,24631,24634,24639,24644,24649,24654,24657],[10,24554,24550],{"id":24555},"_3动作价值函数",[14,24557,24559],{"id":24558},"_31dqn","3.1.DQN",[19,24561,24562],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24564,24565],{},[23,24566],{"alt":122,"src":24567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24569,24570],{},[23,24571],{"alt":122,"src":24572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24574,24575],{},"DQN算法的描述：",[19,24577,24578],{},[23,24579],{"alt":122,"src":24580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24582,24583],{},"这里的Dense指的是全连接层",[19,24585,24586],{},[23,24587],{"alt":122,"src":24588},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24590,24591],{},"当前观测的状态为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,24593,24595],{"id":24594},"_32dqn的举例","3.2.DQN的举例",[19,24597,24598],{},[23,24599],{"alt":122,"src":24600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24602,24603],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24605,24606],{},[23,24607],{"alt":122,"src":24608},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24610,24611],{},[23,24612],{"alt":122,"src":24613},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24615,24616],{},[23,24617],{"alt":122,"src":24618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24620,24621],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24623,24625],{"id":24624},"_33td算法","3.3.TD算法",[19,24627,24628],{},[23,24629],{"alt":122,"src":24630},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24632,24633],{},"强化学习TD算法公式的粗略解释：",[19,24635,24636],{},[23,24637],{"alt":122,"src":24638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24640,24641],{},[23,24642],{"alt":122,"src":24643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24645,24646],{},[23,24647],{"alt":122,"src":24648},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24650,24651],{},[23,24652],{"alt":122,"src":24653},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24655,24656],{},"TD算法总结：",[19,24658,24659],{},[23,24660],{"alt":122,"src":24661},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":122,"searchDepth":137,"depth":137,"links":24663},[24664,24665,24666],{"id":24558,"depth":137,"text":24559},{"id":24594,"depth":137,"text":24595},{"id":24624,"depth":137,"text":24625},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24550,"description":122},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24673,"title":24674,"body":24675,"description":122,"extension":604,"meta":24908,"navigation":606,"path":24909,"seo":24910,"stem":24911,"__hash__":24912},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24676,"toc":24904},[24677,24680,24684,24687,24690,24695,24700,24703,24708,24713,24716,24721,24724,24729,24732,24737,24740,24745,24748,24753,24758,24761,24766,24769,24772,24777,24780,24785,24790,24794,24797,24800,24805,24810,24813,24818,24823,24826,24831,24834,24837,24842,24845,24850,24853,24858,24863,24866,24871,24876,24879,24884,24887,24892,24895],[10,24678,24674],{"id":24679},"_4策略学习",[14,24681,24683],{"id":24682},"_41概念描述","4.1.概念描述",[19,24685,24686],{},"用神经网络（策略网络）近似策略函数",[19,24688,24689],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24691,24692],{},[23,24693],{"alt":122,"src":24694},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24696,24697],{},[23,24698],{"alt":122,"src":24699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24701,24702],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24704,24705],{},[23,24706],{"alt":122,"src":24707},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24709,24710],{},[23,24711],{"alt":122,"src":24712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24714,24715],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24717,24718],{},[23,24719],{"alt":122,"src":24720},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24722,24723],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24725,24726],{},[23,24727],{"alt":122,"src":24728},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24730,24731],{},"改进theta要用到策略梯度算法",[19,24733,24734],{},[23,24735],{"alt":122,"src":24736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24738,24739],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24741,24742],{},[23,24743],{"alt":122,"src":24744},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24746,24747],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24749,24750],{},[23,24751],{"alt":122,"src":24752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24754,24755],{},[23,24756],{"alt":122,"src":24757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24759,24760],{},"梯度公式总结：",[19,24762,24763],{},[23,24764],{"alt":122,"src":24765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24767,24768],{},"两个公式的分别应用场景：",[19,24770,24771],{},"对于离散的动作：",[19,24773,24774],{},[23,24775],{"alt":122,"src":24776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24778,24779],{},"对于连续的动作：",[19,24781,24782],{},[23,24783],{"alt":122,"src":24784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24786,24787],{},[23,24788],{"alt":122,"src":24789},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24791,24793],{"id":24792},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24795,24796],{},"使用蒙特卡洛来近似计算策略梯度",[19,24798,24799],{},"蒙特卡洛法的解释如下：",[19,24801,24802],{},[23,24803],{"alt":122,"src":24804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24806,24807],{},[23,24808],{"alt":122,"src":24809},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24811,24812],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[632,24814,24815],{},[635,24816,24817],{},"方法一：reinforce算法",[19,24819,24820],{},[23,24821],{"alt":122,"src":24822},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24824,24825],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[632,24827,24828],{"start":137},[635,24829,24830],{},"方法二：actor-critic算法",[19,24832,24833],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24835,24836],{},"两个网络的构建：",[19,24838,24839],{},[23,24840],{"alt":122,"src":24841},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24843,24844],{},"actor网路：",[19,24846,24847],{},[23,24848],{"alt":122,"src":24849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24851,24852],{},"critic网络",[19,24854,24855],{},[23,24856],{"alt":122,"src":24857},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[632,24859,24860],{"start":151},[635,24861,24862],{},"网络的训练",[19,24864,24865],{},"网络描述",[19,24867,24868],{},[23,24869],{"alt":122,"src":24870},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24872,24873],{},[23,24874],{"alt":122,"src":24875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24877,24878],{},"TD算法更新梯度：",[19,24880,24881],{},[23,24882],{"alt":122,"src":24883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24885,24886],{},"策略网络更新梯度：",[19,24888,24889],{},[23,24890],{"alt":122,"src":24891},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24893,24894],{},"训练整个流程的具体描述：",[19,24896,24897,24900,24901],{},[23,24898],{"alt":122,"src":24899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[23,24902],{"alt":122,"src":24903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":122,"searchDepth":137,"depth":137,"links":24905},[24906,24907],{"id":24682,"depth":137,"text":24683},{"id":24792,"depth":137,"text":24793},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24674,"description":122},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24914,"title":24915,"body":24916,"description":24923,"extension":604,"meta":24973,"navigation":606,"path":24974,"seo":24975,"stem":24976,"__hash__":24977},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24917,"toc":24969},[24918,24921,24924,24928,24931,24936,24940,24943,24948,24951,24956,24961,24964],[10,24919,24915],{"id":24920},"_5alphago算法",[19,24922,24923],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24925,24927],{"id":24926},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24929,24930],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24932,24933],{},[23,24934],{"alt":122,"src":24935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24937,24939],{"id":24938},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24941,24942],{},"采用强化学习的方式训练策略网络",[19,24944,24945],{},[23,24946],{"alt":122,"src":24947},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24949,24950],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24952,24953],{},[23,24954],{"alt":122,"src":24955},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24957,24958],{},[23,24959],{"alt":122,"src":24960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24962,24963],{},"强化学习训练策略网络的总结：",[19,24965,24966],{},[23,24967],{"alt":122,"src":24968},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":122,"searchDepth":137,"depth":137,"links":24970},[24971,24972],{"id":24926,"depth":137,"text":24927},{"id":24938,"depth":137,"text":24939},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24915,"description":24923},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24979,"title":24980,"body":24981,"description":24988,"extension":604,"meta":24991,"navigation":606,"path":24992,"seo":24993,"stem":24994,"__hash__":24995},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24982,"toc":24989},[24983,24986],[10,24984,24980],{"id":24985},"_6价值网络",[19,24987,24988],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":122,"searchDepth":137,"depth":137,"links":24990},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24980,"description":24988},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24997,"title":24998,"body":24999,"description":25003,"extension":604,"meta":25004,"navigation":606,"path":25005,"seo":25006,"stem":25007,"__hash__":25008},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25000,"toc":25001},[],{"title":122,"searchDepth":137,"depth":137,"links":25002},[],"记录自己的强化学习笔记。",{"category":23919},"\u002Fwiki\u002F2025-12-04",{"title":24998,"description":25003},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25010,"title":25011,"body":25012,"description":603,"extension":604,"meta":25051,"navigation":606,"path":25052,"seo":25053,"stem":25054,"__hash__":25055},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25013,"toc":25049},[25014,25017,25020,25026,25029,25035,25038,25043,25046],[10,25015,25011],{"id":25016},"_1-项目概览与官方资源",[19,25018,25019],{},"官方文档：",[19,25021,25022],{},[457,25023,25024],{"href":25024,"rel":25025},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24405],[19,25027,25028],{},"官方代码仓库：",[19,25030,25031],{},[457,25032,25033],{"href":25033,"rel":25034},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24405],[19,25036,25037],{},"复现大体流程：",[19,25039,25040],{},[23,25041],{"alt":122,"src":25042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25044,25045],{},"本教程的目标是打通这条链路：",[19,25047,25048],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":122,"searchDepth":137,"depth":137,"links":25050},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25011,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25057,"title":25058,"body":25059,"description":603,"extension":604,"meta":25175,"navigation":606,"path":25176,"seo":25177,"stem":25178,"__hash__":25179},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25060,"toc":25170},[25061,25064,25068,25071,25078,25082,25085,25094,25104,25108,25138,25141,25167],[10,25062,25058],{"id":25063},"_2-环境准备与设备连接",[14,25065,25067],{"id":25066},"_21-系统与环境","2.1 系统与环境",[19,25069,25070],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25072,25073,25074,25077],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[124,25075,25076],{},"lerobot"," 依赖。",[14,25079,25081],{"id":25080},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25083,25084],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[117,25086,25088],{"className":24362,"code":25087,"language":24364,"meta":122,"style":122},"lerobot-find-out\n",[124,25089,25090],{"__ignoreMap":122},[127,25091,25092],{"class":129,"line":130},[127,25093,25087],{"class":143},[19,25095,25096,25097,888,25100,25103],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[124,25098,25099],{},"\u002Fdev\u002FttyACM0",[124,25101,25102],{},"\u002Fdev\u002FttyACM1","）。",[14,25105,25107],{"id":25106},"_23-串口授权","2.3 串口授权",[117,25109,25111],{"className":24362,"code":25110,"language":24364,"meta":122,"style":122},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[124,25112,25113,25127],{"__ignoreMap":122},[127,25114,25115,25118,25121,25124],{"class":129,"line":130},[127,25116,25117],{"class":143},"sudo",[127,25119,25120],{"class":781}," chmod",[127,25122,25123],{"class":154}," 666",[127,25125,25126],{"class":781}," \u002Fdev\u002FttyACM0\n",[127,25128,25129,25131,25133,25135],{"class":129,"line":137},[127,25130,25117],{"class":143},[127,25132,25120],{"class":781},[127,25134,25123],{"class":154},[127,25136,25137],{"class":781}," \u002Fdev\u002FttyACM1\n",[19,25139,25140],{},"说明：",[1681,25142,25143,25148,25154,25164],{},[635,25144,25145,25147],{},[124,25146,25117],{},"：以 root 权限执行命令。",[635,25149,25150,25153],{},[124,25151,25152],{},"chmod","：修改设备节点权限。",[635,25155,25156,25159,25160,25163],{},[124,25157,25158],{},"666","：",[124,25161,25162],{},"rw-rw-rw-","，所有用户可读写。",[635,25165,25166],{},"串口号必须替换为你机器上的真实端口。",[575,25168,25169],{},"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":122,"searchDepth":137,"depth":137,"links":25171},[25172,25173,25174],{"id":25066,"depth":137,"text":25067},{"id":25080,"depth":137,"text":25081},{"id":25106,"depth":137,"text":25107},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25058,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25181,"title":25182,"body":25183,"description":603,"extension":604,"meta":25344,"navigation":606,"path":25345,"seo":25346,"stem":25347,"__hash__":25348},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25184,"toc":25340},[25185,25189,25193,25199,25202,25259,25262,25266,25269,25337],[10,25186,25188],{"id":25187},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25190,25192],{"id":25191},"_31-配置电机-id","3.1 配置电机 ID",[19,25194,25195,25196,25198],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[124,25197,893],{},"，需要改成机械臂链路里不冲突的编号。",[19,25200,25201],{},"方式一：用 LeRobot 命令逐步写入。",[117,25203,25205],{"className":24362,"code":25204,"language":24364,"meta":122,"style":122},"# 主臂舵机配置 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",[124,25206,25207,25212,25220,25227,25232,25236,25241,25247,25254],{"__ignoreMap":122},[127,25208,25209],{"class":129,"line":130},[127,25210,25211],{"class":133},"# 主臂舵机配置 ID\n",[127,25213,25214,25217],{"class":129,"line":137},[127,25215,25216],{"class":143},"lerobot-setup-motors",[127,25218,25219],{"class":154}," \\\n",[127,25221,25222,25225],{"class":129,"line":151},[127,25223,25224],{"class":154},"  --teleop.type=so101_leader",[127,25226,25219],{"class":154},[127,25228,25229],{"class":129,"line":167},[127,25230,25231],{"class":154},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[127,25233,25234],{"class":129,"line":415},[127,25235,2942],{"emptyLinePlaceholder":606},[127,25237,25238],{"class":129,"line":421},[127,25239,25240],{"class":133},"# 从臂舵机配置 ID\n",[127,25242,25243,25245],{"class":129,"line":1766},[127,25244,25216],{"class":143},[127,25246,25219],{"class":154},[127,25248,25249,25252],{"class":129,"line":1856},[127,25250,25251],{"class":154},"  --robot.type=so101_follower",[127,25253,25219],{"class":154},[127,25255,25256],{"class":129,"line":1862},[127,25257,25258],{"class":154},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25260,25261],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25263,25265],{"id":25264},"_32-机械臂校准","3.2 机械臂校准",[19,25267,25268],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[117,25270,25272],{"className":24362,"code":25271,"language":24364,"meta":122,"style":122},"# 主臂校准\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",[124,25273,25274,25279,25286,25292,25299,25304,25308,25313,25319,25325,25332],{"__ignoreMap":122},[127,25275,25276],{"class":129,"line":130},[127,25277,25278],{"class":133},"# 主臂校准\n",[127,25280,25281,25284],{"class":129,"line":137},[127,25282,25283],{"class":143},"lerobot-calibrate",[127,25285,25219],{"class":154},[127,25287,25288,25290],{"class":129,"line":151},[127,25289,25224],{"class":154},[127,25291,25219],{"class":154},[127,25293,25294,25297],{"class":129,"line":167},[127,25295,25296],{"class":154},"  --teleop.port=\u002Fdev\u002FttyACM0",[127,25298,25219],{"class":154},[127,25300,25301],{"class":129,"line":415},[127,25302,25303],{"class":154},"  --teleop.id=my_awesome_leader_arm\n",[127,25305,25306],{"class":129,"line":421},[127,25307,2942],{"emptyLinePlaceholder":606},[127,25309,25310],{"class":129,"line":1766},[127,25311,25312],{"class":133},"# 从臂校准\n",[127,25314,25315,25317],{"class":129,"line":1856},[127,25316,25283],{"class":143},[127,25318,25219],{"class":154},[127,25320,25321,25323],{"class":129,"line":1862},[127,25322,25251],{"class":154},[127,25324,25219],{"class":154},[127,25326,25327,25330],{"class":129,"line":1874},[127,25328,25329],{"class":154},"  --robot.port=\u002Fdev\u002FttyACM1",[127,25331,25219],{"class":154},[127,25333,25334],{"class":129,"line":2155},[127,25335,25336],{"class":154},"  --robot.id=my_awesome_follower_arm\n",[575,25338,25339],{},"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":122,"searchDepth":137,"depth":137,"links":25341},[25342,25343],{"id":25191,"depth":137,"text":25192},{"id":25264,"depth":137,"text":25265},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25182,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25350,"title":25351,"body":25352,"description":603,"extension":604,"meta":25543,"navigation":606,"path":25544,"seo":25545,"stem":25546,"__hash__":25547},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25353,"toc":25539},[25354,25357,25361,25408,25412,25425,25488,25491,25536],[10,25355,25351],{"id":25356},"_4-遥操与相机接入",[14,25358,25360],{"id":25359},"_41-不带相机遥操","4.1 不带相机遥操",[117,25362,25364],{"className":24362,"code":25363,"language":24364,"meta":122,"style":122},"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",[124,25365,25366,25373,25379,25385,25392,25398,25404],{"__ignoreMap":122},[127,25367,25368,25371],{"class":129,"line":130},[127,25369,25370],{"class":143},"lerobot-teleoperate",[127,25372,25219],{"class":154},[127,25374,25375,25377],{"class":129,"line":137},[127,25376,25251],{"class":154},[127,25378,25219],{"class":154},[127,25380,25381,25383],{"class":129,"line":151},[127,25382,25329],{"class":154},[127,25384,25219],{"class":154},[127,25386,25387,25390],{"class":129,"line":167},[127,25388,25389],{"class":154},"  --robot.id=my_awesome_follower_arm",[127,25391,25219],{"class":154},[127,25393,25394,25396],{"class":129,"line":415},[127,25395,25224],{"class":154},[127,25397,25219],{"class":154},[127,25399,25400,25402],{"class":129,"line":421},[127,25401,25296],{"class":154},[127,25403,25219],{"class":154},[127,25405,25406],{"class":129,"line":1766},[127,25407,25303],{"class":154},[14,25409,25411],{"id":25410},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[117,25413,25415],{"className":24362,"code":25414,"language":24364,"meta":122,"style":122},"lerobot-find-cameras opencv\n",[124,25416,25417],{"__ignoreMap":122},[127,25418,25419,25422],{"class":129,"line":130},[127,25420,25421],{"class":143},"lerobot-find-cameras",[127,25423,25424],{"class":781}," opencv\n",[117,25426,25428],{"className":24362,"code":25427,"language":24364,"meta":122,"style":122},"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",[124,25429,25430,25436,25442,25448,25454,25464,25470,25476,25483],{"__ignoreMap":122},[127,25431,25432,25434],{"class":129,"line":130},[127,25433,25370],{"class":143},[127,25435,25219],{"class":154},[127,25437,25438,25440],{"class":129,"line":137},[127,25439,25251],{"class":154},[127,25441,25219],{"class":154},[127,25443,25444,25446],{"class":129,"line":151},[127,25445,25329],{"class":154},[127,25447,25219],{"class":154},[127,25449,25450,25452],{"class":129,"line":167},[127,25451,25389],{"class":154},[127,25453,25219],{"class":154},[127,25455,25456,25459,25462],{"class":129,"line":415},[127,25457,25458],{"class":154},"  --robot.cameras=",[127,25460,25461],{"class":781},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[127,25463,25219],{"class":154},[127,25465,25466,25468],{"class":129,"line":421},[127,25467,25224],{"class":154},[127,25469,25219],{"class":154},[127,25471,25472,25474],{"class":129,"line":1766},[127,25473,25296],{"class":154},[127,25475,25219],{"class":154},[127,25477,25478,25481],{"class":129,"line":1856},[127,25479,25480],{"class":154},"  --teleop.id=my_awesome_leader_arm",[127,25482,25219],{"class":154},[127,25484,25485],{"class":129,"line":1862},[127,25486,25487],{"class":154},"  --display_data=true\n",[19,25489,25490],{},"相机参数说明：",[1681,25492,25493,25499,25505,25514,25524,25530],{},[635,25494,25495,25498],{},[124,25496,25497],{},"front","：相机名称。",[635,25500,25501,25504],{},[124,25502,25503],{},"type: opencv","：相机驱动类型。",[635,25506,25507,25510,25511,25103],{},[124,25508,25509],{},"index_or_path","：设备编号或设备路径（如 ",[124,25512,25513],{},"\u002Fdev\u002Fvideo4",[635,25515,25516,25519,25520,25523],{},[124,25517,25518],{},"width"," \u002F ",[124,25521,25522],{},"height","：图像分辨率。",[635,25525,25526,25529],{},[124,25527,25528],{},"fps","：采样帧率。",[635,25531,25532,25535],{},[124,25533,25534],{},"--display_data=true","：启用实时可视化。",[575,25537,25538],{},"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":122,"searchDepth":137,"depth":137,"links":25540},[25541,25542],{"id":25359,"depth":137,"text":25360},{"id":25410,"depth":137,"text":25411},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25351,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25549,"title":25550,"body":25551,"description":603,"extension":604,"meta":25723,"navigation":606,"path":25724,"seo":25725,"stem":25726,"__hash__":25727},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25552,"toc":25718},[25553,25557,25561,25566,25571,25574,25616,25622,25626,25675,25680,25684,25687,25695,25700,25705,25710,25715],[10,25554,25556],{"id":25555},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25558,25560],{"id":25559},"_51-生成访问令牌","5.1 生成访问令牌",[19,25562,25563],{},[23,25564],{"alt":122,"src":25565},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25567,25568],{},[23,25569],{"alt":122,"src":25570},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25572,25573],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[117,25575,25577],{"className":24362,"code":25576,"language":24364,"meta":122,"style":122},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[124,25578,25579,25592],{"__ignoreMap":122},[127,25580,25581,25584,25587,25589],{"class":129,"line":130},[127,25582,25583],{"class":290},"export",[127,25585,25586],{"class":147}," HF_TOKEN",[127,25588,725],{"class":290},[127,25590,25591],{"class":781},"\"your_huggingface_token\"\n",[127,25593,25594,25597,25600,25603,25606,25608,25611,25613],{"class":129,"line":137},[127,25595,25596],{"class":143},"hf",[127,25598,25599],{"class":781}," auth",[127,25601,25602],{"class":781}," login",[127,25604,25605],{"class":154}," --token",[127,25607,10266],{"class":781},[127,25609,25610],{"class":147},"$HF_TOKEN",[127,25612,926],{"class":781},[127,25614,25615],{"class":154}," --add-to-git-credential\n",[19,25617,25618,25621],{},[124,25619,25620],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25623,25625],{"id":25624},"_52-验证登录","5.2 验证登录",[117,25627,25629],{"className":24362,"code":25628,"language":24364,"meta":122,"style":122},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[124,25630,25631,25662],{"__ignoreMap":122},[127,25632,25633,25636,25638,25641,25643,25645,25648,25651,25654,25657,25660],{"class":129,"line":130},[127,25634,25635],{"class":147},"HF_USER",[127,25637,725],{"class":290},[127,25639,25640],{"class":147},"$(",[127,25642,25596],{"class":143},[127,25644,25599],{"class":781},[127,25646,25647],{"class":781}," whoami",[127,25649,25650],{"class":290}," |",[127,25652,25653],{"class":143}," head",[127,25655,25656],{"class":154}," -n",[127,25658,25659],{"class":154}," 1",[127,25661,687],{"class":147},[127,25663,25664,25667,25669,25672],{"class":129,"line":137},[127,25665,25666],{"class":154},"echo",[127,25668,10266],{"class":781},[127,25670,25671],{"class":147},"$HF_USER",[127,25673,25674],{"class":781},"\"\n",[19,25676,25677],{},[23,25678],{"alt":122,"src":25679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25681,25683],{"id":25682},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25685,25686],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1681,25688,25689,25692],{},[635,25690,25691],{},"Dataset Repo（用于上传演示数据）",[635,25693,25694],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25696,25697],{},[23,25698],{"alt":122,"src":25699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25701,25702],{},[23,25703],{"alt":122,"src":25704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25706,25707],{},[23,25708],{"alt":122,"src":25709},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25711,25712],{},[23,25713],{"alt":122,"src":25714},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[575,25716,25717],{},"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":122,"searchDepth":137,"depth":137,"links":25719},[25720,25721,25722],{"id":25559,"depth":137,"text":25560},{"id":25624,"depth":137,"text":25625},{"id":25682,"depth":137,"text":25683},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25550,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25729,"title":25730,"body":25731,"description":603,"extension":604,"meta":25928,"navigation":606,"path":25929,"seo":25930,"stem":25931,"__hash__":25932},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25732,"toc":25923},[25733,25737,25741,25837,25845,25850,25854,25870,25873,25877,25920],[10,25734,25736],{"id":25735},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25738,25740],{"id":25739},"_61-录制示教数据","6.1 录制示教数据",[117,25742,25744],{"className":24362,"code":25743,"language":24364,"meta":122,"style":122},"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",[124,25745,25746,25753,25759,25765,25771,25780,25786,25792,25798,25805,25815,25822,25832],{"__ignoreMap":122},[127,25747,25748,25751],{"class":129,"line":130},[127,25749,25750],{"class":143},"lerobot-record",[127,25752,25219],{"class":154},[127,25754,25755,25757],{"class":129,"line":137},[127,25756,25251],{"class":154},[127,25758,25219],{"class":154},[127,25760,25761,25763],{"class":129,"line":151},[127,25762,25329],{"class":154},[127,25764,25219],{"class":154},[127,25766,25767,25769],{"class":129,"line":167},[127,25768,25389],{"class":154},[127,25770,25219],{"class":154},[127,25772,25773,25775,25778],{"class":129,"line":415},[127,25774,25458],{"class":154},[127,25776,25777],{"class":781},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[127,25779,25219],{"class":154},[127,25781,25782,25784],{"class":129,"line":421},[127,25783,25224],{"class":154},[127,25785,25219],{"class":154},[127,25787,25788,25790],{"class":129,"line":1766},[127,25789,25296],{"class":154},[127,25791,25219],{"class":154},[127,25793,25794,25796],{"class":129,"line":1856},[127,25795,25480],{"class":154},[127,25797,25219],{"class":154},[127,25799,25800,25803],{"class":129,"line":1862},[127,25801,25802],{"class":154},"  --display_data=true",[127,25804,25219],{"class":154},[127,25806,25807,25810,25813],{"class":129,"line":1874},[127,25808,25809],{"class":154},"  --dataset.repo_id=",[127,25811,25812],{"class":781},"\"Embodied-AI-6\u002Fso101_test\"",[127,25814,25219],{"class":154},[127,25816,25817,25820],{"class":129,"line":2155},[127,25818,25819],{"class":154},"  --dataset.num_episodes=10",[127,25821,25219],{"class":154},[127,25823,25824,25827,25830],{"class":129,"line":2160},[127,25825,25826],{"class":154},"  --dataset.single_task=",[127,25828,25829],{"class":781},"\"Grab the green cube\"",[127,25831,25219],{"class":154},[127,25833,25834],{"class":129,"line":2166},[127,25835,25836],{"class":154},"  --resume=true\n",[1681,25838,25839],{},[635,25840,25841,25844],{},[124,25842,25843],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25846,25847],{},[23,25848],{"alt":122,"src":25849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25851,25853],{"id":25852},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[117,25855,25857],{"className":24362,"code":25856,"language":24364,"meta":122,"style":122},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[124,25858,25859],{"__ignoreMap":122},[127,25860,25861,25864,25867],{"class":129,"line":130},[127,25862,25863],{"class":143},"rm",[127,25865,25866],{"class":154}," -rf",[127,25868,25869],{"class":781}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25871,25872],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25874,25876],{"id":25875},"_63-回放指定-episode","6.3 回放指定 episode",[117,25878,25880],{"className":24362,"code":25879,"language":24364,"meta":122,"style":122},"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",[124,25881,25882,25889,25895,25901,25907,25915],{"__ignoreMap":122},[127,25883,25884,25887],{"class":129,"line":130},[127,25885,25886],{"class":143},"lerobot-replay",[127,25888,25219],{"class":154},[127,25890,25891,25893],{"class":129,"line":137},[127,25892,25251],{"class":154},[127,25894,25219],{"class":154},[127,25896,25897,25899],{"class":129,"line":151},[127,25898,25329],{"class":154},[127,25900,25219],{"class":154},[127,25902,25903,25905],{"class":129,"line":167},[127,25904,25389],{"class":154},[127,25906,25219],{"class":154},[127,25908,25909,25911,25913],{"class":129,"line":415},[127,25910,25809],{"class":154},[127,25912,25812],{"class":781},[127,25914,25219],{"class":154},[127,25916,25917],{"class":129,"line":421},[127,25918,25919],{"class":154},"  --dataset.episode=0\n",[575,25921,25922],{},"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":122,"searchDepth":137,"depth":137,"links":25924},[25925,25926,25927],{"id":25739,"depth":137,"text":25740},{"id":25852,"depth":137,"text":25853},{"id":25875,"depth":137,"text":25876},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25730,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25934,"title":25935,"body":25936,"description":603,"extension":604,"meta":26064,"navigation":606,"path":26065,"seo":26066,"stem":26067,"__hash__":26068},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25937,"toc":26062},[25938,25942,26005,26008,26055,26060],[10,25939,25941],{"id":25940},"_7-act-模型训练","7. ACT 模型训练",[117,25943,25945],{"className":24362,"code":25944,"language":24364,"meta":122,"style":122},"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",[124,25946,25947,25954,25962,25969,25976,25983,25990,25997],{"__ignoreMap":122},[127,25948,25949,25952],{"class":129,"line":130},[127,25950,25951],{"class":143},"lerobot-train",[127,25953,25219],{"class":154},[127,25955,25956,25958,25960],{"class":129,"line":137},[127,25957,25809],{"class":154},[127,25959,25812],{"class":781},[127,25961,25219],{"class":154},[127,25963,25964,25967],{"class":129,"line":151},[127,25965,25966],{"class":154},"  --policy.type=act",[127,25968,25219],{"class":154},[127,25970,25971,25974],{"class":129,"line":167},[127,25972,25973],{"class":154},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[127,25975,25219],{"class":154},[127,25977,25978,25981],{"class":129,"line":415},[127,25979,25980],{"class":154},"  --job_name=act_so101_test",[127,25982,25219],{"class":154},[127,25984,25985,25988],{"class":129,"line":421},[127,25986,25987],{"class":154},"  --policy.device=cuda",[127,25989,25219],{"class":154},[127,25991,25992,25995],{"class":129,"line":1766},[127,25993,25994],{"class":154},"  --wandb.enable=false",[127,25996,25219],{"class":154},[127,25998,25999,26002],{"class":129,"line":1856},[127,26000,26001],{"class":154},"  --policy.repo_id=",[127,26003,26004],{"class":781},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26006,26007],{},"参数说明：",[1681,26009,26010,26016,26022,26028,26034,26043,26049],{},[635,26011,26012,26015],{},[124,26013,26014],{},"--dataset.repo_id","：训练数据集仓库。",[635,26017,26018,26021],{},[124,26019,26020],{},"--policy.type=act","：策略模型类型为 ACT。",[635,26023,26024,26027],{},[124,26025,26026],{},"--output_dir","：本地训练输出目录。",[635,26029,26030,26033],{},[124,26031,26032],{},"--job_name","：训练任务名称。",[635,26035,26036,26039,26040,25103],{},[124,26037,26038],{},"--policy.device","：训练设备（如 ",[124,26041,26042],{},"cuda",[635,26044,26045,26048],{},[124,26046,26047],{},"--wandb.enable","：是否启用 WandB 可视化。",[635,26050,26051,26054],{},[124,26052,26053],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26056,26057],{},[23,26058],{"alt":122,"src":26059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[575,26061,25922],{},{"title":122,"searchDepth":137,"depth":137,"links":26063},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25935,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26070,"title":26071,"body":26072,"description":603,"extension":604,"meta":26159,"navigation":606,"path":26160,"seo":26161,"stem":26162,"__hash__":26163},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26073,"toc":26157},[26074,26077,26080,26147,26155],[10,26075,26071],{"id":26076},"_8-策略部署与自动采集",[19,26078,26079],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[117,26081,26083],{"className":24362,"code":26082,"language":24364,"meta":122,"style":122},"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",[124,26084,26085,26091,26097,26103,26111,26117,26124,26132,26140],{"__ignoreMap":122},[127,26086,26087,26089],{"class":129,"line":130},[127,26088,25750],{"class":143},[127,26090,25219],{"class":154},[127,26092,26093,26095],{"class":129,"line":137},[127,26094,25251],{"class":154},[127,26096,25219],{"class":154},[127,26098,26099,26101],{"class":129,"line":151},[127,26100,25329],{"class":154},[127,26102,25219],{"class":154},[127,26104,26105,26107,26109],{"class":129,"line":167},[127,26106,25458],{"class":154},[127,26108,25777],{"class":781},[127,26110,25219],{"class":154},[127,26112,26113,26115],{"class":129,"line":415},[127,26114,25389],{"class":154},[127,26116,25219],{"class":154},[127,26118,26119,26122],{"class":129,"line":421},[127,26120,26121],{"class":154},"  --display_data=false",[127,26123,25219],{"class":154},[127,26125,26126,26128,26130],{"class":129,"line":1766},[127,26127,25809],{"class":154},[127,26129,25812],{"class":781},[127,26131,25219],{"class":154},[127,26133,26134,26136,26138],{"class":129,"line":1856},[127,26135,25826],{"class":154},[127,26137,25829],{"class":781},[127,26139,25219],{"class":154},[127,26141,26142,26145],{"class":129,"line":1862},[127,26143,26144],{"class":154},"  --policy.path=",[127,26146,26004],{"class":781},[1681,26148,26149],{},[635,26150,26151,26154],{},[124,26152,26153],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[575,26156,25922],{},{"title":122,"searchDepth":137,"depth":137,"links":26158},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26071,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26165,"title":26166,"body":26167,"description":603,"extension":604,"meta":26196,"navigation":606,"path":26197,"seo":26198,"stem":26199,"__hash__":26200},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26168,"toc":26194},[26169,26173,26176,26182,26185,26191],[10,26170,26172],{"id":26171},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26174,26175],{},"项目地址：",[19,26177,26178],{},[457,26179,26180],{"href":26180,"rel":26181},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24405],[19,26183,26184],{},"参考教程：",[19,26186,26187],{},[457,26188,26189],{"href":26189,"rel":26190},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24405],[19,26192,26193],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":122,"searchDepth":137,"depth":137,"links":26195},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26166,"description":603},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26202,"title":26203,"body":26204,"description":26208,"extension":604,"meta":26209,"navigation":606,"path":26210,"seo":26211,"stem":26212,"__hash__":26213},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26205,"toc":26206},[],{"title":122,"searchDepth":137,"depth":137,"links":26207},[],"act复现",{"category":23919},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26203,"description":26208},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26215,"title":26216,"body":26217,"description":122,"extension":604,"meta":26519,"navigation":606,"path":26520,"seo":26521,"stem":26522,"__hash__":26523},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26218,"toc":26511},[26219,26222,26226,26236,26243,26250,26253,26260,26263,26266,26270,26282,26286,26332,26335,26338,26341,26344,26347,26351,26389,26395,26399,26453,26458,26461,26464,26469,26472,26477,26480,26483,26487,26490,26493,26497],[10,26220,26216],{"id":26221},"_1简介",[62,26223,26225],{"id":26224},"_11什么是-docker","1.1什么是 Docker？",[19,26227,26228,26229,26232,26233],{},"Docker 是一个开源的 ",[30,26230,26231],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[30,26234,26235],{},"一次构建，到处运行。",[19,26237,26238,26239,26242],{},"“ ",[30,26240,26241],{},"一次构建，到处运行"," ”也就是说：",[632,26244,26245],{},[635,26246,26247],{},[30,26248,26249],{},"之前：",[19,26251,26252],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[632,26254,26255],{},[635,26256,26257],{},[30,26258,26259],{},"使用docker后：",[19,26261,26262],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26264,26265],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[62,26267,26269],{"id":26268},"_12它是怎么工作的","1.2.它是怎么工作的？",[1681,26271,26272,26275],{},[635,26273,26274],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[635,26276,26277,26278,26281],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[30,26279,26280],{},"无论在哪运行都一样稳定"," 。",[62,26283,26285],{"id":26284},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[814,26287,26288,26298],{},[817,26289,26290],{},[820,26291,26292,26295],{},[823,26293,26294],{"align":24276},"概念",[823,26296,26297],{"align":24276},"解释",[860,26299,26300,26308,26316,26324],{},[820,26301,26302,26305],{},[865,26303,26304],{"align":24276},"镜像",[865,26306,26307],{"align":24276},"Image，运行容器的模板，像是一个应用快照",[820,26309,26310,26313],{},[865,26311,26312],{"align":24276},"容器",[865,26314,26315],{"align":24276},"Container，运行中的镜像实例，有自己的文件系统、网络等",[820,26317,26318,26321],{},[865,26319,26320],{"align":24276},"Dockerfile",[865,26322,26323],{"align":24276},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[820,26325,26326,26329],{},[865,26327,26328],{"align":24276},"仓库",[865,26330,26331],{"align":24276},"Registry，存放镜像的地方，比如 Docker Hub",[19,26333,26334],{},"抽象化理解:",[19,26336,26337],{},"Docker镜像≈C++类",[19,26339,26340],{},"Docker容器≈C++类实例(即对象)",[19,26342,26343],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26345,26346],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[62,26348,26350],{"id":26349},"_14类比理解","1.4.类比理解",[814,26352,26353,26363],{},[817,26354,26355],{},[820,26356,26357,26360],{},[823,26358,26359],{"align":24276},"传统部署",[823,26361,26362],{"align":24276},"Docker部署",[860,26364,26365,26373,26381],{},[820,26366,26367,26370],{},[865,26368,26369],{"align":24276},"手动安装依赖、调试版本不一致问题",[865,26371,26372],{"align":24276},"一次打包环境和代码",[820,26374,26375,26378],{},[865,26376,26377],{"align":24276},"程序“裸奔”跑在系统上",[865,26379,26380],{"align":24276},"程序“穿着容器”隔离运行",[820,26382,26383,26386],{},[865,26384,26385],{"align":24276},"容易“在我电脑上能跑”",[865,26387,26388],{"align":24276},"保证“无论在哪都能跑”",[19,26390,26391,26392],{},"就像快递包裹： ",[30,26393,26394],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[62,26396,26398],{"id":26397},"_15docker-的核心优势","1.5.Docker 的核心优势",[814,26400,26401,26411],{},[817,26402,26403],{},[820,26404,26405,26408],{},[823,26406,26407],{"align":24276},"优势",[823,26409,26410],{"align":24276},"说明",[860,26412,26413,26421,26429,26437,26445],{},[820,26414,26415,26418],{},[865,26416,26417],{"align":24276},"轻量级",[865,26419,26420],{"align":24276},"基于系统内核共享，启动速度快，占资源少",[820,26422,26423,26426],{},[865,26424,26425],{"align":24276},"跨平台",[865,26427,26428],{"align":24276},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[820,26430,26431,26434],{},[865,26432,26433],{"align":24276},"易于迁移部署",[865,26435,26436],{"align":24276},"应用和环境一起封装，不怕依赖不一致",[820,26438,26439,26442],{},[865,26440,26441],{"align":24276},"易于版本控制",[865,26443,26444],{"align":24276},"镜像版本可控，支持回滚",[820,26446,26447,26450],{},[865,26448,26449],{"align":24276},"生态丰富",[865,26451,26452],{"align":24276},"Docker Hub 上有成千上万的现成镜像可用",[632,26454,26455],{},[635,26456,26457],{},"在Linux上可以几乎实现无性能损失。",[19,26459,26460],{},"docker里的发行版和本机共用Linux内核。",[19,26462,26463],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[632,26465,26466],{},[635,26467,26468],{},"可以快速部署在绝大多数Linux发行版",[19,26470,26471],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[632,26473,26474],{},[635,26475,26476],{},"配置环境简单",[19,26478,26479],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26481,26482],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[632,26484,26485],{},[635,26486,26449],{},[19,26488,26489],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26491,26492],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[62,26494,26496],{"id":26495},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1681,26498,26499,26502,26505,26508],{},[635,26500,26501],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[635,26503,26504],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[635,26506,26507],{},"微服务架构：每个服务一个容器，灵活组合",[635,26509,26510],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":122,"searchDepth":137,"depth":137,"links":26512},[26513,26514,26515,26516,26517,26518],{"id":26224,"depth":151,"text":26225},{"id":26268,"depth":151,"text":26269},{"id":26284,"depth":151,"text":26285},{"id":26349,"depth":151,"text":26350},{"id":26397,"depth":151,"text":26398},{"id":26495,"depth":151,"text":26496},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26216,"description":122},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26525,"title":26526,"body":26527,"description":122,"extension":604,"meta":27259,"navigation":606,"path":27260,"seo":27261,"stem":27262,"__hash__":27263},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26528,"toc":27254},[26529,26532,26536,26539,26542,26548,26554,26558,26567,26570,26627,26630,26681,26684,26767,26770,26807,26811,26822,26835,26842,26845,26925,26928,26978,26981,27004,27008,27014,27017,27033,27039,27042,27058,27064,27067,27083,27097,27103,27123,27129,27132,27144,27150,27153,27167,27173,27176,27196,27201,27204,27207,27211,27214,27217,27220,27227,27230,27233,27236,27241,27246,27251],[10,26530,26526],{"id":26531},"_2安装docker",[62,26533,26535],{"id":26534},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26537,26538],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26540,26541],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26543,26544],{},[457,26545,26546],{"href":26546,"rel":26547},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24405],[19,26549,26550],{},[457,26551,26552],{"href":26552,"rel":26553},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24405],[22539,26555,26557],{"id":26556},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26559,26560,26561,26566],{},"以下内容根据 ",[457,26562,26565],{"href":26563,"rel":26564},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24405],"官方文档"," 修改而来。",[19,26568,26569],{},"如果你过去安装过 docker，先删掉：",[117,26571,26573],{"className":24362,"code":26572,"language":24364,"meta":122,"style":122},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[124,26574,26575],{"__ignoreMap":122},[127,26576,26577,26579,26582,26585,26588,26591,26594,26597,26600,26603,26606,26609,26612,26615,26618,26621,26624],{"class":129,"line":130},[127,26578,3567],{"class":290},[127,26580,26581],{"class":147}," pkg ",[127,26583,26584],{"class":290},"in",[127,26586,26587],{"class":781}," docker.io",[127,26589,26590],{"class":781}," docker-doc",[127,26592,26593],{"class":781}," docker-compose",[127,26595,26596],{"class":781}," docker-compose-v2",[127,26598,26599],{"class":781}," podman-docker",[127,26601,26602],{"class":781}," containerd",[127,26604,26605],{"class":781}," runc",[127,26607,26608],{"class":147},"; ",[127,26610,26611],{"class":290},"do",[127,26613,26614],{"class":143}," sudo",[127,26616,26617],{"class":781}," apt-get",[127,26619,26620],{"class":781}," remove",[127,26622,26623],{"class":147}," $pkg; ",[127,26625,26626],{"class":290},"done\n",[19,26628,26629],{},"首先安装依赖和GPG：",[117,26631,26635],{"className":26632,"code":26633,"language":26634,"meta":122,"style":122},"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",[124,26636,26637,26642,26647,26652,26657,26662,26667,26671,26676],{"__ignoreMap":122},[127,26638,26639],{"class":129,"line":130},[127,26640,26641],{},"# Add Docker's official GPG key:\n",[127,26643,26644],{"class":129,"line":137},[127,26645,26646],{},"sudo apt-get update\n",[127,26648,26649],{"class":129,"line":151},[127,26650,26651],{},"sudo apt-get install ca-certificates curl\n",[127,26653,26654],{"class":129,"line":167},[127,26655,26656],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[127,26658,26659],{"class":129,"line":415},[127,26660,26661],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[127,26663,26664],{"class":129,"line":421},[127,26665,26666],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[127,26668,26669],{"class":129,"line":1766},[127,26670,2942],{"emptyLinePlaceholder":606},[127,26672,26673],{"class":129,"line":1856},[127,26674,26675],{},"# 如果上面这行报错就弄下面这行\n",[127,26677,26678],{"class":129,"line":1862},[127,26679,26680],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26682,26683],{},"信任 Docker 的 GPG 公钥并添加仓库：",[117,26685,26687],{"className":24362,"code":26686,"language":24364,"meta":122,"style":122},"# 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",[124,26688,26689,26694,26700,26717,26750],{"__ignoreMap":122},[127,26690,26691],{"class":129,"line":130},[127,26692,26693],{"class":133},"# Add the repository to Apt sources:\n",[127,26695,26696,26698],{"class":129,"line":137},[127,26697,25666],{"class":154},[127,26699,25219],{"class":154},[127,26701,26702,26705,26708,26711,26714],{"class":129,"line":151},[127,26703,26704],{"class":781},"  \"deb [arch=$(",[127,26706,26707],{"class":143},"dpkg",[127,26709,26710],{"class":154}," --print-architecture",[127,26712,26713],{"class":781},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[127,26715,26716],{"class":154},"\\\n",[127,26718,26719,26722,26724,26726,26729,26732,26734,26736,26739,26741,26743,26746,26748],{"class":129,"line":167},[127,26720,26721],{"class":781},"  \"",[127,26723,25640],{"class":147},[127,26725,1233],{"class":154},[127,26727,26728],{"class":781}," \u002Fetc\u002Fos-release",[127,26730,26731],{"class":147}," && ",[127,26733,25666],{"class":154},[127,26735,10266],{"class":781},[127,26737,26738],{"class":147},"$VERSION_CODENAME",[127,26740,926],{"class":781},[127,26742,1104],{"class":147},[127,26744,26745],{"class":781},"\" stable\"",[127,26747,25650],{"class":290},[127,26749,25219],{"class":154},[127,26751,26752,26755,26758,26761,26764],{"class":129,"line":415},[127,26753,26754],{"class":143},"  sudo",[127,26756,26757],{"class":781}," tee",[127,26759,26760],{"class":781}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[127,26762,26763],{"class":290}," >",[127,26765,26766],{"class":781}," \u002Fdev\u002Fnull\n",[19,26768,26769],{},"最后安装",[117,26771,26773],{"className":24362,"code":26772,"language":24364,"meta":122,"style":122},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[124,26774,26775,26784],{"__ignoreMap":122},[127,26776,26777,26779,26781],{"class":129,"line":130},[127,26778,25117],{"class":143},[127,26780,26617],{"class":781},[127,26782,26783],{"class":781}," update\n",[127,26785,26786,26788,26790,26792,26795,26798,26801,26804],{"class":129,"line":137},[127,26787,25117],{"class":143},[127,26789,26617],{"class":781},[127,26791,24374],{"class":781},[127,26793,26794],{"class":781}," docker-ce",[127,26796,26797],{"class":781}," docker-ce-cli",[127,26799,26800],{"class":781}," containerd.io",[127,26802,26803],{"class":781}," docker-buildx-plugin",[127,26805,26806],{"class":781}," docker-compose-plugin\n",[22539,26808,26810],{"id":26809},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26812,26813,26814,26817,26818,26821],{},"查看自己自己包管理工具版本（dnf是 ",[30,26815,26816],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[30,26819,26820],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[117,26823,26825],{"className":24362,"code":26824,"language":24364,"meta":122,"style":122},"dnf --version\n",[124,26826,26827],{"__ignoreMap":122},[127,26828,26829,26832],{"class":129,"line":130},[127,26830,26831],{"class":143},"dnf",[127,26833,26834],{"class":154}," --version\n",[19,26836,26560,26837,26841],{},[457,26838,26565],{"href":26839,"rel":26840},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24405]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26843,26844],{},"如果你之前安装过 docker，请先删掉",[117,26846,26848],{"className":24362,"code":26847,"language":24364,"meta":122,"style":122},"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",[124,26849,26850,26864,26871,26878,26885,26892,26899,26906,26913,26920],{"__ignoreMap":122},[127,26851,26852,26854,26857,26859,26862],{"class":129,"line":130},[127,26853,25117],{"class":143},[127,26855,26856],{"class":781}," dnf",[127,26858,26620],{"class":781},[127,26860,26861],{"class":781}," docker",[127,26863,25219],{"class":154},[127,26865,26866,26869],{"class":129,"line":137},[127,26867,26868],{"class":781},"                  docker-client",[127,26870,25219],{"class":154},[127,26872,26873,26876],{"class":129,"line":151},[127,26874,26875],{"class":781},"                  docker-client-latest",[127,26877,25219],{"class":154},[127,26879,26880,26883],{"class":129,"line":167},[127,26881,26882],{"class":781},"                  docker-common",[127,26884,25219],{"class":154},[127,26886,26887,26890],{"class":129,"line":415},[127,26888,26889],{"class":781},"                  docker-latest",[127,26891,25219],{"class":154},[127,26893,26894,26897],{"class":129,"line":421},[127,26895,26896],{"class":781},"                  docker-latest-logrotate",[127,26898,25219],{"class":154},[127,26900,26901,26904],{"class":129,"line":1766},[127,26902,26903],{"class":781},"                  docker-logrotate",[127,26905,25219],{"class":154},[127,26907,26908,26911],{"class":129,"line":1856},[127,26909,26910],{"class":781},"                  docker-selinux",[127,26912,25219],{"class":154},[127,26914,26915,26918],{"class":129,"line":1862},[127,26916,26917],{"class":781},"                  docker-engine-selinux",[127,26919,25219],{"class":154},[127,26921,26922],{"class":129,"line":1874},[127,26923,26924],{"class":781},"                  docker-engine\n",[19,26926,26927],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[117,26929,26931],{"className":24362,"code":26930,"language":24364,"meta":122,"style":122},"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",[124,26932,26933,26947,26962],{"__ignoreMap":122},[127,26934,26935,26937,26939,26942,26944],{"class":129,"line":130},[127,26936,25117],{"class":143},[127,26938,26856],{"class":781},[127,26940,26941],{"class":154}," -y",[127,26943,24374],{"class":781},[127,26945,26946],{"class":781}," dnf-plugins-core\n",[127,26948,26949,26951,26953,26956,26959],{"class":129,"line":137},[127,26950,25117],{"class":143},[127,26952,26856],{"class":781},[127,26954,26955],{"class":781}," config-manager",[127,26957,26958],{"class":781}," addrepo",[127,26960,26961],{"class":154}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[127,26963,26964,26966,26969,26972,26975],{"class":129,"line":151},[127,26965,25117],{"class":143},[127,26967,26968],{"class":781}," sed",[127,26970,26971],{"class":154}," -i",[127,26973,26974],{"class":781}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[127,26976,26977],{"class":781}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26979,26980],{},"最后安装：",[117,26982,26984],{"className":24362,"code":26983,"language":24364,"meta":122,"style":122},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[124,26985,26986],{"__ignoreMap":122},[127,26987,26988,26990,26992,26994,26996,26998,27000,27002],{"class":129,"line":130},[127,26989,25117],{"class":143},[127,26991,26856],{"class":781},[127,26993,24374],{"class":781},[127,26995,26794],{"class":781},[127,26997,26797],{"class":781},[127,26999,26800],{"class":781},[127,27001,26803],{"class":781},[127,27003,26806],{"class":781},[62,27005,27007],{"id":27006},"_22配置环境","2.2.配置环境",[22539,27009,27011,253],{"id":27010},"_221检查-docker-服务状态",[30,27012,27013],{},"2.2.1.检查 Docker 服务状态",[19,27015,27016],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[117,27018,27020],{"className":24362,"code":27019,"language":24364,"meta":122,"style":122},"systemctl status docker\n",[124,27021,27022],{"__ignoreMap":122},[127,27023,27024,27027,27030],{"class":129,"line":130},[127,27025,27026],{"class":143},"systemctl",[127,27028,27029],{"class":781}," status",[127,27031,27032],{"class":781}," docker\n",[22539,27034,27036,253],{"id":27035},"_222启动-docker-服务",[30,27037,27038],{},"2.2.2.启动 Docker 服务",[19,27040,27041],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[117,27043,27045],{"className":24362,"code":27044,"language":24364,"meta":122,"style":122},"sudo systemctl start docker\n",[124,27046,27047],{"__ignoreMap":122},[127,27048,27049,27051,27054,27056],{"class":129,"line":130},[127,27050,25117],{"class":143},[127,27052,27053],{"class":781}," systemctl",[127,27055,4726],{"class":781},[127,27057,27032],{"class":781},[22539,27059,27061,253],{"id":27060},"_223设置-docker-开机自启",[30,27062,27063],{},"2.2.3.设置 Docker 开机自启",[19,27065,27066],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[117,27068,27070],{"className":24362,"code":27069,"language":24364,"meta":122,"style":122},"sudo systemctl enable docker\n",[124,27071,27072],{"__ignoreMap":122},[127,27073,27074,27076,27078,27081],{"class":129,"line":130},[127,27075,25117],{"class":143},[127,27077,27053],{"class":781},[127,27079,27080],{"class":781}," enable",[127,27082,27032],{"class":781},[22539,27084,27086,14337,27089,14337,27094,253],{"id":27085},"_224将用户添加到-docker-组",[30,27087,27088],{},"2.2.4.将用户添加到",[30,27090,27091],{},[124,27092,27093],{},"docker",[30,27095,27096],{},"组",[19,27098,27099,27100,27102],{},"使用以下命令将当前用户添加到 ",[124,27101,27093],{}," 组：",[117,27104,27106],{"className":24362,"code":27105,"language":24364,"meta":122,"style":122},"sudo usermod -aG docker $USER\n",[124,27107,27108],{"__ignoreMap":122},[127,27109,27110,27112,27115,27118,27120],{"class":129,"line":130},[127,27111,25117],{"class":143},[127,27113,27114],{"class":781}," usermod",[127,27116,27117],{"class":154}," -aG",[127,27119,26861],{"class":781},[127,27121,27122],{"class":147}," $USER\n",[22539,27124,27126,253],{"id":27125},"_225退出并重新登录",[30,27127,27128],{},"2.2.5.退出并重新登录",[19,27130,27131],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[117,27133,27135],{"className":24362,"code":27134,"language":24364,"meta":122,"style":122},"newgrp docker\n",[124,27136,27137],{"__ignoreMap":122},[127,27138,27139,27142],{"class":129,"line":130},[127,27140,27141],{"class":143},"newgrp",[127,27143,27032],{"class":781},[22539,27145,27147,253],{"id":27146},"_226重新启动-docker-服务如果需要",[30,27148,27149],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27151,27152],{},"确保 Docker 服务正在运行，可以使用以下命令：",[117,27154,27155],{"className":24362,"code":27044,"language":24364,"meta":122,"style":122},[124,27156,27157],{"__ignoreMap":122},[127,27158,27159,27161,27163,27165],{"class":129,"line":130},[127,27160,25117],{"class":143},[127,27162,27053],{"class":781},[127,27164,4726],{"class":781},[127,27166,27032],{"class":781},[22539,27168,27170,253],{"id":27169},"_227重启电脑后检查-docker-服务状态",[30,27171,27172],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27174,27175],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[117,27177,27179],{"className":24362,"code":27178,"language":24364,"meta":122,"style":122},"sudo reboot\nsystemctl status docker\n",[124,27180,27181,27188],{"__ignoreMap":122},[127,27182,27183,27185],{"class":129,"line":130},[127,27184,25117],{"class":143},[127,27186,27187],{"class":781}," reboot\n",[127,27189,27190,27192,27194],{"class":129,"line":137},[127,27191,27026],{"class":143},[127,27193,27029],{"class":781},[127,27195,27032],{"class":781},[19,27197,27198],{},[23,27199],{"alt":122,"src":27200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27202,27203],{},"第三行显示enabled说明开机自启动成功",[19,27205,27206],{},"按q退出",[62,27208,27210],{"id":27209},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27212,27213],{},"优先使用linux来使用docker是比较好的",[19,27215,27216],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27218,27219],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27221,27222,27223],{},"官方下载安装:",[457,27224,27225],{"href":27225,"rel":27226},"https:\u002F\u002Fwww.docker.com\u002F",[24405],[19,27228,27229],{},"Windows的Docker显卡直通与USB直通:",[19,27231,27232],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27234,27235],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27237,27238],{},[23,27239],{"alt":122,"src":27240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27242,27243],{},[23,27244],{"alt":122,"src":27245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27247,27248],{},[23,27249],{"alt":122,"src":27250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[575,27252,27253],{},"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":122,"searchDepth":137,"depth":137,"links":27255},[27256,27257,27258],{"id":26534,"depth":151,"text":26535},{"id":27006,"depth":151,"text":27007},{"id":27209,"depth":151,"text":27210},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26526,"description":122},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27265,"title":27266,"body":27267,"description":27274,"extension":604,"meta":27967,"navigation":606,"path":27968,"seo":27969,"stem":27970,"__hash__":27971},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27268,"toc":27961},[27269,27272,27275,27279,27284,27289,27292,27320,27325,27334,27337,27342,27346,27353,27358,27364,27368,27371,27375,27380,27472,27477,27495,27500,27521,27526,27542,27546,27551,27580,27585,27631,27636,27680,27688,27705,27710,27726,27731,27745,27748,27751,27754,27757,27786,27789,27794,27798,27801,27804,27810,27813,27816,27819,27881,27888,27893,27896,27914,27918,27921,27938,27941,27944,27958],[10,27270,27266],{"id":27271},"_3docker直通",[19,27273,27274],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[62,27276,27278],{"id":27277},"_31usb直通","3.1.USB直通",[19,27280,27281],{},[23,27282],{"alt":122,"src":27283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[632,27285,27286],{},[635,27287,27288],{},"方法一(不是很推荐新手)：",[19,27290,27291],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[117,27293,27295],{"className":24362,"code":27294,"language":24364,"meta":122,"style":122},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[124,27296,27297,27305,27310],{"__ignoreMap":122},[127,27298,27299,27302],{"class":129,"line":130},[127,27300,27301],{"class":143},"ls",[127,27303,27304],{"class":781}," \u002Fdev\n",[127,27306,27307],{"class":129,"line":137},[127,27308,27309],{"class":133},"#例如\n",[127,27311,27312,27315,27317],{"class":129,"line":151},[127,27313,27314],{"class":147},"--device",[127,27316,725],{"class":290},[127,27318,27319],{"class":781},"\u002Fdev\u002Ftty_USB0\n",[632,27321,27322],{"start":137},[635,27323,27324],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[117,27326,27328],{"className":24362,"code":27327,"language":24364,"meta":122,"style":122},"--privileged\n",[124,27329,27330],{"__ignoreMap":122},[127,27331,27332],{"class":129,"line":130},[127,27333,27327],{"class":143},[19,27335,27336],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27338,27339],{},[23,27340],{"alt":122,"src":27341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[62,27343,27345],{"id":27344},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27347,27348,27349,27352],{},"NVIDIA Container Toolkit使用户 ",[30,27350,27351],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27354,27355],{},[23,27356],{"alt":122,"src":27357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27359,27360],{},[457,27361,27362],{"href":27362,"rel":27363},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24405],[22539,27365,27367],{"id":27366},"_321安装","3.2.1.安装",[19,27369,27370],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23451,27372,27374],{"id":27373},"_3211ubuntu","3.2.1.1.Ubuntu",[632,27376,27377],{},[635,27378,27379],{},"配置存储库 并更新",[117,27381,27383],{"className":24362,"code":27382,"language":24364,"meta":122,"style":122},"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",[124,27384,27385,27414,27434,27446,27458,27464],{"__ignoreMap":122},[127,27386,27387,27390,27393,27396,27398,27400,27403,27406,27409,27412],{"class":129,"line":130},[127,27388,27389],{"class":143},"curl",[127,27391,27392],{"class":154}," -fsSL",[127,27394,27395],{"class":781}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[127,27397,25650],{"class":290},[127,27399,26614],{"class":143},[127,27401,27402],{"class":781}," gpg",[127,27404,27405],{"class":154}," --dearmor",[127,27407,27408],{"class":154}," -o",[127,27410,27411],{"class":781}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[127,27413,25219],{"class":154},[127,27415,27416,27419,27421,27424,27427,27430,27432],{"class":129,"line":137},[127,27417,27418],{"class":147},"  && ",[127,27420,27389],{"class":143},[127,27422,27423],{"class":154}," -s",[127,27425,27426],{"class":154}," -L",[127,27428,27429],{"class":781}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[127,27431,25650],{"class":290},[127,27433,25219],{"class":154},[127,27435,27436,27439,27442,27444],{"class":129,"line":151},[127,27437,27438],{"class":143},"    sed",[127,27440,27441],{"class":781}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[127,27443,25650],{"class":290},[127,27445,25219],{"class":154},[127,27447,27448,27451,27453,27456],{"class":129,"line":167},[127,27449,27450],{"class":143},"    sudo",[127,27452,26757],{"class":781},[127,27454,27455],{"class":781}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[127,27457,25219],{"class":154},[127,27459,27460,27462],{"class":129,"line":415},[127,27461,27418],{"class":147},[127,27463,26716],{"class":154},[127,27465,27466,27468,27470],{"class":129,"line":421},[127,27467,27450],{"class":143},[127,27469,26617],{"class":781},[127,27471,26783],{"class":781},[632,27473,27474],{"start":137},[635,27475,27476],{},"安装nvidia-docker2",[117,27478,27480],{"className":24362,"code":27479,"language":24364,"meta":122,"style":122},"sudo apt-get install -y nvidia-docker2\n",[124,27481,27482],{"__ignoreMap":122},[127,27483,27484,27486,27488,27490,27492],{"class":129,"line":130},[127,27485,25117],{"class":143},[127,27487,26617],{"class":781},[127,27489,24374],{"class":781},[127,27491,26941],{"class":154},[127,27493,27494],{"class":781}," nvidia-docker2\n",[632,27496,27497],{"start":151},[635,27498,27499],{},"使用nvidia-ctk命令配置container runtime",[117,27501,27503],{"className":24362,"code":27502,"language":24364,"meta":122,"style":122},"sudo nvidia-ctk runtime configure --runtime=docker\n",[124,27504,27505],{"__ignoreMap":122},[127,27506,27507,27509,27512,27515,27518],{"class":129,"line":130},[127,27508,25117],{"class":143},[127,27510,27511],{"class":781}," nvidia-ctk",[127,27513,27514],{"class":781}," runtime",[127,27516,27517],{"class":781}," configure",[127,27519,27520],{"class":154}," --runtime=docker\n",[632,27522,27523],{"start":167},[635,27524,27525],{},"重启docker服务:",[117,27527,27529],{"className":24362,"code":27528,"language":24364,"meta":122,"style":122},"sudo systemctl restart docker\n",[124,27530,27531],{"__ignoreMap":122},[127,27532,27533,27535,27537,27540],{"class":129,"line":130},[127,27534,25117],{"class":143},[127,27536,27053],{"class":781},[127,27538,27539],{"class":781}," restart",[127,27541,27032],{"class":781},[23451,27543,27545],{"id":27544},"_3212fedora","3.2.1.2.Fedora",[632,27547,27548],{},[635,27549,27550],{},"配置存储库",[117,27552,27554],{"className":24362,"code":27553,"language":24364,"meta":122,"style":122},"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",[124,27555,27556,27571],{"__ignoreMap":122},[127,27557,27558,27560,27562,27564,27567,27569],{"class":129,"line":130},[127,27559,27389],{"class":143},[127,27561,27423],{"class":154},[127,27563,27426],{"class":154},[127,27565,27566],{"class":781}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[127,27568,25650],{"class":290},[127,27570,25219],{"class":154},[127,27572,27573,27575,27577],{"class":129,"line":137},[127,27574,25117],{"class":143},[127,27576,26757],{"class":781},[127,27578,27579],{"class":781}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[632,27581,27582],{"start":137},[635,27583,27584],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[117,27586,27588],{"className":24362,"code":27587,"language":24364,"meta":122,"style":122},"# 如果是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",[124,27589,27590,27595,27609,27613,27618],{"__ignoreMap":122},[127,27591,27592],{"class":129,"line":130},[127,27593,27594],{"class":133},"# 如果是RHEL或者Rocky（DNF4）\n",[127,27596,27597,27599,27601,27603,27606],{"class":129,"line":137},[127,27598,25117],{"class":143},[127,27600,26856],{"class":781},[127,27602,26955],{"class":781},[127,27604,27605],{"class":154}," --add-repo",[127,27607,27608],{"class":781}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[127,27610,27611],{"class":129,"line":151},[127,27612,2942],{"emptyLinePlaceholder":606},[127,27614,27615],{"class":129,"line":167},[127,27616,27617],{"class":133},"# 如果是Feodra41+（DNF5）\n",[127,27619,27620,27622,27624,27626,27628],{"class":129,"line":415},[127,27621,25117],{"class":143},[127,27623,26856],{"class":781},[127,27625,26955],{"class":781},[127,27627,26958],{"class":781},[127,27629,27630],{"class":154}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[632,27632,27633],{"start":151},[635,27634,27635],{},"安装NVIDIA Container Toolki包",[117,27637,27639],{"className":24362,"code":27638,"language":24364,"meta":122,"style":122},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[124,27640,27641,27646,27659,27663,27668],{"__ignoreMap":122},[127,27642,27643],{"class":129,"line":130},[127,27644,27645],{"class":133},"# 如果是RHEL或者Rocky\n",[127,27647,27648,27650,27652,27654,27656],{"class":129,"line":137},[127,27649,25117],{"class":143},[127,27651,26856],{"class":781},[127,27653,24374],{"class":781},[127,27655,26941],{"class":154},[127,27657,27658],{"class":781}," nvidia-container-toolkit\n",[127,27660,27661],{"class":129,"line":151},[127,27662,2942],{"emptyLinePlaceholder":606},[127,27664,27665],{"class":129,"line":167},[127,27666,27667],{"class":133},"# 如果是Fedora\n",[127,27669,27670,27672,27674,27676,27678],{"class":129,"line":415},[127,27671,25117],{"class":143},[127,27673,26856],{"class":781},[127,27675,24374],{"class":781},[127,27677,26941],{"class":154},[127,27679,27658],{"class":781},[632,27681,27682],{"start":167},[635,27683,27684,27685,27687],{},"安装nvidia-docker2 ： 在Fedora上使用",[124,27686,26831],{},"进行安装",[117,27689,27691],{"className":24362,"code":27690,"language":24364,"meta":122,"style":122},"sudo dnf install -y nvidia-docker2\n",[124,27692,27693],{"__ignoreMap":122},[127,27694,27695,27697,27699,27701,27703],{"class":129,"line":130},[127,27696,25117],{"class":143},[127,27698,26856],{"class":781},[127,27700,24374],{"class":781},[127,27702,26941],{"class":154},[127,27704,27494],{"class":781},[632,27706,27707],{"start":415},[635,27708,27709],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[117,27711,27712],{"className":24362,"code":27502,"language":24364,"meta":122,"style":122},[124,27713,27714],{"__ignoreMap":122},[127,27715,27716,27718,27720,27722,27724],{"class":129,"line":130},[127,27717,25117],{"class":143},[127,27719,27511],{"class":781},[127,27721,27514],{"class":781},[127,27723,27517],{"class":781},[127,27725,27520],{"class":154},[632,27727,27728],{"start":421},[635,27729,27730],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[117,27732,27733],{"className":24362,"code":27528,"language":24364,"meta":122,"style":122},[124,27734,27735],{"__ignoreMap":122},[127,27736,27737,27739,27741,27743],{"class":129,"line":130},[127,27738,25117],{"class":143},[127,27740,27053],{"class":781},[127,27742,27539],{"class":781},[127,27744,27032],{"class":781},[19,27746,27747],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27749,27750],{},"方法：",[19,27752,27753],{},"1️⃣nvidia-smi",[19,27755,27756],{},"2️⃣运行nvidia cuda 容器进行测试",[117,27758,27760],{"className":24362,"code":27759,"language":24364,"meta":122,"style":122},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[124,27761,27762],{"__ignoreMap":122},[127,27763,27764,27766,27768,27771,27774,27777,27780,27783],{"class":129,"line":130},[127,27765,25117],{"class":143},[127,27767,26861],{"class":781},[127,27769,27770],{"class":781}," run",[127,27772,27773],{"class":154}," --rm",[127,27775,27776],{"class":154}," --gpus",[127,27778,27779],{"class":781}," all",[127,27781,27782],{"class":781}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[127,27784,27785],{"class":781}," nvidia-smi\n",[19,27787,27788],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27790,27791],{},[23,27792],{"alt":122,"src":27793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[62,27795,27797],{"id":27796},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27799,27800],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27802,27803],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27805,27806],{},[457,27807,27808],{"href":27808,"rel":27809},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24405],[19,27811,27812],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27814,27815],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27817,27818],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[814,27820,27821,27837],{},[817,27822,27823],{},[820,27824,27825,27828,27831,27834],{},[823,27826,27827],{"align":24276},"镜像类型",[823,27829,27830],{"align":24276},"适用场景",[823,27832,27833],{"align":24276},"示例标签",[823,27835,27836],{"align":24276},"大小",[860,27838,27839,27853,27867],{},[820,27840,27841,27844,27847,27850],{},[865,27842,27843],{"align":24276},"base",[865,27845,27846],{"align":24276},"仅需 CUDA 运行时库",[865,27848,27849],{"align":24276},"12.4.0-base-ubuntu22.04",[865,27851,27852],{"align":24276},"~240MB",[820,27854,27855,27858,27861,27864],{},[865,27856,27857],{"align":24276},"runtime",[865,27859,27860],{"align":24276},"部署编译后的应用（含数学库）",[865,27862,27863],{"align":24276},"12.4.0-runtime-ubuntu22.04",[865,27865,27866],{"align":24276},"~2GB",[820,27868,27869,27872,27875,27878],{},[865,27870,27871],{"align":24276},"devel",[865,27873,27874],{"align":24276},"开发环境（含编译工具）",[865,27876,27877],{"align":24276},"12.4.0-devel-ubuntu22.04",[865,27879,27880],{"align":24276},"~3GB",[19,27882,27883,27884,27887],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[124,27885,27886],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27889,27890],{},[23,27891],{"alt":122,"src":27892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27894,27895],{},"在dockerfile里就可以开头这么写：",[117,27897,27899],{"className":24362,"code":27898,"language":24364,"meta":122,"style":122},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[124,27900,27901,27906],{"__ignoreMap":122},[127,27902,27903],{"class":129,"line":130},[127,27904,27905],{"class":133},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[127,27907,27908,27911],{"class":129,"line":137},[127,27909,27910],{"class":143},"FROM",[127,27912,27913],{"class":781}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[62,27915,27917],{"id":27916},"_34配置以太网","3.4.配置以太网",[19,27919,27920],{},"指定网络模式",[117,27922,27924],{"className":24362,"code":27923,"language":24364,"meta":122,"style":122},"--net=host \\\n",[124,27925,27926],{"__ignoreMap":122},[127,27927,27928,27931,27933,27936],{"class":129,"line":130},[127,27929,27930],{"class":147},"--net",[127,27932,725],{"class":290},[127,27934,27935],{"class":781},"host",[127,27937,25219],{"class":143},[19,27939,27940],{},"启动参数里加上这行即可。具体在下方",[19,27942,27943],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1681,27945,27946,27949,27952,27955],{},[635,27947,27948],{},"--net=bridge:默认选项，表示连接到默认的网桥",[635,27950,27951],{},"--net=host:容器使用宿主机的网络",[635,27953,27954],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[635,27956,27957],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[575,27959,27960],{},"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":122,"searchDepth":137,"depth":137,"links":27962},[27963,27964,27965,27966],{"id":27277,"depth":151,"text":27278},{"id":27344,"depth":151,"text":27345},{"id":27796,"depth":151,"text":27797},{"id":27916,"depth":151,"text":27917},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27266,"description":27274},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27973,"title":27974,"body":27975,"description":27982,"extension":604,"meta":27988,"navigation":606,"path":27989,"seo":27990,"stem":27991,"__hash__":27992},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27976,"toc":27986},[27977,27980,27983],[10,27978,27974],{"id":27979},"_4dockerhub换源",[19,27981,27982],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27984,27985],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":122,"searchDepth":137,"depth":137,"links":27987},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27974,"description":27982},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27994,"title":27995,"body":27996,"description":122,"extension":604,"meta":29008,"navigation":606,"path":29009,"seo":29010,"stem":29011,"__hash__":29012},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27997,"toc":29003},[27998,28001,28005,28011,28015,28018,28358,28361,28364,28367,28372,28377,28380,28383,28386,28389,28408,28411,28422,28428,28610,28620,28636,28899,28901,28926,28941,28950,29000],[10,27999,27995],{"id":28000},"_5docker命令学习",[62,28002,28004],{"id":28003},"_51参考文档","5.1.参考文档",[19,28006,28007],{},[457,28008,28009],{"href":28009,"rel":28010},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24405],[62,28012,28014],{"id":28013},"_52常用命令","5.2.常用命令",[19,28016,28017],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[814,28019,28020,28033],{},[817,28021,28022],{},[820,28023,28024,28027,28030],{},[823,28025,28026],{"align":24276},"命令",[823,28028,28029],{"align":24276},"描述",[823,28031,28032],{"align":24276},"示例",[860,28034,28035,28046,28057,28068,28079,28090,28101,28112,28122,28133,28144,28155,28165,28176,28187,28198,28208,28218,28228,28238,28249,28260,28271,28282,28293,28304,28314,28325,28336,28347],{},[820,28036,28037,28040,28043],{},[865,28038,28039],{"align":24276},"docker run",[865,28041,28042],{"align":24276},"创建并启动一个新的容器。",[865,28044,28045],{"align":24276},"docker run -it ubuntu bash",[820,28047,28048,28051,28054],{},[865,28049,28050],{"align":24276},"docker build",[865,28052,28053],{"align":24276},"通过指定的 Dockerfile 创建一个新的镜像。",[865,28055,28056],{"align":24276},"docker build -t myimage .",[820,28058,28059,28062,28065],{},[865,28060,28061],{"align":24276},"docker pull",[865,28063,28064],{"align":24276},"从 Docker 仓库拉取镜像。",[865,28066,28067],{"align":24276},"docker pull ubuntu",[820,28069,28070,28073,28076],{},[865,28071,28072],{"align":24276},"docker push",[865,28074,28075],{"align":24276},"将本地镜像推送到 Docker 仓库。",[865,28077,28078],{"align":24276},"docker push myimage",[820,28080,28081,28084,28087],{},[865,28082,28083],{"align":24276},"docker stop",[865,28085,28086],{"align":24276},"停止一个正在运行的容器。",[865,28088,28089],{"align":24276},"docker stop container_id",[820,28091,28092,28095,28098],{},[865,28093,28094],{"align":24276},"docker start",[865,28096,28097],{"align":24276},"启动一个已经存在的容器。",[865,28099,28100],{"align":24276},"docker start container_id",[820,28102,28103,28106,28109],{},[865,28104,28105],{"align":24276},"docker restart",[865,28107,28108],{"align":24276},"重新启动容器。",[865,28110,28111],{"align":24276},"docker restart container_id",[820,28113,28114,28117,28120],{},[865,28115,28116],{"align":24276},"docker ps",[865,28118,28119],{"align":24276},"列出当前正在运行的容器。",[865,28121,28116],{"align":24276},[820,28123,28124,28127,28130],{},[865,28125,28126],{"align":24276},"docker rm",[865,28128,28129],{"align":24276},"删除一个或多个停止的容器。",[865,28131,28132],{"align":24276},"docker rm container_id",[820,28134,28135,28138,28141],{},[865,28136,28137],{"align":24276},"docker exec",[865,28139,28140],{"align":24276},"在一个正在运行的容器中执行命令。",[865,28142,28143],{"align":24276},"docker exec -it container_id bash",[820,28145,28146,28149,28152],{},[865,28147,28148],{"align":24276},"docker logs",[865,28150,28151],{"align":24276},"查看容器的日志输出。",[865,28153,28154],{"align":24276},"docker logs container_id",[820,28156,28157,28160,28163],{},[865,28158,28159],{"align":24276},"docker images",[865,28161,28162],{"align":24276},"列出本地所有镜像。",[865,28164,28159],{"align":24276},[820,28166,28167,28170,28173],{},[865,28168,28169],{"align":24276},"docker rmi",[865,28171,28172],{"align":24276},"删除一个或多个镜像。",[865,28174,28175],{"align":24276},"docker rmi myimage",[820,28177,28178,28181,28184],{},[865,28179,28180],{"align":24276},"docker network",[865,28182,28183],{"align":24276},"管理 Docker 网络。",[865,28185,28186],{"align":24276},"docker network ls",[820,28188,28189,28192,28195],{},[865,28190,28191],{"align":24276},"docker volume",[865,28193,28194],{"align":24276},"管理 Docker 数据卷。",[865,28196,28197],{"align":24276},"docker volume ls",[820,28199,28200,28203,28206],{},[865,28201,28202],{"align":24276},"docker-compose up",[865,28204,28205],{"align":24276},"启动 docker-compose.yml 中定义的所有服务。",[865,28207,28202],{"align":24276},[820,28209,28210,28213,28216],{},[865,28211,28212],{"align":24276},"docker-compose down",[865,28214,28215],{"align":24276},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[865,28217,28212],{"align":24276},[820,28219,28220,28223,28226],{},[865,28221,28222],{"align":24276},"docker info",[865,28224,28225],{"align":24276},"显示 Docker 系统的详细信息。",[865,28227,28222],{"align":24276},[820,28229,28230,28233,28236],{},[865,28231,28232],{"align":24276},"docker stats",[865,28234,28235],{"align":24276},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[865,28237,28232],{"align":24276},[820,28239,28240,28243,28246],{},[865,28241,28242],{"align":24276},"docker inspect",[865,28244,28245],{"align":24276},"查看容器或镜像的详细信息（JSON 格式）。",[865,28247,28248],{"align":24276},"docker inspect container_id",[820,28250,28251,28254,28257],{},[865,28252,28253],{"align":24276},"docker save",[865,28255,28256],{"align":24276},"将一个镜像保存为 tar 文件。",[865,28258,28259],{"align":24276},"docker save -o myimage.tar myimage",[820,28261,28262,28265,28268],{},[865,28263,28264],{"align":24276},"docker load",[865,28266,28267],{"align":24276},"从 tar 文件中加载镜像。",[865,28269,28270],{"align":24276},"docker load -i myimage.tar",[820,28272,28273,28276,28279],{},[865,28274,28275],{"align":24276},"docker tag",[865,28277,28278],{"align":24276},"为镜像添加标签（tag）。",[865,28280,28281],{"align":24276},"docker tag myimage myimage:v1",[820,28283,28284,28287,28290],{},[865,28285,28286],{"align":24276},"docker buildx build",[865,28288,28289],{"align":24276},"使用 Buildx 构建多架构镜像。",[865,28291,28292],{"align":24276},"docker buildx build -t myimage .",[820,28294,28295,28298,28301],{},[865,28296,28297],{"align":24276},"docker buildx create",[865,28299,28300],{"align":24276},"创建一个新的 Buildx 构建实例。",[865,28302,28303],{"align":24276},"docker buildx create –use",[820,28305,28306,28309,28312],{},[865,28307,28308],{"align":24276},"docker buildx ls",[865,28310,28311],{"align":24276},"列出所有可用的 Buildx 构建实例。",[865,28313,28308],{"align":24276},[820,28315,28316,28319,28322],{},[865,28317,28318],{"align":24276},"docker buildx use",[865,28320,28321],{"align":24276},"设置当前的 Buildx 构建实例。",[865,28323,28324],{"align":24276},"docker buildx use mybuilder",[820,28326,28327,28330,28333],{},[865,28328,28329],{"align":24276},"docker buildx bake",[865,28331,28332],{"align":24276},"使用 Bake 文件批量构建镜像。",[865,28334,28335],{"align":24276},"docker buildx bake -f bake.hcl",[820,28337,28338,28341,28344],{},[865,28339,28340],{"align":24276},"docker buildx build –push",[865,28342,28343],{"align":24276},"构建镜像并推送到镜像仓库。",[865,28345,28346],{"align":24276},"docker buildx build –push -t myimage .",[820,28348,28349,28352,28355],{},[865,28350,28351],{"align":24276},"docker buildx build –platform",[865,28353,28354],{"align":24276},"构建镜像并为多个平台生成支持。",[865,28356,28357],{"align":24276},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28359,28360],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28362,28363],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28365,28366],{},"docker images 可以查看已经下载的镜像",[19,28368,28369],{},[23,28370],{"alt":122,"src":28371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28373,28374],{},[30,28375,28376],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28378,28379],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28381,28382],{},"docker container logs 查看容器日志",[19,28384,28385],{},"docker top 查看容器里的进程",[19,28387,28388],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[117,28390,28392],{"className":24362,"code":28391,"language":24364,"meta":122,"style":122},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[124,28393,28394],{"__ignoreMap":122},[127,28395,28396,28399,28402,28405],{"class":129,"line":130},[127,28397,28398],{"class":143},"如：docker",[127,28400,28401],{"class":781}," cp",[127,28403,28404],{"class":781}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[127,28406,28407],{"class":781}," \u002Fmydata\u002Fnginx\n",[19,28409,28410],{},"docker run时在启动容器的时候会有几个常用的选项：",[1681,28412,28413,28416,28419],{},[635,28414,28415],{},"-d选项：表示后台运行",[635,28417,28418],{},"-P选项：随机端口映射",[635,28420,28421],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[62,28423,28425],{"id":28424},"_53run命令的参数非常重要",[30,28426,28427],{},"5.3.run命令的参数（非常重要）",[814,28429,28430,28443],{},[817,28431,28432],{},[820,28433,28434,28437,28440],{},[823,28435,28436],{"align":24276},"参数\u002F配置",[823,28438,28439],{"align":24276},"功能说明",[823,28441,28442],{"align":24276},"重要性与参考依据",[860,28444,28445,28456,28467,28478,28489,28500,28511,28522,28533,28544,28555,28566,28577,28588,28599],{},[820,28446,28447,28450,28453],{},[865,28448,28449],{"align":24276},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[865,28451,28452],{"align":24276},"指定容器名称，便于后续管理",[865,28454,28455],{"align":24276},"替代随机生成的容器名。",[820,28457,28458,28461,28464],{},[865,28459,28460],{"align":24276},"–gpus all",[865,28462,28463],{"align":24276},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[865,28465,28466],{"align":24276},"用于CUDA加速等GPU依赖任务。",[820,28468,28469,28472,28475],{},[865,28470,28471],{"align":24276},"-e NVIDIA_DRIVER_CAPABILITIES=all",[865,28473,28474],{"align":24276},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[865,28476,28477],{"align":24276},"确保容器内GPU功能完整67。",[820,28479,28480,28483,28486],{},[865,28481,28482],{"align":24276},"-dit",[865,28484,28485],{"align":24276},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[865,28487,28488],{"align":24276},"允许容器在后台运行并支持交互操作。",[820,28490,28491,28494,28497],{},[865,28492,28493],{"align":24276},"–privileged",[865,28495,28496],{"align":24276},"赋予容器完全主机权限（可访问设备、内核模块等）",[865,28498,28499],{"align":24276},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[820,28501,28502,28505,28508],{},[865,28503,28504],{"align":24276},"–net=host",[865,28506,28507],{"align":24276},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[865,28509,28510],{"align":24276},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[820,28512,28513,28516,28519],{},[865,28514,28515],{"align":24276},"–group-add audio–group-add video–group-add dialout",[865,28517,28518],{"align":24276},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[865,28520,28521],{"align":24276},"避免权限问题（如避免无法调用摄像头、麦克风）。",[820,28523,28524,28527,28530],{},[865,28525,28526],{"align":24276},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[865,28528,28529],{"align":24276},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[865,28531,28532],{"align":24276},"支持容器内运行图形界面应用（如OpenCV可视化）。",[820,28534,28535,28538,28541],{},[865,28536,28537],{"align":24276},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[865,28539,28540],{"align":24276},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[865,28542,28543],{"align":24276},"实现容器内图形显示。",[820,28545,28546,28549,28552],{},[865,28547,28548],{"align":24276},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[865,28550,28551],{"align":24276},"挂载X11认证文件（只读）",[865,28553,28554],{"align":24276},"确保容器有权连接宿主机显示服务。",[820,28556,28557,28560,28563],{},[865,28558,28559],{"align":24276},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[865,28561,28562],{"align":24276},"挂载Wayland显示协议相关目录",[865,28564,28565],{"align":24276},"支持Wayland协议的图形显示。",[820,28567,28568,28571,28574],{},[865,28569,28570],{"align":24276},"–ulimit nofile=1024:524288",[865,28572,28573],{"align":24276},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[865,28575,28576],{"align":24276},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[820,28578,28579,28582,28585],{},[865,28580,28581],{"align":24276},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[865,28583,28584],{"align":24276},"挂载宿主机用户目录到容器内同名路径",[865,28586,28587],{"align":24276},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[820,28589,28590,28593,28596],{},[865,28591,28592],{"align":24276},"-w \u002Fhome\u002Ftungchiahui",[865,28594,28595],{"align":24276},"设置容器启动后的默认工作目录",[865,28597,28598],{"align":24276},"直接进入项目路径，方便执行命令2324。",[820,28600,28601,28604,28607],{},[865,28602,28603],{"align":24276},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[865,28605,28606],{"align":24276},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[865,28608,28609],{"align":24276},"提供预配置的深度学习与机器人开发环境。",[19,28611,28612,28613,28615,28616,28619],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[124,28614,25117],{},"加不加",[124,28617,28618],{},"sudo -E","都无所谓。",[19,28621,28622,28623,28625,28626,28628,28629,28632,28633,28635],{},"用户已经被加到docker组了，不用",[124,28624,25117],{},"也行跑，其次，",[124,28627,25117],{},"运行的话，你的",[124,28630,28631],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[124,28634,28631],{},"更不可能变了。",[117,28637,28639],{"className":24362,"code":28638,"language":24364,"meta":122,"style":122},"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",[124,28640,28641,28654,28664,28674,28686,28693,28700,28707,28717,28726,28735,28749,28761,28773,28782,28792,28801,28816,28849,28876,28887,28894],{"__ignoreMap":122},[127,28642,28643,28645,28647,28649,28652],{"class":129,"line":130},[127,28644,25117],{"class":143},[127,28646,26861],{"class":781},[127,28648,27770],{"class":781},[127,28650,28651],{"class":154}," --name=ros_opencv_cuda",[127,28653,25219],{"class":154},[127,28655,28656,28659,28662],{"class":129,"line":137},[127,28657,28658],{"class":147},"--gpus ",[127,28660,28661],{"class":781},"all",[127,28663,25219],{"class":154},[127,28665,28666,28669,28672],{"class":129,"line":151},[127,28667,28668],{"class":147},"-e ",[127,28670,28671],{"class":781},"NVIDIA_DRIVER_CAPABILITIES=all",[127,28673,25219],{"class":154},[127,28675,28676,28678,28681,28684],{"class":129,"line":167},[127,28677,28668],{"class":147},[127,28679,28680],{"class":781},"DISPLAY=",[127,28682,28683],{"class":147},"$DISPLAY ",[127,28685,26716],{"class":154},[127,28687,28688,28691],{"class":129,"line":415},[127,28689,28690],{"class":147},"-dit ",[127,28692,26716],{"class":154},[127,28694,28695,28698],{"class":129,"line":421},[127,28696,28697],{"class":147},"--privileged ",[127,28699,26716],{"class":154},[127,28701,28702,28705],{"class":129,"line":1766},[127,28703,28704],{"class":147},"--net=host ",[127,28706,26716],{"class":154},[127,28708,28709,28712,28715],{"class":129,"line":1856},[127,28710,28711],{"class":147},"--group-add ",[127,28713,28714],{"class":781},"audio",[127,28716,25219],{"class":154},[127,28718,28719,28721,28724],{"class":129,"line":1862},[127,28720,28711],{"class":147},[127,28722,28723],{"class":781},"video",[127,28725,25219],{"class":154},[127,28727,28728,28730,28733],{"class":129,"line":1874},[127,28729,28711],{"class":147},[127,28731,28732],{"class":781},"dialout",[127,28734,25219],{"class":154},[127,28736,28737,28739,28742,28744,28747],{"class":129,"line":2155},[127,28738,28668],{"class":147},[127,28740,28741],{"class":781},"XAUTHORITY=",[127,28743,28631],{"class":147},[127,28745,28746],{"class":781},"\u002F.Xauthority",[127,28748,25219],{"class":154},[127,28750,28751,28753,28756,28759],{"class":129,"line":2160},[127,28752,28668],{"class":147},[127,28754,28755],{"class":781},"WAYLAND_DISPLAY=",[127,28757,28758],{"class":147},"$WAYLAND_DISPLAY ",[127,28760,26716],{"class":154},[127,28762,28763,28765,28768,28771],{"class":129,"line":2166},[127,28764,28668],{"class":147},[127,28766,28767],{"class":781},"XDG_RUNTIME_DIR=",[127,28769,28770],{"class":147},"$XDG_RUNTIME_DIR ",[127,28772,26716],{"class":154},[127,28774,28775,28777,28780],{"class":129,"line":2171},[127,28776,28668],{"class":147},[127,28778,28779],{"class":781},"QT_QPA_PLATFORM=xcb",[127,28781,25219],{"class":154},[127,28783,28784,28787,28790],{"class":129,"line":2185},[127,28785,28786],{"class":147},"-v ",[127,28788,28789],{"class":781},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[127,28791,25219],{"class":154},[127,28793,28794,28796,28799],{"class":129,"line":2190},[127,28795,28786],{"class":147},[127,28797,28798],{"class":781},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[127,28800,25219],{"class":154},[127,28802,28803,28806,28809,28811,28814],{"class":129,"line":2196},[127,28804,28805],{"class":147},"-v $HOME",[127,28807,28808],{"class":781},"\u002F.Xauthority:",[127,28810,28631],{"class":147},[127,28812,28813],{"class":781},"\u002F.Xauthority:ro",[127,28815,25219],{"class":154},[127,28817,28818,28820,28823,28825,28828,28831,28833,28836,28838,28840,28842,28844,28847],{"class":129,"line":2217},[127,28819,28786],{"class":147},[127,28821,28822],{"class":781},"\u002Frun\u002Fuser\u002F",[127,28824,25640],{"class":147},[127,28826,28827],{"class":143},"id",[127,28829,28830],{"class":154}," -u",[127,28832,1104],{"class":147},[127,28834,28835],{"class":781},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[127,28837,25640],{"class":147},[127,28839,28827],{"class":143},[127,28841,28830],{"class":154},[127,28843,1104],{"class":147},[127,28845,28846],{"class":781},"\u002Fwayland-0",[127,28848,25219],{"class":154},[127,28850,28851,28853,28855,28857,28859,28861,28863,28866,28868,28870,28872,28874],{"class":129,"line":2222},[127,28852,28786],{"class":147},[127,28854,28822],{"class":781},[127,28856,25640],{"class":147},[127,28858,28827],{"class":143},[127,28860,28830],{"class":154},[127,28862,1104],{"class":147},[127,28864,28865],{"class":781},":\u002Frun\u002Fuser\u002F",[127,28867,25640],{"class":147},[127,28869,28827],{"class":143},[127,28871,28830],{"class":154},[127,28873,14256],{"class":147},[127,28875,26716],{"class":154},[127,28877,28878,28880,28882,28885],{"class":129,"line":2236},[127,28879,28805],{"class":147},[127,28881,1533],{"class":781},[127,28883,28884],{"class":147},"$HOME ",[127,28886,26716],{"class":154},[127,28888,28889,28892],{"class":129,"line":2241},[127,28890,28891],{"class":147},"-w $HOME ",[127,28893,26716],{"class":154},[127,28895,28896],{"class":129,"line":2270},[127,28897,28898],{"class":147},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28900,9567],{},[632,28902,28903,28911,28914,28917],{},[635,28904,28905,14337,28907,28910],{},[124,28906,28671],{},[124,28908,28909],{},"--gpus all","没有英伟达显卡请注释。",[635,28912,28913],{},"--name后面请自己为容器起名。",[635,28915,28916],{},"最后一行仓库名称请你自己找对应的镜像填上。",[635,28918,28919,28920,28925],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[533,28921,28922],{},[30,28923,28924],{},"请不要加","。",[117,28927,28929],{"className":24362,"code":28928,"language":24364,"meta":122,"style":122},"--ulimit nofile=1024:524288 \\\n",[124,28930,28931],{"__ignoreMap":122},[127,28932,28933,28936,28939],{"class":129,"line":130},[127,28934,28935],{"class":143},"--ulimit",[127,28937,28938],{"class":781}," nofile=1024:524288",[127,28940,25219],{"class":154},[19,28942,28943,28944,28949],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[533,28945,28946],{},[30,28947,28948],{},"不建议","**.**",[117,28951,28953],{"className":24362,"code":28952,"language":24364,"meta":122,"style":122},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[124,28954,28955,28982,28991],{"__ignoreMap":122},[127,28956,28957,28960,28963,28965,28967,28969,28971,28973,28975,28978,28980],{"class":129,"line":130},[127,28958,28959],{"class":143},"--user",[127,28961,28962],{"class":147}," $(",[127,28964,28827],{"class":143},[127,28966,28830],{"class":154},[127,28968,1104],{"class":147},[127,28970,1533],{"class":781},[127,28972,25640],{"class":147},[127,28974,28827],{"class":143},[127,28976,28977],{"class":154}," -g",[127,28979,14256],{"class":147},[127,28981,26716],{"class":154},[127,28983,28984,28986,28989],{"class":129,"line":137},[127,28985,28786],{"class":147},[127,28987,28988],{"class":781},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[127,28990,25219],{"class":154},[127,28992,28993,28995,28998],{"class":129,"line":151},[127,28994,28786],{"class":147},[127,28996,28997],{"class":781},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[127,28999,25219],{"class":154},[575,29001,29002],{},"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":122,"searchDepth":137,"depth":137,"links":29004},[29005,29006,29007],{"id":28003,"depth":151,"text":28004},{"id":28013,"depth":151,"text":28014},{"id":28424,"depth":151,"text":28427},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27995,"description":122},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29014,"title":29015,"body":29016,"description":122,"extension":604,"meta":30639,"navigation":606,"path":30640,"seo":30641,"stem":30642,"__hash__":30643},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29017,"toc":30634},[29018,29021,29025,29028,29250,29254,29258,29261,29367,29372,29375,29380,29383,29388,29391,29396,29399,29411,29414,29419,29426,29454,29461,29537,29542,29545,29568,29570,29645,29650,29653,29657,29665,29670,29675,29679,29690,29696,29699,29702,29726,29729,29732,29760,29763,29766,30231,30234,30239,30244,30248,30271,30276,30280,30284,30287,30290,30293,30320,30323,30326,30344,30347,30350,30372,30380,30385,30390,30394,30397,30400,30403,30406,30451,30454,30472,30475,30480,30483,30504,30507,30563,30566,30571,30575,30578,30585,30588,30591,30596,30599,30615,30618,30631],[10,29019,29015],{"id":29020},"_6手动创建docker镜像",[62,29022,29024],{"id":29023},"_61dockerfile","6.1.DockerFile",[19,29026,29027],{},"常用命令：",[814,29029,29030,29041],{},[817,29031,29032],{},[820,29033,29034,29037,29039],{},[823,29035,29036],{"align":24276},"指令",[823,29038,26410],{"align":24276},[823,29040,28032],{"align":24276},[860,29042,29043,29053,29069,29080,29091,29102,29113,29124,29135,29149,29163,29174,29188,29199,29210,29224,29239],{},[820,29044,29045,29047,29050],{},[865,29046,27910],{"align":24276},[865,29048,29049],{"align":24276},"指定基础镜像，是 Dockerfile 的起点",[865,29051,29052],{"align":24276},"FROM ubuntu:22.04",[820,29054,29055,29058,29061],{},[865,29056,29057],{"align":24276},"LABEL",[865,29059,29060],{"align":24276},"添加元数据（如作者、版本等）",[865,29062,29063,29064,29068],{"align":24276},"LABEL maintainer=”",[457,29065,29067],{"href":29066},"mailto:you@example.com","you@example.com","”",[820,29070,29071,29074,29077],{},[865,29072,29073],{"align":24276},"ENV",[865,29075,29076],{"align":24276},"设置环境变量",[865,29078,29079],{"align":24276},"ENV PORT=8080",[820,29081,29082,29085,29088],{},[865,29083,29084],{"align":24276},"ARG",[865,29086,29087],{"align":24276},"构建参数，只在构建期间可用",[865,29089,29090],{"align":24276},"ARG VERSION=1.0",[820,29092,29093,29096,29099],{},[865,29094,29095],{"align":24276},"RUN",[865,29097,29098],{"align":24276},"构建镜像时运行命令",[865,29100,29101],{"align":24276},"RUN apt-get update && apt-get install -y curl",[820,29103,29104,29107,29110],{},[865,29105,29106],{"align":24276},"COPY",[865,29108,29109],{"align":24276},"复制文件到镜像中",[865,29111,29112],{"align":24276},"COPY . \u002Fapp",[820,29114,29115,29118,29121],{},[865,29116,29117],{"align":24276},"ADD",[865,29119,29120],{"align":24276},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[865,29122,29123],{"align":24276},"ADD archive.tar.gz \u002Fdata\u002F",[820,29125,29126,29129,29132],{},[865,29127,29128],{"align":24276},"WORKDIR",[865,29130,29131],{"align":24276},"设置工作目录",[865,29133,29134],{"align":24276},"WORKDIR \u002Fopt",[820,29136,29137,29140,29143],{},[865,29138,29139],{"align":24276},"CMD",[865,29141,29142],{"align":24276},"设置容器启动时默认命令（可被 docker run 覆盖）",[865,29144,29145,29146],{"align":24276},"CMD ",[127,29147,29148],{},"“node”, “index.js”",[820,29150,29151,29154,29157],{},[865,29152,29153],{"align":24276},"ENTRYPOINT",[865,29155,29156],{"align":24276},"设置容器启动时固定命令（通常用于 CLI 工具等）",[865,29158,29159,29160],{"align":24276},"ENTRYPOINT ",[127,29161,29162],{},"“python3”",[820,29164,29165,29168,29171],{},[865,29166,29167],{"align":24276},"EXPOSE",[865,29169,29170],{"align":24276},"声明镜像内服务监听的端口（不会自动映射）",[865,29172,29173],{"align":24276},"EXPOSE 80",[820,29175,29176,29179,29182],{},[865,29177,29178],{"align":24276},"VOLUME",[865,29180,29181],{"align":24276},"声明数据卷挂载点",[865,29183,29184,29185],{"align":24276},"VOLUME ",[127,29186,29187],{},"“\u002Fdata”",[820,29189,29190,29193,29196],{},[865,29191,29192],{"align":24276},"USER",[865,29194,29195],{"align":24276},"设置后续命令执行的用户",[865,29197,29198],{"align":24276},"USER appuser",[820,29200,29201,29204,29207],{},[865,29202,29203],{"align":24276},"ONBUILD",[865,29205,29206],{"align":24276},"当镜像作为其他镜像基础镜像时触发的构建指令",[865,29208,29209],{"align":24276},"ONBUILD COPY . \u002Fsrc",[820,29211,29212,29215,29218],{},[865,29213,29214],{"align":24276},"SHELL",[865,29216,29217],{"align":24276},"更改默认 shell，比如将 sh -c 改为 bash -c",[865,29219,29220,29221],{"align":24276},"SHELL ",[127,29222,29223],{},"“\u002Fbin\u002Fbash”, “-c”",[820,29225,29226,29229,29232],{},[865,29227,29228],{"align":24276},"HEALTHCHECK",[865,29230,29231],{"align":24276},"定义容器运行时的健康检查命令",[865,29233,29234,29235],{"align":24276},"`HEALTHCHECK CMD curl –fail ",[457,29236,29237],{"href":29237,"rel":29238},"http:\u002F\u002Flocalhost:8080",[24405],[820,29240,29241,29244,29247],{},[865,29242,29243],{"align":24276},"STOPSIGNAL",[865,29245,29246],{"align":24276},"容器停止时发送的信号",[865,29248,29249],{"align":24276},"STOPSIGNAL SIGKILL",[62,29251,29253],{"id":29252},"_62自己创建容器","6.2.自己创建容器",[22539,29255,29257],{"id":29256},"_621手动创建","6.2.1.手动创建",[19,29259,29260],{},"在x86电脑上编译x86的：",[117,29262,29264],{"className":24362,"code":29263,"language":24364,"meta":122,"style":122},"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",[124,29265,29266,29282,29286,29299,29303,29316,29320,29333,29337,29350,29354],{"__ignoreMap":122},[127,29267,29268,29270,29273,29276,29279],{"class":129,"line":130},[127,29269,27093],{"class":143},[127,29271,29272],{"class":781}," build",[127,29274,29275],{"class":154}," -t",[127,29277,29278],{"class":781}," ros-melodic-cuda118-cudnn8-bionic:latest",[127,29280,29281],{"class":781}," .\n",[127,29283,29284],{"class":129,"line":137},[127,29285,2942],{"emptyLinePlaceholder":606},[127,29287,29288,29290,29292,29294,29297],{"class":129,"line":151},[127,29289,27093],{"class":143},[127,29291,29272],{"class":781},[127,29293,29275],{"class":154},[127,29295,29296],{"class":781}," ros-noetic-focal:latest",[127,29298,29281],{"class":781},[127,29300,29301],{"class":129,"line":167},[127,29302,2942],{"emptyLinePlaceholder":606},[127,29304,29305,29307,29309,29311,29314],{"class":129,"line":415},[127,29306,27093],{"class":143},[127,29308,29272],{"class":781},[127,29310,29275],{"class":154},[127,29312,29313],{"class":781}," ros-humble-jammy:latest",[127,29315,29281],{"class":781},[127,29317,29318],{"class":129,"line":421},[127,29319,2942],{"emptyLinePlaceholder":606},[127,29321,29322,29324,29326,29328,29331],{"class":129,"line":1766},[127,29323,27093],{"class":143},[127,29325,29272],{"class":781},[127,29327,29275],{"class":154},[127,29329,29330],{"class":781}," ros-jazzy-noble:latest",[127,29332,29281],{"class":781},[127,29334,29335],{"class":129,"line":1856},[127,29336,2942],{"emptyLinePlaceholder":606},[127,29338,29339,29341,29343,29345,29348],{"class":129,"line":1862},[127,29340,27093],{"class":143},[127,29342,29272],{"class":781},[127,29344,29275],{"class":154},[127,29346,29347],{"class":781}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[127,29349,29281],{"class":781},[127,29351,29352],{"class":129,"line":1874},[127,29353,2942],{"emptyLinePlaceholder":606},[127,29355,29356,29358,29360,29362,29365],{"class":129,"line":2155},[127,29357,27093],{"class":143},[127,29359,29272],{"class":781},[127,29361,29275],{"class":154},[127,29363,29364],{"class":781}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[127,29366,29281],{"class":781},[19,29368,29369],{},[23,29370],{"alt":122,"src":29371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29373,29374],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29376,29377],{},[23,29378],{"alt":122,"src":29379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29381,29382],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[632,29384,29385],{},[635,29386,29387],{},"创建 Docker Hub 账户",[19,29389,29390],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[632,29392,29393],{"start":137},[635,29394,29395],{},"登录 Docker Hub",[19,29397,29398],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[117,29400,29402],{"className":24362,"code":29401,"language":24364,"meta":122,"style":122},"docker login\n",[124,29403,29404],{"__ignoreMap":122},[127,29405,29406,29408],{"class":129,"line":130},[127,29407,27093],{"class":143},[127,29409,29410],{"class":781}," login\n",[19,29412,29413],{},"输入你的 Docker Hub 用户名和密码进行验证。",[632,29415,29416],{},[635,29417,29418],{},"为你的镜像打标签",[19,29420,29421,29422,29425],{},"Docker Hub 使用 ",[124,29423,29424],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[117,29427,29429],{"className":24362,"code":29428,"language":24364,"meta":122,"style":122},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[124,29430,29431],{"__ignoreMap":122},[127,29432,29433,29435,29438,29440,29443,29446,29449,29451],{"class":129,"line":130},[127,29434,27093],{"class":143},[127,29436,29437],{"class":781}," tag",[127,29439,29330],{"class":781},[127,29441,29442],{"class":290}," \u003C",[127,29444,29445],{"class":781},"你的用户",[127,29447,29448],{"class":147},"名",[127,29450,1634],{"class":290},[127,29452,29453],{"class":781},"\u002Fros-jazzy-noble:latest\n",[19,29455,29456,29457,29460],{},"例如，如果你的 Docker Hub 用户名是 ",[124,29458,29459],{},"tungchiahui","，你应该执行：",[117,29462,29464],{"className":24362,"code":29463,"language":24364,"meta":122,"style":122},"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",[124,29465,29466,29477,29481,29492,29496,29507,29511,29522,29526],{"__ignoreMap":122},[127,29467,29468,29470,29472,29474],{"class":129,"line":130},[127,29469,27093],{"class":143},[127,29471,29437],{"class":781},[127,29473,29296],{"class":781},[127,29475,29476],{"class":781}," tungchiahui\u002Fros-noetic-focal:latest\n",[127,29478,29479],{"class":129,"line":137},[127,29480,2942],{"emptyLinePlaceholder":606},[127,29482,29483,29485,29487,29489],{"class":129,"line":151},[127,29484,27093],{"class":143},[127,29486,29437],{"class":781},[127,29488,29313],{"class":781},[127,29490,29491],{"class":781}," tungchiahui\u002Fros-humble-jammy:latest\n",[127,29493,29494],{"class":129,"line":167},[127,29495,2942],{"emptyLinePlaceholder":606},[127,29497,29498,29500,29502,29504],{"class":129,"line":415},[127,29499,27093],{"class":143},[127,29501,29437],{"class":781},[127,29503,29330],{"class":781},[127,29505,29506],{"class":781}," tungchiahui\u002Fros-jazzy-noble:latest\n",[127,29508,29509],{"class":129,"line":421},[127,29510,2942],{"emptyLinePlaceholder":606},[127,29512,29513,29515,29517,29519],{"class":129,"line":1766},[127,29514,27093],{"class":143},[127,29516,29437],{"class":781},[127,29518,29347],{"class":781},[127,29520,29521],{"class":781}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[127,29523,29524],{"class":129,"line":1856},[127,29525,2942],{"emptyLinePlaceholder":606},[127,29527,29528,29530,29532,29534],{"class":129,"line":1862},[127,29529,27093],{"class":143},[127,29531,29437],{"class":781},[127,29533,29364],{"class":781},[127,29535,29536],{"class":781}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[632,29538,29539],{"start":137},[635,29540,29541],{},"推送镜像到 Docker Hub",[19,29543,29544],{},"使用以下命令将镜像推送到 Docker Hub：",[117,29546,29548],{"className":24362,"code":29547,"language":24364,"meta":122,"style":122},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[124,29549,29550],{"__ignoreMap":122},[127,29551,29552,29554,29557,29559,29561,29563,29565],{"class":129,"line":130},[127,29553,27093],{"class":143},[127,29555,29556],{"class":781}," push",[127,29558,29442],{"class":290},[127,29560,29445],{"class":781},[127,29562,29448],{"class":147},[127,29564,1634],{"class":290},[127,29566,29567],{"class":781},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29569,15175],{},[117,29571,29573],{"className":24362,"code":29572,"language":24364,"meta":122,"style":122},"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",[124,29574,29575,29583,29587,29595,29599,29607,29611,29620,29624,29632,29636],{"__ignoreMap":122},[127,29576,29577,29579,29581],{"class":129,"line":130},[127,29578,27093],{"class":143},[127,29580,29556],{"class":781},[127,29582,29476],{"class":781},[127,29584,29585],{"class":129,"line":137},[127,29586,2942],{"emptyLinePlaceholder":606},[127,29588,29589,29591,29593],{"class":129,"line":151},[127,29590,27093],{"class":143},[127,29592,29556],{"class":781},[127,29594,29491],{"class":781},[127,29596,29597],{"class":129,"line":167},[127,29598,2942],{"emptyLinePlaceholder":606},[127,29600,29601,29603,29605],{"class":129,"line":415},[127,29602,27093],{"class":143},[127,29604,29556],{"class":781},[127,29606,29506],{"class":781},[127,29608,29609],{"class":129,"line":421},[127,29610,2942],{"emptyLinePlaceholder":606},[127,29612,29613,29615,29617],{"class":129,"line":1766},[127,29614,27093],{"class":143},[127,29616,29556],{"class":781},[127,29618,29619],{"class":781}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[127,29621,29622],{"class":129,"line":1856},[127,29623,2942],{"emptyLinePlaceholder":606},[127,29625,29626,29628,29630],{"class":129,"line":1862},[127,29627,27093],{"class":143},[127,29629,29556],{"class":781},[127,29631,29536],{"class":781},[127,29633,29634],{"class":129,"line":1874},[127,29635,2942],{"emptyLinePlaceholder":606},[127,29637,29638,29640,29642],{"class":129,"line":2155},[127,29639,27093],{"class":143},[127,29641,29556],{"class":781},[127,29643,29644],{"class":781}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[632,29646,29647],{"start":151},[635,29648,29649],{},"验证推送成功",[19,29651,29652],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29654,29655],{},[30,29656,4326],{},[1681,29658,29659,29662],{},[635,29660,29661],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[635,29663,29664],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29666,29667],{},[23,29668],{"alt":122,"src":29669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29671,29672],{},[23,29673],{"alt":122,"src":29674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22539,29676,29678],{"id":29677},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29680,29681,29682,29685,29686,29689],{},"如果您想在 ",[30,29683,29684],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[30,29687,29688],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29691,29692,29693],{},"1. ",[30,29694,29695],{},"启用 Docker 跨平台构建",[19,29697,29698],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29700,29701],{},"第一步：启用 buildx（只需执行一次）",[117,29703,29705],{"className":24362,"code":29704,"language":24364,"meta":122,"style":122},"docker buildx create --name multiarch_builder --use\n",[124,29706,29707],{"__ignoreMap":122},[127,29708,29709,29711,29714,29717,29720,29723],{"class":129,"line":130},[127,29710,27093],{"class":143},[127,29712,29713],{"class":781}," buildx",[127,29715,29716],{"class":781}," create",[127,29718,29719],{"class":154}," --name",[127,29721,29722],{"class":781}," multiarch_builder",[127,29724,29725],{"class":154}," --use\n",[19,29727,29728],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29730,29731],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[117,29733,29735],{"className":24362,"code":29734,"language":24364,"meta":122,"style":122},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[124,29736,29737],{"__ignoreMap":122},[127,29738,29739,29741,29743,29745,29748,29751,29754,29757],{"class":129,"line":130},[127,29740,27093],{"class":143},[127,29742,27770],{"class":781},[127,29744,27773],{"class":154},[127,29746,29747],{"class":154}," --privileged",[127,29749,29750],{"class":781}," multiarch\u002Fqemu-user-static",[127,29752,29753],{"class":154}," --reset",[127,29755,29756],{"class":154}," -p",[127,29758,29759],{"class":781}," yes\n",[19,29761,29762],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29764,29765],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[117,29767,29769],{"className":24362,"code":29768,"language":24364,"meta":122,"style":122},"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",[124,29770,29771,29813,29817,29822,29832,29842,29851,29857,29861,29865,29875,29883,29892,29898,29902,29906,29916,29924,29933,29939,29943,29947,29957,29965,29974,29980,29984,29988,29998,30006,30015,30021,30025,30029,30039,30047,30056,30062,30066,30070,30080,30088,30097,30103,30107,30111,30121,30129,30138,30144,30148,30152,30162,30170,30179,30185,30189,30193,30204,30212,30221,30227],{"__ignoreMap":122},[127,29772,29773,29775,29777,29779,29782,29785,29787,29789,29792,29794,29796,29798,29800,29803,29806,29808,29811],{"class":129,"line":130},[127,29774,27093],{"class":143},[127,29776,29713],{"class":781},[127,29778,29272],{"class":781},[127,29780,29781],{"class":154}," --platform",[127,29783,29784],{"class":781}," linux\u002Famd64,linux\u002Farm64",[127,29786,29275],{"class":154},[127,29788,29442],{"class":290},[127,29790,29791],{"class":781},"你的镜像",[127,29793,29448],{"class":147},[127,29795,1634],{"class":290},[127,29797,1533],{"class":781},[127,29799,1584],{"class":290},[127,29801,29802],{"class":781},"标",[127,29804,29805],{"class":147},"签",[127,29807,1634],{"class":290},[127,29809,29810],{"class":154}," --push",[127,29812,29281],{"class":781},[127,29814,29815],{"class":129,"line":137},[127,29816,2942],{"emptyLinePlaceholder":606},[127,29818,29819],{"class":129,"line":151},[127,29820,29821],{"class":133},"# 例子：\n",[127,29823,29824,29826,29828,29830],{"class":129,"line":167},[127,29825,27093],{"class":143},[127,29827,29713],{"class":781},[127,29829,29272],{"class":781},[127,29831,25219],{"class":154},[127,29833,29834,29837,29840],{"class":129,"line":415},[127,29835,29836],{"class":147},"--platform ",[127,29838,29839],{"class":781},"linux\u002Famd64,linux\u002Farm64",[127,29841,25219],{"class":154},[127,29843,29844,29846,29849],{"class":129,"line":421},[127,29845,29275],{"class":154},[127,29847,29848],{"class":781}," tungchiahui\u002Fros:noetic-focal",[127,29850,25219],{"class":154},[127,29852,29853,29855],{"class":129,"line":1766},[127,29854,29810],{"class":154},[127,29856,25219],{"class":154},[127,29858,29859],{"class":129,"line":1856},[127,29860,29281],{"class":781},[127,29862,29863],{"class":129,"line":1862},[127,29864,2942],{"emptyLinePlaceholder":606},[127,29866,29867,29869,29871,29873],{"class":129,"line":1874},[127,29868,27093],{"class":143},[127,29870,29713],{"class":781},[127,29872,29272],{"class":781},[127,29874,25219],{"class":154},[127,29876,29877,29879,29881],{"class":129,"line":2155},[127,29878,29836],{"class":147},[127,29880,29839],{"class":781},[127,29882,25219],{"class":154},[127,29884,29885,29887,29890],{"class":129,"line":2160},[127,29886,29275],{"class":154},[127,29888,29889],{"class":781}," tungchiahui\u002Fros:humble-jammy",[127,29891,25219],{"class":154},[127,29893,29894,29896],{"class":129,"line":2166},[127,29895,29810],{"class":154},[127,29897,25219],{"class":154},[127,29899,29900],{"class":129,"line":2171},[127,29901,29281],{"class":781},[127,29903,29904],{"class":129,"line":2185},[127,29905,2942],{"emptyLinePlaceholder":606},[127,29907,29908,29910,29912,29914],{"class":129,"line":2190},[127,29909,27093],{"class":143},[127,29911,29713],{"class":781},[127,29913,29272],{"class":781},[127,29915,25219],{"class":154},[127,29917,29918,29920,29922],{"class":129,"line":2196},[127,29919,29836],{"class":147},[127,29921,29839],{"class":781},[127,29923,25219],{"class":154},[127,29925,29926,29928,29931],{"class":129,"line":2217},[127,29927,29275],{"class":154},[127,29929,29930],{"class":781}," tungchiahui\u002Fros:jazzy-noble",[127,29932,25219],{"class":154},[127,29934,29935,29937],{"class":129,"line":2222},[127,29936,29810],{"class":154},[127,29938,25219],{"class":154},[127,29940,29941],{"class":129,"line":2236},[127,29942,29281],{"class":781},[127,29944,29945],{"class":129,"line":2241},[127,29946,2942],{"emptyLinePlaceholder":606},[127,29948,29949,29951,29953,29955],{"class":129,"line":2270},[127,29950,26861],{"class":143},[127,29952,29713],{"class":781},[127,29954,29272],{"class":781},[127,29956,25219],{"class":154},[127,29958,29959,29961,29963],{"class":129,"line":2275},[127,29960,29836],{"class":147},[127,29962,29839],{"class":781},[127,29964,25219],{"class":154},[127,29966,29967,29969,29972],{"class":129,"line":2292},[127,29968,29275],{"class":154},[127,29970,29971],{"class":781}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[127,29973,25219],{"class":154},[127,29975,29976,29978],{"class":129,"line":2297},[127,29977,29810],{"class":154},[127,29979,25219],{"class":154},[127,29981,29982],{"class":129,"line":2302},[127,29983,29281],{"class":781},[127,29985,29986],{"class":129,"line":2307},[127,29987,2942],{"emptyLinePlaceholder":606},[127,29989,29990,29992,29994,29996],{"class":129,"line":2321},[127,29991,27093],{"class":143},[127,29993,29713],{"class":781},[127,29995,29272],{"class":781},[127,29997,25219],{"class":154},[127,29999,30000,30002,30004],{"class":129,"line":2326},[127,30001,29836],{"class":147},[127,30003,29839],{"class":781},[127,30005,25219],{"class":154},[127,30007,30008,30010,30013],{"class":129,"line":3119},[127,30009,29275],{"class":154},[127,30011,30012],{"class":781}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[127,30014,25219],{"class":154},[127,30016,30017,30019],{"class":129,"line":3133},[127,30018,29810],{"class":154},[127,30020,25219],{"class":154},[127,30022,30023],{"class":129,"line":3141},[127,30024,29281],{"class":781},[127,30026,30027],{"class":129,"line":3146},[127,30028,2942],{"emptyLinePlaceholder":606},[127,30030,30031,30033,30035,30037],{"class":129,"line":3152},[127,30032,26861],{"class":143},[127,30034,29713],{"class":781},[127,30036,29272],{"class":781},[127,30038,25219],{"class":154},[127,30040,30041,30043,30045],{"class":129,"line":3158},[127,30042,29836],{"class":147},[127,30044,29839],{"class":781},[127,30046,25219],{"class":154},[127,30048,30049,30051,30054],{"class":129,"line":3163},[127,30050,29275],{"class":154},[127,30052,30053],{"class":781}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[127,30055,25219],{"class":154},[127,30057,30058,30060],{"class":129,"line":8490},[127,30059,29810],{"class":154},[127,30061,25219],{"class":154},[127,30063,30064],{"class":129,"line":8514},[127,30065,29281],{"class":781},[127,30067,30068],{"class":129,"line":8519},[127,30069,2942],{"emptyLinePlaceholder":606},[127,30071,30072,30074,30076,30078],{"class":129,"line":8525},[127,30073,27093],{"class":143},[127,30075,29713],{"class":781},[127,30077,29272],{"class":781},[127,30079,25219],{"class":154},[127,30081,30082,30084,30086],{"class":129,"line":8552},[127,30083,29836],{"class":147},[127,30085,29839],{"class":781},[127,30087,25219],{"class":154},[127,30089,30090,30092,30095],{"class":129,"line":8557},[127,30091,29275],{"class":154},[127,30093,30094],{"class":781}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[127,30096,25219],{"class":154},[127,30098,30099,30101],{"class":129,"line":8563},[127,30100,29810],{"class":154},[127,30102,25219],{"class":154},[127,30104,30105],{"class":129,"line":8575},[127,30106,29281],{"class":781},[127,30108,30109],{"class":129,"line":8587},[127,30110,2942],{"emptyLinePlaceholder":606},[127,30112,30113,30115,30117,30119],{"class":129,"line":8599},[127,30114,27093],{"class":143},[127,30116,29713],{"class":781},[127,30118,29272],{"class":781},[127,30120,25219],{"class":154},[127,30122,30123,30125,30127],{"class":129,"line":10258},[127,30124,29836],{"class":147},[127,30126,29839],{"class":781},[127,30128,25219],{"class":154},[127,30130,30131,30133,30136],{"class":129,"line":10283},[127,30132,29275],{"class":154},[127,30134,30135],{"class":781}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[127,30137,25219],{"class":154},[127,30139,30140,30142],{"class":129,"line":10306},[127,30141,29810],{"class":154},[127,30143,25219],{"class":154},[127,30145,30146],{"class":129,"line":10330},[127,30147,29281],{"class":781},[127,30149,30150],{"class":129,"line":10335},[127,30151,2942],{"emptyLinePlaceholder":606},[127,30153,30154,30156,30158,30160],{"class":129,"line":10340},[127,30155,26861],{"class":143},[127,30157,29713],{"class":781},[127,30159,29272],{"class":781},[127,30161,25219],{"class":154},[127,30163,30164,30166,30168],{"class":129,"line":10345},[127,30165,29836],{"class":147},[127,30167,29839],{"class":781},[127,30169,25219],{"class":154},[127,30171,30172,30174,30177],{"class":129,"line":10354},[127,30173,29275],{"class":154},[127,30175,30176],{"class":781}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[127,30178,25219],{"class":154},[127,30180,30181,30183],{"class":129,"line":10359},[127,30182,29810],{"class":154},[127,30184,25219],{"class":154},[127,30186,30187],{"class":129,"line":10365},[127,30188,29281],{"class":781},[127,30190,30191],{"class":129,"line":10386},[127,30192,2942],{"emptyLinePlaceholder":606},[127,30194,30195,30198,30200,30202],{"class":129,"line":10392},[127,30196,30197],{"class":143},"  docker",[127,30199,29713],{"class":781},[127,30201,29272],{"class":781},[127,30203,25219],{"class":154},[127,30205,30206,30208,30210],{"class":129,"line":10406},[127,30207,29836],{"class":147},[127,30209,29839],{"class":781},[127,30211,25219],{"class":154},[127,30213,30214,30216,30219],{"class":129,"line":10412},[127,30215,29275],{"class":154},[127,30217,30218],{"class":781}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[127,30220,25219],{"class":154},[127,30222,30223,30225],{"class":129,"line":10439},[127,30224,29810],{"class":154},[127,30226,25219],{"class":154},[127,30228,30229],{"class":129,"line":10448},[127,30230,29281],{"class":781},[19,30232,30233],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30235,30236],{},[23,30237],{"alt":122,"src":30238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30240,30241],{},[23,30242],{"alt":122,"src":30243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22539,30245,30247],{"id":30246},"_623清除构建缓存","6.2.3.清除构建缓存",[117,30249,30251],{"className":24362,"code":30250,"language":24364,"meta":122,"style":122},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[124,30252,30253,30258],{"__ignoreMap":122},[127,30254,30255],{"class":129,"line":130},[127,30256,30257],{"class":133},"# 清理BuildKit构建缓存\n",[127,30259,30260,30262,30265,30268],{"class":129,"line":137},[127,30261,27093],{"class":143},[127,30263,30264],{"class":781}," builder",[127,30266,30267],{"class":781}," prune",[127,30269,30270],{"class":154}," -f\n",[19,30272,30273],{},[23,30274],{"alt":122,"src":30275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[62,30277,30279],{"id":30278},"_63补充","6.3.补充",[22539,30281,30283],{"id":30282},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30285,30286],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30288,30289],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30291,30292],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[117,30294,30296],{"className":24362,"code":30295,"language":24364,"meta":122,"style":122},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[124,30297,30298,30305],{"__ignoreMap":122},[127,30299,30300,30302],{"class":129,"line":130},[127,30301,27910],{"class":143},[127,30303,30304],{"class":781}," nginx\n",[127,30306,30307,30309,30312,30315,30317],{"class":129,"line":137},[127,30308,29095],{"class":143},[127,30310,30311],{"class":781}," echo",[127,30313,30314],{"class":781}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[127,30316,26763],{"class":290},[127,30318,30319],{"class":781}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30321,30322],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30324,30325],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[117,30327,30329],{"className":24362,"code":30328,"language":24364,"meta":122,"style":122},"docker build -t nginx:tuling .\n",[124,30330,30331],{"__ignoreMap":122},[127,30332,30333,30335,30337,30339,30342],{"class":129,"line":130},[127,30334,27093],{"class":143},[127,30336,29272],{"class":781},[127,30338,29275],{"class":154},[127,30340,30341],{"class":781}," nginx:tuling",[127,30343,29281],{"class":781},[19,30345,30346],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30348,30349],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[117,30351,30353],{"className":24362,"code":30352,"language":24364,"meta":122,"style":122},"docker run -d -p 92:80 nginx:tuling\n",[124,30354,30355],{"__ignoreMap":122},[127,30356,30357,30359,30361,30364,30366,30369],{"class":129,"line":130},[127,30358,27093],{"class":143},[127,30360,27770],{"class":781},[127,30362,30363],{"class":154}," -d",[127,30365,29756],{"class":154},[127,30367,30368],{"class":781}," 92:80",[127,30370,30371],{"class":781}," nginx:tuling\n",[19,30373,30374,30375],{},"4、访问 ",[457,30376,30379],{"href":30377,"rel":30378},"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",[24405],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30381,30382],{},[23,30383],{"alt":122,"src":30384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30386,30387],{},[23,30388],{"alt":122,"src":30389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22539,30391,30393],{"id":30392},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30395,30396],{},"只需要知道大体流程即可",[19,30398,30399],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30401,30402],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30404,30405],{},"2、在Dockerfile中添加以下内容",[117,30407,30409],{"className":26632,"code":30408,"language":26634,"meta":122,"style":122},"# 基于哪个镜像\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",[124,30410,30411,30416,30421,30426,30431,30436,30441,30446],{"__ignoreMap":122},[127,30412,30413],{"class":129,"line":130},[127,30414,30415],{},"# 基于哪个镜像\n",[127,30417,30418],{"class":129,"line":137},[127,30419,30420],{},"From java:8\n",[127,30422,30423],{"class":129,"line":151},[127,30424,30425],{},"# 复制文件到容器\n",[127,30427,30428],{"class":129,"line":167},[127,30429,30430],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[127,30432,30433],{"class":129,"line":415},[127,30434,30435],{},"# 声明需要暴露的端口\n",[127,30437,30438],{"class":129,"line":421},[127,30439,30440],{},"EXPOSE 8877\n",[127,30442,30443],{"class":129,"line":1766},[127,30444,30445],{},"# 配置容器启动后执行的命令\n",[127,30447,30448],{"class":129,"line":1856},[127,30449,30450],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30452,30453],{},"3、使用docker build命令构建镜像",[117,30455,30457],{"className":24362,"code":30456,"language":24364,"meta":122,"style":122},"docker build -t tulingmall-member:0.0.5 .\n",[124,30458,30459],{"__ignoreMap":122},[127,30460,30461,30463,30465,30467,30470],{"class":129,"line":130},[127,30462,27093],{"class":143},[127,30464,29272],{"class":781},[127,30466,29275],{"class":154},[127,30468,30469],{"class":781}," tulingmall-member:0.0.5",[127,30471,29281],{"class":781},[19,30473,30474],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30476,30477],{},[23,30478],{"alt":122,"src":30479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30481,30482],{},"4、启动镜像，加-d可在后台启动",[117,30484,30486],{"className":24362,"code":30485,"language":24364,"meta":122,"style":122},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[124,30487,30488],{"__ignoreMap":122},[127,30489,30490,30492,30494,30496,30498,30501],{"class":129,"line":130},[127,30491,27093],{"class":143},[127,30493,27770],{"class":781},[127,30495,30363],{"class":154},[127,30497,29756],{"class":154},[127,30499,30500],{"class":781}," 8877:8877",[127,30502,30503],{"class":781}," tulingmall-member:0.0.5\n",[19,30505,30506],{},"加上JVM参数：",[117,30508,30510],{"className":24362,"code":30509,"language":24364,"meta":122,"style":122},"# --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",[124,30511,30512,30517,30532,30542,30551,30558],{"__ignoreMap":122},[127,30513,30514],{"class":129,"line":130},[127,30515,30516],{"class":133},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[127,30518,30519,30521,30523,30526,30528,30530],{"class":129,"line":137},[127,30520,27093],{"class":143},[127,30522,27770],{"class":781},[127,30524,30525],{"class":154},"  -d",[127,30527,29756],{"class":154},[127,30529,30500],{"class":781},[127,30531,25219],{"class":154},[127,30533,30534,30536,30539],{"class":129,"line":151},[127,30535,28668],{"class":147},[127,30537,30538],{"class":781},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[127,30540,30541],{"class":154},"  \\\n",[127,30543,30544,30546,30549],{"class":129,"line":167},[127,30545,28668],{"class":147},[127,30547,30548],{"class":781},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[127,30550,30541],{"class":154},[127,30552,30553,30556],{"class":129,"line":415},[127,30554,30555],{"class":147},"--cap-add=SYS_PTRACE  ",[127,30557,26716],{"class":154},[127,30559,30560],{"class":129,"line":421},[127,30561,30562],{"class":147},"tulingmall-member:0.0.5\n",[19,30564,30565],{},"5、访问会员服务接口",[19,30567,30568],{},[23,30569],{"alt":122,"src":30570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22539,30572,30574],{"id":30573},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30576,30577],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30579,30580,30581],{},"阿里云docker镜像仓库：",[457,30582,30583],{"href":30583,"rel":30584},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24405],[19,30586,30587],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30589,30590],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30592,30593],{},[23,30594],{"alt":122,"src":30595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30597,30598],{},"要把镜像推送到镜像仓库",[117,30600,30602],{"className":24362,"code":30601,"language":24364,"meta":122,"style":122},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[124,30603,30604],{"__ignoreMap":122},[127,30605,30606,30608,30610,30612],{"class":129,"line":130},[127,30607,27093],{"class":143},[127,30609,29437],{"class":781},[127,30611,30469],{"class":781},[127,30613,30614],{"class":781}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30616,30617],{},"最后将镜像推送到远程仓库",[117,30619,30621],{"className":24362,"code":30620,"language":24364,"meta":122,"style":122},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[124,30622,30623],{"__ignoreMap":122},[127,30624,30625,30627,30629],{"class":129,"line":130},[127,30626,27093],{"class":143},[127,30628,29556],{"class":781},[127,30630,30614],{"class":781},[575,30632,30633],{},"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":122,"searchDepth":137,"depth":137,"links":30635},[30636,30637,30638],{"id":29023,"depth":151,"text":29024},{"id":29252,"depth":151,"text":29253},{"id":30278,"depth":151,"text":30279},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29015,"description":122},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30645,"title":30646,"body":30647,"description":122,"extension":604,"meta":30790,"navigation":606,"path":30791,"seo":30792,"stem":30793,"__hash__":30794},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30648,"toc":30788},[30649,30652,30657,30662,30665,30670,30675,30678,30683,30688,30691,30696,30699,30702,30705,30708,30711,30714,30734,30756,30759,30762,30782,30785],[10,30650,30646],{"id":30651},"_7vscode远程开发",[632,30653,30654],{},[635,30655,30656],{},"插件1：微软Docker工具",[19,30658,30659],{},[23,30660],{"alt":122,"src":30661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30663,30664],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30666,30667],{},[23,30668],{"alt":122,"src":30669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[632,30671,30672],{"start":137},[635,30673,30674],{},"插件2：微软Docker远程开发工具",[19,30676,30677],{},"下面这是远程开发的插件。",[19,30679,30680],{},[23,30681],{"alt":122,"src":30682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30684,30685],{},[23,30686],{"alt":122,"src":30687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30689,30690],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30692,30693],{},[23,30694],{"alt":122,"src":30695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30697,30698],{},"安装完拓展之后，vscode进行链接：",[19,30700,30701],{},"1.按ctrl+shift+p",[19,30703,30704],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30706,30707],{},"3.选择目前运行的容器",[19,30709,30710],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30712,30713],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[117,30715,30717],{"className":24362,"code":30716,"language":24364,"meta":122,"style":122},"docker run -v 主机目录:容器目录 image-name\n",[124,30718,30719],{"__ignoreMap":122},[127,30720,30721,30723,30725,30728,30731],{"class":129,"line":130},[127,30722,27093],{"class":143},[127,30724,27770],{"class":781},[127,30726,30727],{"class":154}," -v",[127,30729,30730],{"class":781}," 主机目录:容器目录",[127,30732,30733],{"class":781}," image-name\n",[117,30735,30737],{"className":24362,"code":30736,"language":24364,"meta":122,"style":122},"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",[124,30738,30739],{"__ignoreMap":122},[127,30740,30741,30743,30745,30748,30750,30753],{"class":129,"line":130},[127,30742,27093],{"class":143},[127,30744,27770],{"class":781},[127,30746,30747],{"class":154}," -it",[127,30749,30727],{"class":154},[127,30751,30752],{"class":781}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[127,30754,30755],{"class":781}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30757,30758],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30760,30761],{},"查看挂载情况：",[117,30763,30765],{"className":24362,"code":30764,"language":24364,"meta":122,"style":122},"mount | grep -i project\n",[124,30766,30767],{"__ignoreMap":122},[127,30768,30769,30772,30774,30777,30779],{"class":129,"line":130},[127,30770,30771],{"class":143},"mount",[127,30773,25650],{"class":290},[127,30775,30776],{"class":143}," grep",[127,30778,26971],{"class":154},[127,30780,30781],{"class":781}," project\n",[19,30783,30784],{},"也可以通过ls来进行查看",[575,30786,30787],{},"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":122,"searchDepth":137,"depth":137,"links":30789},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30646,"description":122},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30796,"title":30797,"body":30798,"description":603,"extension":604,"meta":30802,"navigation":606,"path":30804,"seo":30805,"stem":30806,"__hash__":30807},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30799,"toc":30800},[],{"title":122,"searchDepth":137,"depth":137,"links":30801},[],{"category":30803},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30797,"description":603},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30809,"title":30810,"body":30811,"description":603,"extension":604,"meta":30815,"navigation":606,"path":30816,"seo":30817,"stem":30818,"__hash__":30819},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30812,"toc":30813},[],{"title":122,"searchDepth":137,"depth":137,"links":30814},[],{"category":30803},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30810,"description":603},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30821,"title":30822,"body":30823,"description":603,"extension":604,"meta":31116,"navigation":606,"path":31117,"seo":31118,"stem":31119,"__hash__":31120},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30824,"toc":31114},[30825,30828,30836,30851,30856,30907,30910,30916,31103,31108,31111],[10,30826,30822],{"id":30827},"_1验证深度学习环境",[19,30829,30830,30831],{},"关于环境的安装，看",[457,30832,30835],{"href":30833,"rel":30834},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24405],"Pytorch-->深度学习",[19,30837,30838,30839,30842,30843,30846,30847,30850],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[124,30840,30841],{},"pytorch-cuda=12.4"," 是一个“ ",[30,30844,30845],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[30,30848,30849],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30852,30853],{},[23,30854],{"alt":122,"src":30855},"\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",[117,30857,30859],{"className":24362,"code":30858,"language":24364,"meta":122,"style":122},"# 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",[124,30860,30861,30866],{"__ignoreMap":122},[127,30862,30863],{"class":129,"line":130},[127,30864,30865],{"class":133},"# CUDA 12.4\n",[127,30867,30868,30871,30873,30876,30879,30882,30885,30888,30890,30893,30896,30899,30902,30904],{"class":129,"line":137},[127,30869,30870],{"class":143},"conda",[127,30872,24374],{"class":781},[127,30874,30875],{"class":781}," pytorch==",[127,30877,30878],{"class":154},"2.5.1",[127,30880,30881],{"class":781}," torchvision==",[127,30883,30884],{"class":154},"0.20.1",[127,30886,30887],{"class":781}," torchaudio==",[127,30889,30878],{"class":154},[127,30891,30892],{"class":781}," pytorch-cuda=",[127,30894,30895],{"class":154},"12.4",[127,30897,30898],{"class":154}," -c",[127,30900,30901],{"class":781}," pytorch",[127,30903,30898],{"class":154},[127,30905,30906],{"class":781}," nvidia\n",[19,30908,30909],{},"）：",[19,30911,30912],{},[457,30913,30914],{"href":30914,"rel":30915},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24405],[117,30917,30921],{"className":30918,"code":30919,"language":30920,"meta":122,"style":122},"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",[124,30922,30923,30928,30936,30941,30951,30967,30972,30982,31019,31026,31038,31054,31059,31069,31081,31091],{"__ignoreMap":122},[127,30924,30925],{"class":129,"line":130},[127,30926,30927],{"class":133},"# 对深度学习环境进行测试\n",[127,30929,30930,30933],{"class":129,"line":137},[127,30931,30932],{"class":290},"import",[127,30934,30935],{"class":147}," torch\n",[127,30937,30938],{"class":129,"line":151},[127,30939,30940],{"class":133},"# 查看cuda是否被激活\n",[127,30942,30943,30946,30948],{"class":129,"line":167},[127,30944,30945],{"class":147},"flag",[127,30947,725],{"class":290},[127,30949,30950],{"class":147},"torch.cuda.is_available()\n",[127,30952,30953,30956,30958,30961,30964],{"class":129,"line":415},[127,30954,30955],{"class":154},"print",[127,30957,681],{"class":147},[127,30959,30960],{"class":781},"\"cuda:\"",[127,30962,30963],{"class":147},", flag)   ",[127,30965,30966],{"class":133},"#返回true的话说明被激活\n",[127,30968,30969],{"class":129,"line":421},[127,30970,30971],{"class":133},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[127,30973,30974,30977,30979],{"class":129,"line":1766},[127,30975,30976],{"class":147},"ngpu",[127,30978,725],{"class":290},[127,30980,30981],{"class":154},"1\n",[127,30983,30984,30987,30989,30992,30995,30997,31000,31003,31006,31008,31010,31012,31014,31017],{"class":129,"line":1856},[127,30985,30986],{"class":147},"device",[127,30988,725],{"class":290},[127,30990,30991],{"class":147},"torch.device(",[127,30993,30994],{"class":781},"\"cuda:0\"",[127,30996,2247],{"class":290},[127,30998,30999],{"class":147},"(torch.cuda.is_available() ",[127,31001,31002],{"class":290},"and",[127,31004,31005],{"class":147}," ngpu",[127,31007,1634],{"class":290},[127,31009,867],{"class":154},[127,31011,14256],{"class":147},[127,31013,2244],{"class":290},[127,31015,31016],{"class":781}," \"cpu\"",[127,31018,687],{"class":147},[127,31020,31021,31023],{"class":129,"line":1862},[127,31022,30955],{"class":154},[127,31024,31025],{"class":147},"(device)\n",[127,31027,31028,31030,31033,31035],{"class":129,"line":1874},[127,31029,30955],{"class":154},[127,31031,31032],{"class":147},"(torch.cuda.get_device_name(",[127,31034,867],{"class":154},[127,31036,31037],{"class":147},"))\n",[127,31039,31040,31042,31045,31047,31049,31051],{"class":129,"line":2155},[127,31041,30955],{"class":154},[127,31043,31044],{"class":147},"(torch.rand(",[127,31046,749],{"class":154},[127,31048,1053],{"class":147},[127,31050,749],{"class":154},[127,31052,31053],{"class":147},").cuda())\n",[127,31055,31056],{"class":129,"line":2160},[127,31057,31058],{"class":133},"# 查看cuda和cudnn的版本\n",[127,31060,31061,31064,31066],{"class":129,"line":2166},[127,31062,31063],{"class":147},"cuda_version",[127,31065,725],{"class":290},[127,31067,31068],{"class":147},"torch.version.cuda\n",[127,31070,31071,31073,31075,31078],{"class":129,"line":2171},[127,31072,30955],{"class":154},[127,31074,681],{"class":147},[127,31076,31077],{"class":781},"\"cuda version\"",[127,31079,31080],{"class":147},",cuda_version)\n",[127,31082,31083,31086,31088],{"class":129,"line":2185},[127,31084,31085],{"class":147},"cudnn_version",[127,31087,725],{"class":290},[127,31089,31090],{"class":147},"torch.backends.cudnn.version()\n",[127,31092,31093,31095,31097,31100],{"class":129,"line":2190},[127,31094,30955],{"class":154},[127,31096,681],{"class":147},[127,31098,31099],{"class":781},"\"cudnn version\"",[127,31101,31102],{"class":147},",cudnn_version)\n",[19,31104,31105],{},[23,31106],{"alt":122,"src":31107},"\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",[19,31109,31110],{},"cuda:0 指的是一块显卡",[575,31112,31113],{},"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":122,"searchDepth":137,"depth":137,"links":31115},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30822,"description":603},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31122,"title":31123,"body":31124,"description":603,"extension":604,"meta":50928,"navigation":606,"path":50929,"seo":50930,"stem":50931,"__hash__":50932},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31125,"toc":50922},[31126,31129,31133,31137,31140,31145,31150,31153,31158,31163,31168,31171,31175,31180,31184,31189,31192,31197,31200,31203,31206,31209,31214,31217,31222,31227,31232,31237,31240,31244,31247,31252,31856,31861,31864,31869,31872,31875,32339,32342,32345,32348,32351,34402,34405,34410,34415,35210,35213,35218,35996,36000,37659,37663,38377,38381,38385,38390,38395,38400,38403,38408,38413,38418,38423,38428,38432,38437,39719,39724,39727,39730,39733,39888,39891,39894,41110,41115,41810,41814,41818,41823,41828,41831,41836,41841,41846,41851,41856,41861,41866,41871,41876,41881,41886,41891,41896,41901,41906,41911,41916,41921,41926,41931,41936,41941,41946,41951,41956,41961,41966,41971,41976,41981,41985,41989,41992,43470,43474,45121,45125,45819,45823,45826,45829,46373,46376,46380,46383,47780,47784,47787,48365,50152,50156,50159,50919],[10,31127,31123],{"id":31128},"_2经典神经网络",[62,31130,31132],{"id":31131},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22539,31134,31136],{"id":31135},"_211原理介绍","2.1.1.原理介绍",[19,31138,31139],{},"LeNet-5",[632,31141,31142],{},[635,31143,31144],{},"原理",[19,31146,31147],{},[23,31148],{"alt":122,"src":31149},"\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",[19,31151,31152],{},"B是batch批次；C是channel通道",[632,31154,31155],{"start":137},[635,31156,31157],{},"网络参数详细",[19,31159,31160],{},[23,31161],{"alt":122,"src":31162},"\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",[19,31164,31165],{},[23,31166],{"alt":122,"src":31167},"\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",[19,31169,31170],{},"AlexNet",[632,31172,31173],{},[635,31174,31144],{},[19,31176,31177],{},[23,31178],{"alt":122,"src":31179},"\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",[632,31181,31182],{"start":137},[635,31183,31157],{},[19,31185,31186],{},[23,31187],{"alt":122,"src":31188},"\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",[19,31190,31191],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31193,31194],{},[23,31195],{"alt":122,"src":31196},"\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",[19,31198,31199],{},"数据处理中的图像增强操作:",[19,31201,31202],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31204,31205],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31207,31208],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31210,31211],{},[23,31212],{"alt":122,"src":31213},"\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",[19,31215,31216],{},"提升网络精确度的方法：LRN正则化",[19,31218,31219],{},[23,31220],{"alt":122,"src":31221},"\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",[19,31223,31224],{},[23,31225],{"alt":122,"src":31226},"\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",[632,31228,31229],{"start":151},[635,31230,31231],{},"AlexNet的总结",[19,31233,31234],{},[23,31235],{"alt":122,"src":31236},"\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",[19,31238,31239],{},"比LeNet模型要深一丢丢",[22539,31241,31243],{"id":31242},"_212代码实现","2.1.2.代码实现",[19,31245,31246],{},"（1）LeNet",[632,31248,31249],{},[635,31250,31251],{},"模型搭建",[117,31253,31255],{"className":30918,"code":31254,"language":30920,"meta":122,"style":122},"# 导入库\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",[124,31256,31257,31262,31268,31273,31286,31291,31303,31307,31327,31332,31337,31348,31353,31372,31376,31381,31430,31442,31447,31476,31511,31538,31543,31555,31560,31580,31599,31618,31622,31627,31637,31654,31665,31680,31691,31702,31717,31732,31743,31750,31754,31768,31773,31796,31801,31806,31811,31815,31820,31825,31835],{"__ignoreMap":122},[127,31258,31259],{"class":129,"line":130},[127,31260,31261],{"class":133},"# 导入库\n",[127,31263,31264,31266],{"class":129,"line":137},[127,31265,30932],{"class":290},[127,31267,30935],{"class":147},[127,31269,31270],{"class":129,"line":151},[127,31271,31272],{"class":133},"# 导入神经网络层\n",[127,31274,31275,31278,31281,31283],{"class":129,"line":167},[127,31276,31277],{"class":290},"from",[127,31279,31280],{"class":147}," torch ",[127,31282,30932],{"class":290},[127,31284,31285],{"class":147}," nn\n",[127,31287,31288],{"class":129,"line":415},[127,31289,31290],{"class":133},"# 导入展示神经网络参数的包\n",[127,31292,31293,31295,31298,31300],{"class":129,"line":421},[127,31294,31277],{"class":290},[127,31296,31297],{"class":147}," torchsummary ",[127,31299,30932],{"class":290},[127,31301,31302],{"class":147}," summary\n",[127,31304,31305],{"class":129,"line":1766},[127,31306,2942],{"emptyLinePlaceholder":606},[127,31308,31309,31311,31314,31316,31319,31321,31324],{"class":129,"line":1856},[127,31310,15236],{"class":290},[127,31312,31313],{"class":143}," LeNet",[127,31315,681],{"class":147},[127,31317,31318],{"class":143},"nn",[127,31320,1233],{"class":147},[127,31322,31323],{"class":143},"Module",[127,31325,31326],{"class":147},"):\n",[127,31328,31329],{"class":129,"line":1862},[127,31330,31331],{"class":133},"    # 模型初始化:\n",[127,31333,31334],{"class":129,"line":1874},[127,31335,31336],{"class":133},"    # 定义一些网络层和激活函数\n",[127,31338,31339,31342,31345],{"class":129,"line":2155},[127,31340,31341],{"class":290},"    def",[127,31343,31344],{"class":154}," __init__",[127,31346,31347],{"class":147},"(self):\n",[127,31349,31350],{"class":129,"line":2160},[127,31351,31352],{"class":133},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[127,31354,31355,31358,31361,31364,31367,31370],{"class":129,"line":2166},[127,31356,31357],{"class":154},"        super",[127,31359,31360],{"class":147},"(LeNet,",[127,31362,31363],{"class":154},"self",[127,31365,31366],{"class":147},").",[127,31368,31369],{"class":154},"__init__",[127,31371,2518],{"class":147},[127,31373,31374],{"class":129,"line":2171},[127,31375,2942],{"emptyLinePlaceholder":606},[127,31377,31378],{"class":129,"line":2185},[127,31379,31380],{"class":133},"        # 定义网络层\n",[127,31382,31383,31386,31389,31391,31394,31397,31399,31401,31403,31406,31408,31410,31412,31415,31417,31419,31421,31424,31426,31428],{"class":129,"line":2190},[127,31384,31385],{"class":154},"        self",[127,31387,31388],{"class":147},".c1",[127,31390,725],{"class":290},[127,31392,31393],{"class":147},"nn.Conv2d(",[127,31395,31396],{"class":5758},"in_channels",[127,31398,725],{"class":290},[127,31400,893],{"class":154},[127,31402,1053],{"class":147},[127,31404,31405],{"class":5758},"out_channels",[127,31407,725],{"class":290},[127,31409,1019],{"class":154},[127,31411,1053],{"class":147},[127,31413,31414],{"class":5758},"kernel_size",[127,31416,725],{"class":290},[127,31418,994],{"class":154},[127,31420,1053],{"class":147},[127,31422,31423],{"class":5758},"padding",[127,31425,725],{"class":290},[127,31427,530],{"class":154},[127,31429,687],{"class":147},[127,31431,31432,31434,31437,31439],{"class":129,"line":2196},[127,31433,31385],{"class":154},[127,31435,31436],{"class":147},".sig",[127,31438,725],{"class":290},[127,31440,31441],{"class":147},"nn.Sigmoid()\n",[127,31443,31444],{"class":129,"line":2217},[127,31445,31446],{"class":133},"        # 定义池化\n",[127,31448,31449,31451,31454,31456,31459,31461,31463,31465,31467,31470,31472,31474],{"class":129,"line":2222},[127,31450,31385],{"class":154},[127,31452,31453],{"class":147},".s2",[127,31455,725],{"class":290},[127,31457,31458],{"class":147},"nn.AvgPool2d(",[127,31460,31414],{"class":5758},[127,31462,725],{"class":290},[127,31464,530],{"class":154},[127,31466,1053],{"class":147},[127,31468,31469],{"class":5758},"stride",[127,31471,725],{"class":290},[127,31473,530],{"class":154},[127,31475,687],{"class":147},[127,31477,31478,31480,31483,31485,31487,31489,31491,31493,31495,31497,31499,31501,31503,31505,31507,31509],{"class":129,"line":2236},[127,31479,31385],{"class":154},[127,31481,31482],{"class":147},".c3",[127,31484,725],{"class":290},[127,31486,31393],{"class":147},[127,31488,31396],{"class":5758},[127,31490,725],{"class":290},[127,31492,1019],{"class":154},[127,31494,1053],{"class":147},[127,31496,31405],{"class":5758},[127,31498,725],{"class":290},[127,31500,287],{"class":154},[127,31502,1053],{"class":147},[127,31504,31414],{"class":5758},[127,31506,725],{"class":290},[127,31508,994],{"class":154},[127,31510,687],{"class":147},[127,31512,31513,31515,31518,31520,31522,31524,31526,31528,31530,31532,31534,31536],{"class":129,"line":2241},[127,31514,31385],{"class":154},[127,31516,31517],{"class":147},".s4",[127,31519,725],{"class":290},[127,31521,31458],{"class":147},[127,31523,31414],{"class":5758},[127,31525,725],{"class":290},[127,31527,530],{"class":154},[127,31529,1053],{"class":147},[127,31531,31469],{"class":5758},[127,31533,725],{"class":290},[127,31535,530],{"class":154},[127,31537,687],{"class":147},[127,31539,31540],{"class":129,"line":2270},[127,31541,31542],{"class":133},"        # 定义平展层\n",[127,31544,31545,31547,31550,31552],{"class":129,"line":2275},[127,31546,31385],{"class":154},[127,31548,31549],{"class":147},".flatten",[127,31551,725],{"class":290},[127,31553,31554],{"class":147},"nn.Flatten()\n",[127,31556,31557],{"class":129,"line":2292},[127,31558,31559],{"class":133},"        # 定义全连接层\n",[127,31561,31562,31564,31567,31569,31572,31574,31576,31578],{"class":129,"line":2297},[127,31563,31385],{"class":154},[127,31565,31566],{"class":147},".f5",[127,31568,725],{"class":290},[127,31570,31571],{"class":147},"nn.Linear(",[127,31573,4529],{"class":154},[127,31575,1053],{"class":147},[127,31577,1491],{"class":154},[127,31579,687],{"class":147},[127,31581,31582,31584,31587,31589,31591,31593,31595,31597],{"class":129,"line":2302},[127,31583,31385],{"class":154},[127,31585,31586],{"class":147},".f6",[127,31588,725],{"class":290},[127,31590,31571],{"class":147},[127,31592,1491],{"class":154},[127,31594,1053],{"class":147},[127,31596,1385],{"class":154},[127,31598,687],{"class":147},[127,31600,31601,31603,31606,31608,31610,31612,31614,31616],{"class":129,"line":2307},[127,31602,31385],{"class":154},[127,31604,31605],{"class":147},".f7",[127,31607,725],{"class":290},[127,31609,31571],{"class":147},[127,31611,1385],{"class":154},[127,31613,1053],{"class":147},[127,31615,1121],{"class":154},[127,31617,687],{"class":147},[127,31619,31620],{"class":129,"line":2321},[127,31621,2942],{"emptyLinePlaceholder":606},[127,31623,31624],{"class":129,"line":2326},[127,31625,31626],{"class":133},"    # 写工具->写前向传播\n",[127,31628,31629,31631,31634],{"class":129,"line":3119},[127,31630,31341],{"class":290},[127,31632,31633],{"class":143}," forward",[127,31635,31636],{"class":147},"(self,x):\n",[127,31638,31639,31642,31644,31646,31649,31651],{"class":129,"line":3133},[127,31640,31641],{"class":147},"        x",[127,31643,725],{"class":290},[127,31645,31363],{"class":154},[127,31647,31648],{"class":147},".sig(",[127,31650,31363],{"class":154},[127,31652,31653],{"class":147},".c1(x))\n",[127,31655,31656,31658,31660,31662],{"class":129,"line":3141},[127,31657,31641],{"class":147},[127,31659,725],{"class":290},[127,31661,31363],{"class":154},[127,31663,31664],{"class":147},".s2(x)\n",[127,31666,31667,31669,31671,31673,31675,31677],{"class":129,"line":3146},[127,31668,31641],{"class":147},[127,31670,725],{"class":290},[127,31672,31363],{"class":154},[127,31674,31648],{"class":147},[127,31676,31363],{"class":154},[127,31678,31679],{"class":147},".c3(x))\n",[127,31681,31682,31684,31686,31688],{"class":129,"line":3152},[127,31683,31641],{"class":147},[127,31685,725],{"class":290},[127,31687,31363],{"class":154},[127,31689,31690],{"class":147},".s4(x)\n",[127,31692,31693,31695,31697,31699],{"class":129,"line":3158},[127,31694,31641],{"class":147},[127,31696,725],{"class":290},[127,31698,31363],{"class":154},[127,31700,31701],{"class":147},".flatten(x)\n",[127,31703,31704,31706,31708,31710,31712,31714],{"class":129,"line":3163},[127,31705,31641],{"class":147},[127,31707,725],{"class":290},[127,31709,31363],{"class":154},[127,31711,31648],{"class":147},[127,31713,31363],{"class":154},[127,31715,31716],{"class":147},".f5(x))\n",[127,31718,31719,31721,31723,31725,31727,31729],{"class":129,"line":8490},[127,31720,31641],{"class":147},[127,31722,725],{"class":290},[127,31724,31363],{"class":154},[127,31726,31648],{"class":147},[127,31728,31363],{"class":154},[127,31730,31731],{"class":147},".f6(x))\n",[127,31733,31734,31736,31738,31740],{"class":129,"line":8514},[127,31735,31641],{"class":147},[127,31737,725],{"class":290},[127,31739,31363],{"class":154},[127,31741,31742],{"class":147},".f7(x)\n",[127,31744,31745,31747],{"class":129,"line":8519},[127,31746,15294],{"class":290},[127,31748,31749],{"class":147}," x\n",[127,31751,31752],{"class":129,"line":8525},[127,31753,2942],{"emptyLinePlaceholder":606},[127,31755,31756,31758,31761,31763,31766],{"class":129,"line":8552},[127,31757,2075],{"class":290},[127,31759,31760],{"class":154}," __name__",[127,31762,3491],{"class":290},[127,31764,31765],{"class":781},"\"__main__\"",[127,31767,4281],{"class":147},[127,31769,31770],{"class":129,"line":8557},[127,31771,31772],{"class":133},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[127,31774,31775,31778,31780,31782,31785,31787,31790,31792,31794],{"class":129,"line":8563},[127,31776,31777],{"class":147},"    device",[127,31779,725],{"class":290},[127,31781,30991],{"class":147},[127,31783,31784],{"class":781},"\"cuda\"",[127,31786,2247],{"class":290},[127,31788,31789],{"class":147}," torch.cuda.is_available() ",[127,31791,2244],{"class":290},[127,31793,31016],{"class":781},[127,31795,687],{"class":147},[127,31797,31798],{"class":129,"line":8575},[127,31799,31800],{"class":133},"    # 如果就是想指定用cpu用下方代码:\n",[127,31802,31803],{"class":129,"line":8587},[127,31804,31805],{"class":133},"    # device=\"cpu\"\n",[127,31807,31808],{"class":129,"line":8599},[127,31809,31810],{"class":133},"    # print(device)\n",[127,31812,31813],{"class":129,"line":10258},[127,31814,2942],{"emptyLinePlaceholder":606},[127,31816,31817],{"class":129,"line":10283},[127,31818,31819],{"class":133},"    # 实例化模型\n",[127,31821,31822],{"class":129,"line":10306},[127,31823,31824],{"class":133},"    # 将模型放到设备中去运行\n",[127,31826,31827,31830,31832],{"class":129,"line":10330},[127,31828,31829],{"class":147},"    model",[127,31831,725],{"class":290},[127,31833,31834],{"class":147},"LeNet().to(device)\n",[127,31836,31837,31840,31843,31845,31847,31849,31851,31853],{"class":129,"line":10335},[127,31838,31839],{"class":154},"    print",[127,31841,31842],{"class":147},"(summary(model,(",[127,31844,893],{"class":154},[127,31846,1053],{"class":147},[127,31848,1575],{"class":154},[127,31850,1053],{"class":147},[127,31852,1575],{"class":154},[127,31854,31855],{"class":147},")))\n",[19,31857,31858],{},[23,31859],{"alt":122,"src":31860},"\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",[19,31862,31863],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[632,31865,31866],{"start":137},[635,31867,31868],{},"训练",[19,31870,31871],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31873,31874],{},"在训练之前可以将数据展示看一下",[117,31876,31878],{"className":30918,"code":31877,"language":30920,"meta":122,"style":122},"# 建立画图的函数，用于展示数据\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",[124,31879,31880,31885,31890,31902,31914,31927,31932,31944,31949,31961,31966,31978,31982,31986,32007,32019,32024,32045,32056,32060,32065,32083,32094,32099,32110,32115,32126,32130,32135,32150,32163,32168,32173,32186,32199,32212,32217,32221,32226,32246,32263,32283,32296,32309,32319,32334],{"__ignoreMap":122},[127,31881,31882],{"class":129,"line":130},[127,31883,31884],{"class":133},"# 建立画图的函数，用于展示数据\n",[127,31886,31887],{"class":129,"line":137},[127,31888,31889],{"class":133},"# torchvision中包含很多内置的数据集\n",[127,31891,31892,31894,31897,31899],{"class":129,"line":151},[127,31893,31277],{"class":290},[127,31895,31896],{"class":147}," sklearn.externals.array_api_compat.torch ",[127,31898,30932],{"class":290},[127,31900,31901],{"class":147}," squeeze\n",[127,31903,31904,31906,31909,31911],{"class":129,"line":167},[127,31905,31277],{"class":290},[127,31907,31908],{"class":147}," torchvision.datasets ",[127,31910,30932],{"class":290},[127,31912,31913],{"class":147}," FashionMNIST\n",[127,31915,31916,31918,31921,31924],{"class":129,"line":415},[127,31917,30932],{"class":290},[127,31919,31920],{"class":147}," numpy ",[127,31922,31923],{"class":290},"as",[127,31925,31926],{"class":147}," np\n",[127,31928,31929],{"class":129,"line":421},[127,31930,31931],{"class":133},"# 引入处理数据集的包\n",[127,31933,31934,31936,31939,31941],{"class":129,"line":1766},[127,31935,31277],{"class":290},[127,31937,31938],{"class":147}," torchvision ",[127,31940,30932],{"class":290},[127,31942,31943],{"class":147}," transforms\n",[127,31945,31946],{"class":129,"line":1856},[127,31947,31948],{"class":133},"# 从torch库中引入数据处理的包\n",[127,31950,31951,31953,31956,31958],{"class":129,"line":1862},[127,31952,30932],{"class":290},[127,31954,31955],{"class":147}," torch.utils.data ",[127,31957,31923],{"class":290},[127,31959,31960],{"class":147}," Data\n",[127,31962,31963],{"class":129,"line":1874},[127,31964,31965],{"class":133},"# 导入画图的库\n",[127,31967,31968,31970,31973,31975],{"class":129,"line":2155},[127,31969,30932],{"class":290},[127,31971,31972],{"class":147}," matplotlib.pyplot ",[127,31974,31923],{"class":290},[127,31976,31977],{"class":147}," plt\n",[127,31979,31980],{"class":129,"line":2160},[127,31981,2942],{"emptyLinePlaceholder":606},[127,31983,31984],{"class":129,"line":2166},[127,31985,2942],{"emptyLinePlaceholder":606},[127,31987,31988,31991,31993,31996,31999,32001,32004],{"class":129,"line":2171},[127,31989,31990],{"class":147},"train_data",[127,31992,725],{"class":290},[127,31994,31995],{"class":147},"FashionMNIST(",[127,31997,31998],{"class":5758},"root",[127,32000,725],{"class":290},[127,32002,32003],{"class":781},"'.\u002Fdata'",[127,32005,32006],{"class":147},",\n",[127,32008,32009,32012,32014,32017],{"class":129,"line":2185},[127,32010,32011],{"class":5758},"                        train",[127,32013,725],{"class":290},[127,32015,32016],{"class":154},"True",[127,32018,32006],{"class":147},[127,32020,32021],{"class":129,"line":2190},[127,32022,32023],{"class":133},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[127,32025,32026,32029,32031,32034,32037,32039,32042],{"class":129,"line":2196},[127,32027,32028],{"class":5758},"                        transform",[127,32030,725],{"class":290},[127,32032,32033],{"class":147},"transforms.Compose([transforms.Resize(",[127,32035,32036],{"class":5758},"size",[127,32038,725],{"class":290},[127,32040,32041],{"class":154},"224",[127,32043,32044],{"class":147},"),transforms.ToTensor()]),\n",[127,32046,32047,32050,32052,32054],{"class":129,"line":2217},[127,32048,32049],{"class":5758},"                        download",[127,32051,725],{"class":290},[127,32053,32016],{"class":154},[127,32055,687],{"class":147},[127,32057,32058],{"class":129,"line":2222},[127,32059,2942],{"emptyLinePlaceholder":606},[127,32061,32062],{"class":129,"line":2236},[127,32063,32064],{"class":133},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[127,32066,32067,32070,32072,32075,32078,32080],{"class":129,"line":2241},[127,32068,32069],{"class":147},"train_loader",[127,32071,725],{"class":290},[127,32073,32074],{"class":147},"Data.DataLoader(",[127,32076,32077],{"class":5758},"dataset",[127,32079,725],{"class":290},[127,32081,32082],{"class":147},"train_data,\n",[127,32084,32085,32088,32090,32092],{"class":129,"line":2270},[127,32086,32087],{"class":5758},"                             batch_size",[127,32089,725],{"class":290},[127,32091,879],{"class":154},[127,32093,32006],{"class":147},[127,32095,32096],{"class":129,"line":2275},[127,32097,32098],{"class":133},"                             # 数据是否打乱\n",[127,32100,32101,32104,32106,32108],{"class":129,"line":2292},[127,32102,32103],{"class":5758},"                             shuffle",[127,32105,725],{"class":290},[127,32107,32016],{"class":154},[127,32109,32006],{"class":147},[127,32111,32112],{"class":129,"line":2297},[127,32113,32114],{"class":133},"                             # 规定加载数据的进程\n",[127,32116,32117,32120,32122,32124],{"class":129,"line":2302},[127,32118,32119],{"class":5758},"                             num_workers",[127,32121,725],{"class":290},[127,32123,867],{"class":154},[127,32125,687],{"class":147},[127,32127,32128],{"class":129,"line":2307},[127,32129,2942],{"emptyLinePlaceholder":606},[127,32131,32132],{"class":129,"line":2321},[127,32133,32134],{"class":133},"# 获得一个batch的数据\n",[127,32136,32137,32139,32142,32144,32147],{"class":129,"line":2326},[127,32138,3567],{"class":290},[127,32140,32141],{"class":147}," step,(b_x,b_y) ",[127,32143,26584],{"class":290},[127,32145,32146],{"class":154}," enumerate",[127,32148,32149],{"class":147},"(train_loader):\n",[127,32151,32152,32154,32157,32159,32161],{"class":129,"line":3119},[127,32153,3643],{"class":290},[127,32155,32156],{"class":147}," step ",[127,32158,1634],{"class":290},[127,32160,4635],{"class":154},[127,32162,4281],{"class":147},[127,32164,32165],{"class":129,"line":3133},[127,32166,32167],{"class":290},"        break\n",[127,32169,32170],{"class":129,"line":3141},[127,32171,32172],{"class":133},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[127,32174,32175,32178,32180,32183],{"class":129,"line":3146},[127,32176,32177],{"class":147},"batch_x",[127,32179,725],{"class":290},[127,32181,32182],{"class":147},"b_x.squeeze().numpy()  ",[127,32184,32185],{"class":133},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[127,32187,32188,32191,32193,32196],{"class":129,"line":3152},[127,32189,32190],{"class":147},"batch_y",[127,32192,725],{"class":290},[127,32194,32195],{"class":147},"b_y.numpy()   ",[127,32197,32198],{"class":133},"#将张量转换成功numpy数组\n",[127,32200,32201,32204,32206,32209],{"class":129,"line":3158},[127,32202,32203],{"class":147},"class_label",[127,32205,725],{"class":290},[127,32207,32208],{"class":147},"train_data.classes  ",[127,32210,32211],{"class":133},"#训练集标签\n",[127,32213,32214],{"class":129,"line":3163},[127,32215,32216],{"class":133},"# print(class_label)\n",[127,32218,32219],{"class":129,"line":8490},[127,32220,2942],{"emptyLinePlaceholder":606},[127,32222,32223],{"class":129,"line":8514},[127,32224,32225],{"class":133},"# 可视化一个batch的图像\n",[127,32227,32228,32231,32234,32236,32238,32240,32242,32244],{"class":129,"line":8519},[127,32229,32230],{"class":147},"plt.figure(",[127,32232,32233],{"class":5758},"figsize",[127,32235,725],{"class":290},[127,32237,681],{"class":147},[127,32239,1173],{"class":154},[127,32241,1053],{"class":147},[127,32243,994],{"class":154},[127,32245,31037],{"class":147},[127,32247,32248,32250,32253,32255,32258,32260],{"class":129,"line":8525},[127,32249,3567],{"class":290},[127,32251,32252],{"class":147}," ii ",[127,32254,26584],{"class":290},[127,32256,32257],{"class":147}," np.arange(",[127,32259,7900],{"class":154},[127,32261,32262],{"class":147},"(batch_y)):\n",[127,32264,32265,32268,32270,32272,32274,32277,32279,32281],{"class":129,"line":8552},[127,32266,32267],{"class":147},"    plt.subplot(",[127,32269,968],{"class":154},[127,32271,1053],{"class":147},[127,32273,287],{"class":154},[127,32275,32276],{"class":147},",ii ",[127,32278,1156],{"class":290},[127,32280,25659],{"class":154},[127,32282,687],{"class":147},[127,32284,32285,32288,32291,32293],{"class":129,"line":8557},[127,32286,32287],{"class":147},"    plt.imshow(batch_x[ii,:,:],",[127,32289,32290],{"class":5758},"cmap",[127,32292,725],{"class":290},[127,32294,32295],{"class":147},"plt.cm.gray)\n",[127,32297,32298,32301,32303,32305,32307],{"class":129,"line":8563},[127,32299,32300],{"class":147},"    plt.title(class_label[batch_y[ii]],",[127,32302,32036],{"class":5758},[127,32304,725],{"class":290},[127,32306,1121],{"class":154},[127,32308,687],{"class":147},[127,32310,32311,32314,32317],{"class":129,"line":8575},[127,32312,32313],{"class":147},"    plt.axis(",[127,32315,32316],{"class":781},"\"off\"",[127,32318,687],{"class":147},[127,32320,32321,32324,32327,32329,32332],{"class":129,"line":8587},[127,32322,32323],{"class":147},"    plt.subplots_adjust(",[127,32325,32326],{"class":5758},"wspace",[127,32328,725],{"class":290},[127,32330,32331],{"class":154},"0.05",[127,32333,687],{"class":147},[127,32335,32336],{"class":129,"line":8599},[127,32337,32338],{"class":147},"plt.show()\n",[19,32340,32341],{},"用matplotlib进行展示的过程可以后续再补",[19,32343,32344],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32346,32347],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32349,32350],{},"模型训练：",[117,32352,32354],{"className":30918,"code":32353,"language":30920,"meta":122,"style":122},"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",[124,32355,32356,32363,32370,32374,32386,32392,32403,32413,32423,32433,32443,32448,32460,32470,32474,32478,32483,32494,32507,32518,32535,32546,32585,32601,32613,32624,32629,32640,32656,32667,32678,32689,32696,32700,32705,32710,32714,32719,32729,32750,32754,32758,32763,32768,32773,32793,32797,32802,32812,32816,32821,32830,32835,32840,32845,32855,32859,32863,32868,32873,32883,32888,32898,32903,32912,32917,32926,32931,32940,32944,32949,32959,32963,32967,32972,32987,33015,33030,33034,33039,33044,33053,33058,33067,33072,33081,33086,33095,33100,33109,33114,33123,33128,33141,33146,33156,33161,33171,33177,33183,33189,33195,33206,33212,33232,33238,33249,33255,33261,33267,33273,33279,33285,33291,33311,33317,33333,33339,33353,33359,33374,33380,33389,33395,33404,33410,33416,33425,33431,33442,33448,33467,33473,33484,33490,33510,33526,33532,33546,33552,33558,33569,33575,33581,33591,33597,33608,33614,33624,33629,33635,33684,33731,33736,33742,33761,33767,33787,33793,33799,33809,33814,33820,33836,33881,33887,33893,33899,33910,33916,33922,33928,33946,33960,33969,33978,33987,33996,34002,34008,34016,34021,34027,34038,34044,34064,34070,34076,34082,34099,34105,34111,34117,34123,34129,34156,34180,34186,34192,34198,34209,34220,34226,34243,34266,34289,34295,34300,34309,34319,34325,34330,34336,34349,34355,34366,34377,34396],{"__ignoreMap":122},[127,32357,32358,32360],{"class":129,"line":130},[127,32359,30932],{"class":290},[127,32361,32362],{"class":147}," copy\n",[127,32364,32365,32367],{"class":129,"line":137},[127,32366,30932],{"class":290},[127,32368,32369],{"class":147}," time\n",[127,32371,32372],{"class":129,"line":151},[127,32373,2942],{"emptyLinePlaceholder":606},[127,32375,32376,32378,32381,32383],{"class":129,"line":167},[127,32377,30932],{"class":290},[127,32379,32380],{"class":147}," pandas ",[127,32382,31923],{"class":290},[127,32384,32385],{"class":147}," pd\n",[127,32387,32388,32390],{"class":129,"line":415},[127,32389,30932],{"class":290},[127,32391,30935],{"class":147},[127,32393,32394,32396,32398,32400],{"class":129,"line":421},[127,32395,31277],{"class":290},[127,32397,31955],{"class":147},[127,32399,30932],{"class":290},[127,32401,32402],{"class":147}," Dataset\n",[127,32404,32405,32407,32409,32411],{"class":129,"line":1766},[127,32406,31277],{"class":290},[127,32408,31908],{"class":147},[127,32410,30932],{"class":290},[127,32412,31913],{"class":147},[127,32414,32415,32417,32419,32421],{"class":129,"line":1856},[127,32416,31277],{"class":290},[127,32418,31938],{"class":147},[127,32420,30932],{"class":290},[127,32422,31943],{"class":147},[127,32424,32425,32427,32429,32431],{"class":129,"line":1862},[127,32426,30932],{"class":290},[127,32428,31955],{"class":147},[127,32430,31923],{"class":290},[127,32432,31960],{"class":147},[127,32434,32435,32437,32439,32441],{"class":129,"line":1874},[127,32436,30932],{"class":290},[127,32438,31972],{"class":147},[127,32440,31923],{"class":290},[127,32442,31977],{"class":147},[127,32444,32445],{"class":129,"line":2155},[127,32446,32447],{"class":133},"# 导入模型\n",[127,32449,32450,32452,32455,32457],{"class":129,"line":2160},[127,32451,31277],{"class":290},[127,32453,32454],{"class":147}," model ",[127,32456,30932],{"class":290},[127,32458,32459],{"class":147}," LeNet\n",[127,32461,32462,32464,32466,32468],{"class":129,"line":2166},[127,32463,31277],{"class":290},[127,32465,31280],{"class":147},[127,32467,30932],{"class":290},[127,32469,31285],{"class":147},[127,32471,32472],{"class":129,"line":2171},[127,32473,2942],{"emptyLinePlaceholder":606},[127,32475,32476],{"class":129,"line":2185},[127,32477,2942],{"emptyLinePlaceholder":606},[127,32479,32480],{"class":129,"line":2190},[127,32481,32482],{"class":133},"# 处理训练集与验证集函数--->划分数据集\n",[127,32484,32485,32488,32491],{"class":129,"line":2196},[127,32486,32487],{"class":290},"def",[127,32489,32490],{"class":143}," train_val_data_process",[127,32492,32493],{"class":147},"():\n",[127,32495,32496,32499,32501,32503,32505],{"class":129,"line":2217},[127,32497,32498],{"class":147},"    train_data",[127,32500,725],{"class":290},[127,32502,31995],{"class":147},[127,32504,32003],{"class":781},[127,32506,32006],{"class":147},[127,32508,32509,32512,32514,32516],{"class":129,"line":2222},[127,32510,32511],{"class":5758},"                            train",[127,32513,725],{"class":290},[127,32515,32016],{"class":154},[127,32517,32006],{"class":147},[127,32519,32520,32523,32525,32527,32529,32531,32533],{"class":129,"line":2236},[127,32521,32522],{"class":5758},"                            transform",[127,32524,725],{"class":290},[127,32526,32033],{"class":147},[127,32528,32036],{"class":5758},[127,32530,725],{"class":290},[127,32532,1575],{"class":154},[127,32534,32044],{"class":147},[127,32536,32537,32540,32542,32544],{"class":129,"line":2241},[127,32538,32539],{"class":5758},"                            download",[127,32541,725],{"class":290},[127,32543,32016],{"class":154},[127,32545,687],{"class":147},[127,32547,32548,32551,32553,32556,32559,32561,32564,32566,32568,32571,32573,32575,32578,32580,32582],{"class":129,"line":2270},[127,32549,32550],{"class":147},"    train_data,val_data",[127,32552,725],{"class":290},[127,32554,32555],{"class":147},"Data.random_split(train_data,[",[127,32557,32558],{"class":154},"round",[127,32560,681],{"class":147},[127,32562,32563],{"class":154},"0.8",[127,32565,1130],{"class":290},[127,32567,7900],{"class":154},[127,32569,32570],{"class":147},"(train_data)),",[127,32572,32558],{"class":154},[127,32574,681],{"class":147},[127,32576,32577],{"class":154},"0.2",[127,32579,1130],{"class":290},[127,32581,7900],{"class":154},[127,32583,32584],{"class":147},"(train_data))])\n",[127,32586,32587,32590,32592,32595,32597,32599],{"class":129,"line":2275},[127,32588,32589],{"class":147},"    train_dataloader ",[127,32591,725],{"class":290},[127,32593,32594],{"class":147}," Data.DataLoader(",[127,32596,32077],{"class":5758},[127,32598,725],{"class":290},[127,32600,32082],{"class":147},[127,32602,32603,32606,32608,32611],{"class":129,"line":2292},[127,32604,32605],{"class":5758},"                                       batch_size",[127,32607,725],{"class":290},[127,32609,32610],{"class":154},"128",[127,32612,32006],{"class":147},[127,32614,32615,32618,32620,32622],{"class":129,"line":2297},[127,32616,32617],{"class":5758},"                                       shuffle",[127,32619,725],{"class":290},[127,32621,32016],{"class":154},[127,32623,32006],{"class":147},[127,32625,32626],{"class":129,"line":2302},[127,32627,32628],{"class":133},"                                       # 规定8个进程\n",[127,32630,32631,32634,32636,32638],{"class":129,"line":2307},[127,32632,32633],{"class":5758},"                                       num_workers",[127,32635,725],{"class":290},[127,32637,1070],{"class":154},[127,32639,687],{"class":147},[127,32641,32642,32645,32647,32649,32651,32653],{"class":129,"line":2321},[127,32643,32644],{"class":147},"    val_dataloader",[127,32646,725],{"class":290},[127,32648,32074],{"class":147},[127,32650,32077],{"class":5758},[127,32652,725],{"class":290},[127,32654,32655],{"class":147},"val_data,\n",[127,32657,32658,32661,32663,32665],{"class":129,"line":2326},[127,32659,32660],{"class":5758},"                                   batch_size",[127,32662,725],{"class":290},[127,32664,32610],{"class":154},[127,32666,32006],{"class":147},[127,32668,32669,32672,32674,32676],{"class":129,"line":3119},[127,32670,32671],{"class":5758},"                                   shuffle",[127,32673,725],{"class":290},[127,32675,32016],{"class":154},[127,32677,32006],{"class":147},[127,32679,32680,32683,32685,32687],{"class":129,"line":3133},[127,32681,32682],{"class":5758},"                                   num_workers",[127,32684,725],{"class":290},[127,32686,1070],{"class":154},[127,32688,687],{"class":147},[127,32690,32691,32693],{"class":129,"line":3141},[127,32692,4632],{"class":290},[127,32694,32695],{"class":147}," train_dataloader,val_dataloader\n",[127,32697,32698],{"class":129,"line":3146},[127,32699,2942],{"emptyLinePlaceholder":606},[127,32701,32702],{"class":129,"line":3152},[127,32703,32704],{"class":133},"# 验证是否出错\n",[127,32706,32707],{"class":129,"line":3158},[127,32708,32709],{"class":133},"# train_val_data_process()\n",[127,32711,32712],{"class":129,"line":3163},[127,32713,2942],{"emptyLinePlaceholder":606},[127,32715,32716],{"class":129,"line":8490},[127,32717,32718],{"class":133},"# 定义模型训练函数\n",[127,32720,32721,32723,32726],{"class":129,"line":8514},[127,32722,32487],{"class":290},[127,32724,32725],{"class":143}," train_model_process",[127,32727,32728],{"class":147},"(model,train_dataloader,val_dataloader,num_epochs):\n",[127,32730,32731,32733,32735,32737,32739,32741,32743,32745,32748],{"class":129,"line":8519},[127,32732,31777],{"class":147},[127,32734,725],{"class":290},[127,32736,30991],{"class":147},[127,32738,31784],{"class":781},[127,32740,2247],{"class":290},[127,32742,31789],{"class":147},[127,32744,2244],{"class":290},[127,32746,32747],{"class":781}," 'cpu'",[127,32749,687],{"class":147},[127,32751,32752],{"class":129,"line":8525},[127,32753,2942],{"emptyLinePlaceholder":606},[127,32755,32756],{"class":129,"line":8552},[127,32757,2942],{"emptyLinePlaceholder":606},[127,32759,32760],{"class":129,"line":8557},[127,32761,32762],{"class":133},"    # 定义优化器\n",[127,32764,32765],{"class":129,"line":8563},[127,32766,32767],{"class":133},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[127,32769,32770],{"class":129,"line":8575},[127,32771,32772],{"class":133},"    # lr为学习率\n",[127,32774,32775,32778,32780,32783,32786,32788,32791],{"class":129,"line":8587},[127,32776,32777],{"class":147},"    optimizer",[127,32779,725],{"class":290},[127,32781,32782],{"class":147},"torch.optim.Adam(model.parameters(),",[127,32784,32785],{"class":5758},"lr",[127,32787,725],{"class":290},[127,32789,32790],{"class":154},"0.001",[127,32792,687],{"class":147},[127,32794,32795],{"class":129,"line":8599},[127,32796,2942],{"emptyLinePlaceholder":606},[127,32798,32799],{"class":129,"line":10258},[127,32800,32801],{"class":133},"    # 定义损失函数使用交叉熵损失函数\n",[127,32803,32804,32807,32809],{"class":129,"line":10283},[127,32805,32806],{"class":147},"    criterion",[127,32808,725],{"class":290},[127,32810,32811],{"class":147},"nn.CrossEntropyLoss()\n",[127,32813,32814],{"class":129,"line":10306},[127,32815,2942],{"emptyLinePlaceholder":606},[127,32817,32818],{"class":129,"line":10330},[127,32819,32820],{"class":133},"    # 将模型放到GPU中进行训练\n",[127,32822,32823,32825,32827],{"class":129,"line":10335},[127,32824,31829],{"class":147},[127,32826,725],{"class":290},[127,32828,32829],{"class":147},"model.to(device)\n",[127,32831,32832],{"class":129,"line":10340},[127,32833,32834],{"class":133},"    # 复制当前模型的参数\n",[127,32836,32837],{"class":129,"line":10345},[127,32838,32839],{"class":133},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[127,32841,32842],{"class":129,"line":10354},[127,32843,32844],{"class":133},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[127,32846,32847,32850,32852],{"class":129,"line":10359},[127,32848,32849],{"class":147},"    best_model_wts",[127,32851,725],{"class":290},[127,32853,32854],{"class":147},"copy.deepcopy(model.state_dict())\n",[127,32856,32857],{"class":129,"line":10365},[127,32858,2942],{"emptyLinePlaceholder":606},[127,32860,32861],{"class":129,"line":10386},[127,32862,2942],{"emptyLinePlaceholder":606},[127,32864,32865],{"class":129,"line":10392},[127,32866,32867],{"class":133},"    # 初始化参数\n",[127,32869,32870],{"class":129,"line":10406},[127,32871,32872],{"class":133},"    # 最高准确度\n",[127,32874,32875,32878,32880],{"class":129,"line":10412},[127,32876,32877],{"class":147},"    best_acc",[127,32879,725],{"class":290},[127,32881,32882],{"class":154},"0.0\n",[127,32884,32885],{"class":129,"line":10439},[127,32886,32887],{"class":133},"    # 训练集损失列表\n",[127,32889,32890,32893,32895],{"class":129,"line":10448},[127,32891,32892],{"class":147},"    train_loss_all",[127,32894,725],{"class":290},[127,32896,32897],{"class":147},"[]\n",[127,32899,32900],{"class":129,"line":10454},[127,32901,32902],{"class":133},"    # 验证集函数列表\n",[127,32904,32905,32908,32910],{"class":129,"line":10462},[127,32906,32907],{"class":147},"    val_loss_all",[127,32909,725],{"class":290},[127,32911,32897],{"class":147},[127,32913,32914],{"class":129,"line":10467},[127,32915,32916],{"class":133},"    # 训练集准确度列表\n",[127,32918,32919,32922,32924],{"class":129,"line":17145},[127,32920,32921],{"class":147},"    train_acc_all",[127,32923,725],{"class":290},[127,32925,32897],{"class":147},[127,32927,32928],{"class":129,"line":17151},[127,32929,32930],{"class":133},"    # 验证集准确度列表\n",[127,32932,32933,32936,32938],{"class":129,"line":17174},[127,32934,32935],{"class":147},"    val_acc_all",[127,32937,725],{"class":290},[127,32939,32897],{"class":147},[127,32941,32942],{"class":129,"line":17180},[127,32943,2942],{"emptyLinePlaceholder":606},[127,32945,32946],{"class":129,"line":17203},[127,32947,32948],{"class":133},"    # 保存当前时间--->方便看每轮训练的时间\n",[127,32950,32951,32954,32956],{"class":129,"line":17217},[127,32952,32953],{"class":147},"    since",[127,32955,725],{"class":290},[127,32957,32958],{"class":147},"time.time()\n",[127,32960,32961],{"class":129,"line":17237},[127,32962,2942],{"emptyLinePlaceholder":606},[127,32964,32965],{"class":129,"line":17243},[127,32966,2942],{"emptyLinePlaceholder":606},[127,32968,32969],{"class":129,"line":17254},[127,32970,32971],{"class":133},"    # 准备工作完成--->开始训练模型\n",[127,32973,32974,32976,32979,32981,32984],{"class":129,"line":17277},[127,32975,3743],{"class":290},[127,32977,32978],{"class":147}," epoch ",[127,32980,26584],{"class":290},[127,32982,32983],{"class":154}," range",[127,32985,32986],{"class":147},"(num_epochs):\n",[127,32988,32989,32992,32994,32997,33000,33002,33004,33006,33009,33011,33013],{"class":129,"line":17299},[127,32990,32991],{"class":154},"        print",[127,32993,681],{"class":147},[127,32995,32996],{"class":781},"\"Epoch ",[127,32998,32999],{"class":154},"{}",[127,33001,1259],{"class":781},[127,33003,32999],{"class":154},[127,33005,926],{"class":781},[127,33007,33008],{"class":147},".format(epoch,num_epochs",[127,33010,1207],{"class":290},[127,33012,893],{"class":154},[127,33014,31037],{"class":147},[127,33016,33017,33019,33021,33024,33026,33028],{"class":129,"line":17304},[127,33018,32991],{"class":154},[127,33020,681],{"class":147},[127,33022,33023],{"class":781},"\"-\"",[127,33025,1130],{"class":290},[127,33027,1121],{"class":154},[127,33029,687],{"class":147},[127,33031,33032],{"class":129,"line":17310},[127,33033,2942],{"emptyLinePlaceholder":606},[127,33035,33036],{"class":129,"line":17324},[127,33037,33038],{"class":133},"        # 初始化参数\n",[127,33040,33041],{"class":129,"line":17337},[127,33042,33043],{"class":133},"        # 训练集损失函数\n",[127,33045,33046,33049,33051],{"class":129,"line":17342},[127,33047,33048],{"class":147},"        train_loss",[127,33050,725],{"class":290},[127,33052,32882],{"class":154},[127,33054,33055],{"class":129,"line":17356},[127,33056,33057],{"class":133},"        # 训练集准确度\n",[127,33059,33060,33063,33065],{"class":129,"line":17361},[127,33061,33062],{"class":147},"        train_corrects",[127,33064,725],{"class":290},[127,33066,3627],{"class":154},[127,33068,33069],{"class":129,"line":17367},[127,33070,33071],{"class":133},"        # 验证集损失函数\n",[127,33073,33074,33077,33079],{"class":129,"line":17372},[127,33075,33076],{"class":147},"        val_loss",[127,33078,725],{"class":290},[127,33080,32882],{"class":154},[127,33082,33083],{"class":129,"line":17386},[127,33084,33085],{"class":133},"        # 验证集准确度\n",[127,33087,33088,33091,33093],{"class":129,"line":17391},[127,33089,33090],{"class":147},"        val_corrects",[127,33092,725],{"class":290},[127,33094,3627],{"class":154},[127,33096,33097],{"class":129,"line":17396},[127,33098,33099],{"class":133},"        # 训练集样本数量\n",[127,33101,33102,33105,33107],{"class":129,"line":17410},[127,33103,33104],{"class":147},"        train_num",[127,33106,725],{"class":290},[127,33108,3627],{"class":154},[127,33110,33111],{"class":129,"line":17422},[127,33112,33113],{"class":133},"        # 验证集样本数量\n",[127,33115,33116,33119,33121],{"class":129,"line":17427},[127,33117,33118],{"class":147},"        val_num",[127,33120,725],{"class":290},[127,33122,3627],{"class":154},[127,33124,33125],{"class":129,"line":17440},[127,33126,33127],{"class":133},"        # 将数据放到设备,并开始训练\n",[127,33129,33130,33132,33134,33136,33138],{"class":129,"line":17445},[127,33131,3945],{"class":290},[127,33133,32141],{"class":147},[127,33135,26584],{"class":290},[127,33137,32146],{"class":154},[127,33139,33140],{"class":147},"(train_dataloader):\n",[127,33142,33143],{"class":129,"line":17450},[127,33144,33145],{"class":133},"            # 将特征放入到训练设备\n",[127,33147,33148,33151,33153],{"class":129,"line":17455},[127,33149,33150],{"class":147},"            b_x",[127,33152,725],{"class":290},[127,33154,33155],{"class":147},"b_x.to(device)\n",[127,33157,33158],{"class":129,"line":17468},[127,33159,33160],{"class":133},"            # 将标签放入到训练设备当中\n",[127,33162,33163,33166,33168],{"class":129,"line":17473},[127,33164,33165],{"class":147},"            b_y",[127,33167,725],{"class":290},[127,33169,33170],{"class":147},"b_y.to(device)\n",[127,33172,33174],{"class":129,"line":33173},98,[127,33175,33176],{"class":133},"            # 设置模型为训练模式\n",[127,33178,33180],{"class":129,"line":33179},99,[127,33181,33182],{"class":147},"            model.train()\n",[127,33184,33186],{"class":129,"line":33185},100,[127,33187,33188],{"class":133},"            # 将数据放到模型当中,开始前向传播\n",[127,33190,33192],{"class":129,"line":33191},101,[127,33193,33194],{"class":133},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[127,33196,33198,33201,33203],{"class":129,"line":33197},102,[127,33199,33200],{"class":147},"            output",[127,33202,725],{"class":290},[127,33204,33205],{"class":147},"model(b_x)\n",[127,33207,33209],{"class":129,"line":33208},103,[127,33210,33211],{"class":133},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[127,33213,33215,33218,33220,33223,33226,33228,33230],{"class":129,"line":33214},104,[127,33216,33217],{"class":147},"            pre_lab",[127,33219,725],{"class":290},[127,33221,33222],{"class":147},"torch.argmax(output,",[127,33224,33225],{"class":5758},"dim",[127,33227,725],{"class":290},[127,33229,893],{"class":154},[127,33231,687],{"class":147},[127,33233,33235],{"class":129,"line":33234},105,[127,33236,33237],{"class":133},"            # 计算每一个batch的损失函数\n",[127,33239,33241,33244,33246],{"class":129,"line":33240},106,[127,33242,33243],{"class":147},"            loss",[127,33245,725],{"class":290},[127,33247,33248],{"class":147},"criterion(output,b_y)\n",[127,33250,33252],{"class":129,"line":33251},107,[127,33253,33254],{"class":133},"            # 将梯度初始化为0\n",[127,33256,33258],{"class":129,"line":33257},108,[127,33259,33260],{"class":147},"            optimizer.zero_grad()\n",[127,33262,33264],{"class":129,"line":33263},109,[127,33265,33266],{"class":133},"            # 梯度置为0后再进行反向传播\n",[127,33268,33270],{"class":129,"line":33269},110,[127,33271,33272],{"class":147},"            loss.backward()\n",[127,33274,33276],{"class":129,"line":33275},111,[127,33277,33278],{"class":133},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[127,33280,33282],{"class":129,"line":33281},112,[127,33283,33284],{"class":147},"            optimizer.step()\n",[127,33286,33288],{"class":129,"line":33287},113,[127,33289,33290],{"class":133},"            # loss.item()指的是batch的平均损失\n",[127,33292,33294,33297,33299,33302,33304,33307,33309],{"class":129,"line":33293},114,[127,33295,33296],{"class":147},"            train_loss",[127,33298,10019],{"class":290},[127,33300,33301],{"class":147},"loss.item()",[127,33303,1130],{"class":290},[127,33305,33306],{"class":147},"b_x.size(",[127,33308,867],{"class":154},[127,33310,687],{"class":147},[127,33312,33314],{"class":129,"line":33313},115,[127,33315,33316],{"class":133},"            # 计算每个批次中正确预测的数量\n",[127,33318,33320,33323,33325,33328,33330],{"class":129,"line":33319},116,[127,33321,33322],{"class":147},"            train_corrects",[127,33324,10019],{"class":290},[127,33326,33327],{"class":147},"torch.sum(pre_lab",[127,33329,3491],{"class":290},[127,33331,33332],{"class":147},"b_y.data)\n",[127,33334,33336],{"class":129,"line":33335},117,[127,33337,33338],{"class":133},"            # 计算目前为止一共处理了多少样本\n",[127,33340,33342,33345,33347,33349,33351],{"class":129,"line":33341},118,[127,33343,33344],{"class":147},"            train_num",[127,33346,10019],{"class":290},[127,33348,33306],{"class":147},[127,33350,867],{"class":154},[127,33352,687],{"class":147},[127,33354,33356],{"class":129,"line":33355},119,[127,33357,33358],{"class":133},"        # 验证数据\n",[127,33360,33362,33364,33367,33369,33371],{"class":129,"line":33361},120,[127,33363,3945],{"class":290},[127,33365,33366],{"class":147}," step ,(b_x,b_y) ",[127,33368,26584],{"class":290},[127,33370,32146],{"class":154},[127,33372,33373],{"class":147},"(val_dataloader):\n",[127,33375,33377],{"class":129,"line":33376},121,[127,33378,33379],{"class":133},"            # 将特征放到验证设备当中\n",[127,33381,33383,33385,33387],{"class":129,"line":33382},122,[127,33384,33150],{"class":147},[127,33386,725],{"class":290},[127,33388,33155],{"class":147},[127,33390,33392],{"class":129,"line":33391},123,[127,33393,33394],{"class":133},"            # 将标签放到放到训练设备当中\n",[127,33396,33398,33400,33402],{"class":129,"line":33397},124,[127,33399,33165],{"class":147},[127,33401,725],{"class":290},[127,33403,33170],{"class":147},[127,33405,33407],{"class":129,"line":33406},125,[127,33408,33409],{"class":133},"            # 开启验证模式，设置模型为评估模式\n",[127,33411,33413],{"class":129,"line":33412},126,[127,33414,33415],{"class":147},"            model.eval()\n",[127,33417,33419,33422],{"class":129,"line":33418},127,[127,33420,33421],{"class":290},"            with",[127,33423,33424],{"class":147}," torch.no_grad():\n",[127,33426,33428],{"class":129,"line":33427},128,[127,33429,33430],{"class":133},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[127,33432,33434,33437,33439],{"class":129,"line":33433},129,[127,33435,33436],{"class":147},"                output ",[127,33438,725],{"class":290},[127,33440,33441],{"class":147}," model(b_x)\n",[127,33443,33445],{"class":129,"line":33444},130,[127,33446,33447],{"class":133},"                # 查找每一行中最大值对应的下标\n",[127,33449,33451,33454,33456,33459,33461,33463,33465],{"class":129,"line":33450},131,[127,33452,33453],{"class":147},"                pre_lab ",[127,33455,725],{"class":290},[127,33457,33458],{"class":147}," torch.argmax(output, ",[127,33460,33225],{"class":5758},[127,33462,725],{"class":290},[127,33464,893],{"class":154},[127,33466,687],{"class":147},[127,33468,33470],{"class":129,"line":33469},132,[127,33471,33472],{"class":133},"                # 计算验证集上的当前 batch 损失\n",[127,33474,33476,33479,33481],{"class":129,"line":33475},133,[127,33477,33478],{"class":147},"                val_batch_loss ",[127,33480,725],{"class":290},[127,33482,33483],{"class":147}," criterion(output, b_y)\n",[127,33485,33487],{"class":129,"line":33486},134,[127,33488,33489],{"class":133},"                # 对损失函数进行累加（按样本数加权）\n",[127,33491,33493,33496,33498,33501,33503,33506,33508],{"class":129,"line":33492},135,[127,33494,33495],{"class":147},"                val_loss ",[127,33497,10019],{"class":290},[127,33499,33500],{"class":147}," val_batch_loss.item() ",[127,33502,1130],{"class":290},[127,33504,33505],{"class":147}," b_x.size(",[127,33507,867],{"class":154},[127,33509,687],{"class":147},[127,33511,33513,33516,33518,33521,33523],{"class":129,"line":33512},136,[127,33514,33515],{"class":147},"                val_corrects ",[127,33517,10019],{"class":290},[127,33519,33520],{"class":147}," torch.sum(pre_lab ",[127,33522,3491],{"class":290},[127,33524,33525],{"class":147}," b_y.data)\n",[127,33527,33529],{"class":129,"line":33528},137,[127,33530,33531],{"class":133},"                # 当前用于验证的样本数量\n",[127,33533,33535,33538,33540,33542,33544],{"class":129,"line":33534},138,[127,33536,33537],{"class":147},"            val_num ",[127,33539,10019],{"class":290},[127,33541,33505],{"class":147},[127,33543,867],{"class":154},[127,33545,687],{"class":147},[127,33547,33549],{"class":129,"line":33548},139,[127,33550,33551],{"class":133},"        # 计算并保存每一次迭代的loss值和准确率\n",[127,33553,33555],{"class":129,"line":33554},140,[127,33556,33557],{"class":133},"        # 计算并保存训练集的loss值\n",[127,33559,33561,33564,33566],{"class":129,"line":33560},141,[127,33562,33563],{"class":147},"        train_loss_all.append(train_loss",[127,33565,1259],{"class":290},[127,33567,33568],{"class":147},"train_num)\n",[127,33570,33572],{"class":129,"line":33571},142,[127,33573,33574],{"class":133},"        # 取双精度\n",[127,33576,33578],{"class":129,"line":33577},143,[127,33579,33580],{"class":133},"        # 计算并保存训练集的准确率\n",[127,33582,33584,33587,33589],{"class":129,"line":33583},144,[127,33585,33586],{"class":147},"        train_acc_all.append(train_corrects.double().item()",[127,33588,1259],{"class":290},[127,33590,33568],{"class":147},[127,33592,33594],{"class":129,"line":33593},145,[127,33595,33596],{"class":133},"        # 计算并保存验证集的loss值\n",[127,33598,33600,33603,33605],{"class":129,"line":33599},146,[127,33601,33602],{"class":147},"        val_loss_all.append(val_loss",[127,33604,1259],{"class":290},[127,33606,33607],{"class":147},"val_num)\n",[127,33609,33611],{"class":129,"line":33610},147,[127,33612,33613],{"class":133},"        # 计算并保存验证集的准确率\n",[127,33615,33617,33620,33622],{"class":129,"line":33616},148,[127,33618,33619],{"class":147},"        val_acc_all.append(val_corrects.double().item()",[127,33621,1259],{"class":290},[127,33623,33607],{"class":147},[127,33625,33627],{"class":129,"line":33626},149,[127,33628,2942],{"emptyLinePlaceholder":606},[127,33630,33632],{"class":129,"line":33631},150,[127,33633,33634],{"class":133},"        # 打印训练一轮的loss值和准确率\n",[127,33636,33638,33640,33642,33644,33646,33649,33651,33654,33656,33659,33661,33663,33665,33667,33670,33672,33674,33677,33679,33681],{"class":129,"line":33637},151,[127,33639,32991],{"class":154},[127,33641,681],{"class":147},[127,33643,4134],{"class":781},[127,33645,32999],{"class":154},[127,33647,33648],{"class":781},"train loss:",[127,33650,1570],{"class":154},[127,33652,33653],{"class":290},":.4f",[127,33655,1620],{"class":154},[127,33657,33658],{"class":781}," train acc:",[127,33660,1570],{"class":154},[127,33662,33653],{"class":290},[127,33664,1620],{"class":154},[127,33666,4134],{"class":781},[127,33668,33669],{"class":147},".format(epoch,train_loss_all[",[127,33671,1207],{"class":290},[127,33673,893],{"class":154},[127,33675,33676],{"class":147},"],train_acc_all[",[127,33678,1207],{"class":290},[127,33680,893],{"class":154},[127,33682,33683],{"class":147},"]))\n",[127,33685,33687,33689,33691,33693,33695,33698,33700,33702,33704,33707,33709,33711,33713,33715,33718,33720,33722,33725,33727,33729],{"class":129,"line":33686},152,[127,33688,32991],{"class":154},[127,33690,681],{"class":147},[127,33692,4134],{"class":781},[127,33694,32999],{"class":154},[127,33696,33697],{"class":781},"val loss:",[127,33699,1570],{"class":154},[127,33701,33653],{"class":290},[127,33703,1620],{"class":154},[127,33705,33706],{"class":781}," val acc:",[127,33708,1570],{"class":154},[127,33710,33653],{"class":290},[127,33712,1620],{"class":154},[127,33714,4134],{"class":781},[127,33716,33717],{"class":147},".format(epoch,val_loss_all[",[127,33719,1207],{"class":290},[127,33721,893],{"class":154},[127,33723,33724],{"class":147},"],val_acc_all[",[127,33726,1207],{"class":290},[127,33728,893],{"class":154},[127,33730,33683],{"class":147},[127,33732,33734],{"class":129,"line":33733},153,[127,33735,2942],{"emptyLinePlaceholder":606},[127,33737,33739],{"class":129,"line":33738},154,[127,33740,33741],{"class":133},"        # 判断准确度--->保存最优模型\n",[127,33743,33745,33747,33750,33752,33754,33756,33758],{"class":129,"line":33744},155,[127,33746,3039],{"class":290},[127,33748,33749],{"class":147}," val_acc_all[",[127,33751,1207],{"class":290},[127,33753,893],{"class":154},[127,33755,1614],{"class":147},[127,33757,1634],{"class":290},[127,33759,33760],{"class":147},"best_acc:\n",[127,33762,33764],{"class":129,"line":33763},156,[127,33765,33766],{"class":133},"            # 保存当前模型准确度\n",[127,33768,33770,33773,33775,33777,33780,33782,33784],{"class":129,"line":33769},157,[127,33771,33772],{"class":147},"            best_acc:",[127,33774,719],{"class":154},[127,33776,725],{"class":290},[127,33778,33779],{"class":147},"val_acc_all[",[127,33781,1207],{"class":290},[127,33783,893],{"class":154},[127,33785,33786],{"class":147},"]\n",[127,33788,33790],{"class":129,"line":33789},158,[127,33791,33792],{"class":133},"            # 保存当前的准确度\n",[127,33794,33796],{"class":129,"line":33795},159,[127,33797,33798],{"class":133},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[127,33800,33802,33805,33807],{"class":129,"line":33801},160,[127,33803,33804],{"class":147},"            best_model_wts",[127,33806,725],{"class":290},[127,33808,32854],{"class":147},[127,33810,33812],{"class":129,"line":33811},161,[127,33813,2942],{"emptyLinePlaceholder":606},[127,33815,33817],{"class":129,"line":33816},162,[127,33818,33819],{"class":133},"        # 计算耗时\n",[127,33821,33823,33826,33828,33831,33833],{"class":129,"line":33822},163,[127,33824,33825],{"class":147},"        time_use",[127,33827,725],{"class":290},[127,33829,33830],{"class":147},"time.time()",[127,33832,1207],{"class":290},[127,33834,33835],{"class":147},"since\n",[127,33837,33839,33841,33843,33846,33848,33851,33853,33855,33857,33859,33861,33864,33867,33870,33872,33875,33877,33879],{"class":129,"line":33838},164,[127,33840,32991],{"class":154},[127,33842,681],{"class":147},[127,33844,33845],{"class":781},"'训练和验证耗费的时间",[127,33847,1570],{"class":154},[127,33849,33850],{"class":290},":.0f",[127,33852,1620],{"class":154},[127,33854,1219],{"class":781},[127,33856,1570],{"class":154},[127,33858,33850],{"class":290},[127,33860,1620],{"class":154},[127,33862,33863],{"class":781},"s'",[127,33865,33866],{"class":147},".format(time_use",[127,33868,33869],{"class":290},"\u002F\u002F",[127,33871,1581],{"class":154},[127,33873,33874],{"class":147},",time_use",[127,33876,1003],{"class":290},[127,33878,1581],{"class":154},[127,33880,31037],{"class":147},[127,33882,33884],{"class":129,"line":33883},165,[127,33885,33886],{"class":133},"    # 选择最优参数\n",[127,33888,33890],{"class":129,"line":33889},166,[127,33891,33892],{"class":133},"    # 加载最高准确率下的模型参数\n",[127,33894,33896],{"class":129,"line":33895},167,[127,33897,33898],{"class":133},"    # model.load_state_dict(best_model_wts)\n",[127,33900,33902,33905,33908],{"class":129,"line":33901},168,[127,33903,33904],{"class":147},"    torch.save(model.state_dict(best_model_wts), ",[127,33906,33907],{"class":781},"'.\u002Fbest_model.pth'",[127,33909,687],{"class":147},[127,33911,33913],{"class":129,"line":33912},169,[127,33914,33915],{"class":133},"    # 或者写成\n",[127,33917,33919],{"class":129,"line":33918},170,[127,33920,33921],{"class":133},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[127,33923,33925],{"class":129,"line":33924},171,[127,33926,33927],{"class":133},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[127,33929,33931,33934,33936,33939,33942,33944],{"class":129,"line":33930},172,[127,33932,33933],{"class":147},"    train_process",[127,33935,725],{"class":290},[127,33937,33938],{"class":147},"pd.DataFrame(",[127,33940,33941],{"class":5758},"data",[127,33943,725],{"class":290},[127,33945,2090],{"class":147},[127,33947,33949,33952,33954,33957],{"class":129,"line":33948},173,[127,33950,33951],{"class":781},"        \"epoch\"",[127,33953,1533],{"class":147},[127,33955,33956],{"class":154},"range",[127,33958,33959],{"class":147},"(num_epochs),\n",[127,33961,33963,33966],{"class":129,"line":33962},174,[127,33964,33965],{"class":781},"        \"train_loss_all\"",[127,33967,33968],{"class":147},":train_loss_all,\n",[127,33970,33972,33975],{"class":129,"line":33971},175,[127,33973,33974],{"class":781},"        \"val_loss_all\"",[127,33976,33977],{"class":147},":val_loss_all,\n",[127,33979,33981,33984],{"class":129,"line":33980},176,[127,33982,33983],{"class":781},"        \"train_acc_all\"",[127,33985,33986],{"class":147},":train_acc_all,\n",[127,33988,33990,33993],{"class":129,"line":33989},177,[127,33991,33992],{"class":781},"        \"val_acc_all\"",[127,33994,33995],{"class":147},":val_acc_all\n",[127,33997,33999],{"class":129,"line":33998},178,[127,34000,34001],{"class":147},"    })\n",[127,34003,34005],{"class":129,"line":34004},179,[127,34006,34007],{"class":133},"    # 返回训练保存的过程\n",[127,34009,34011,34013],{"class":129,"line":34010},180,[127,34012,4632],{"class":290},[127,34014,34015],{"class":147}," train_process\n",[127,34017,34019],{"class":129,"line":34018},181,[127,34020,2942],{"emptyLinePlaceholder":606},[127,34022,34024],{"class":129,"line":34023},182,[127,34025,34026],{"class":133},"# 将loss值和精度按照图片的形式展示出来\n",[127,34028,34030,34032,34035],{"class":129,"line":34029},183,[127,34031,32487],{"class":290},[127,34033,34034],{"class":143}," matplot_acc_loss",[127,34036,34037],{"class":147},"(train_process):\n",[127,34039,34041],{"class":129,"line":34040},184,[127,34042,34043],{"class":133},"    # 设置图的大小\n",[127,34045,34047,34050,34052,34054,34056,34058,34060,34062],{"class":129,"line":34046},185,[127,34048,34049],{"class":147},"    plt.figure(",[127,34051,32233],{"class":5758},[127,34053,725],{"class":290},[127,34055,681],{"class":147},[127,34057,1173],{"class":154},[127,34059,1053],{"class":147},[127,34061,968],{"class":154},[127,34063,31037],{"class":147},[127,34065,34067],{"class":129,"line":34066},186,[127,34068,34069],{"class":133},"    # 设置图中有几张图\n",[127,34071,34073],{"class":129,"line":34072},187,[127,34074,34075],{"class":133},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[127,34077,34079],{"class":129,"line":34078},188,[127,34080,34081],{"class":133},"    # ①loss图\n",[127,34083,34085,34087,34089,34091,34093,34095,34097],{"class":129,"line":34084},189,[127,34086,32267],{"class":147},[127,34088,893],{"class":154},[127,34090,1053],{"class":147},[127,34092,530],{"class":154},[127,34094,1053],{"class":147},[127,34096,893],{"class":154},[127,34098,687],{"class":147},[127,34100,34102],{"class":129,"line":34101},190,[127,34103,34104],{"class":133},"    # 补充:\n",[127,34106,34108],{"class":129,"line":34107},191,[127,34109,34110],{"class":133},"    # plt.subplot(nrows, ncols, index)\n",[127,34112,34114],{"class":129,"line":34113},192,[127,34115,34116],{"class":133},"    # nrows：行数\n",[127,34118,34120],{"class":129,"line":34119},193,[127,34121,34122],{"class":133},"    # ncols：列数\n",[127,34124,34126],{"class":129,"line":34125},194,[127,34127,34128],{"class":133},"    # index：目前选中第几个子图（从1开始）\n",[127,34130,34132,34135,34138,34141,34144,34146,34149,34151,34154],{"class":129,"line":34131},195,[127,34133,34134],{"class":147},"    plt.plot(train_process[",[127,34136,34137],{"class":781},"\"epoch\"",[127,34139,34140],{"class":147},"],train_process.train_loss_all,",[127,34142,34143],{"class":781},"'ro-'",[127,34145,1053],{"class":147},[127,34147,34148],{"class":5758},"label",[127,34150,725],{"class":290},[127,34152,34153],{"class":781},"'train loss'",[127,34155,687],{"class":147},[127,34157,34159,34161,34163,34166,34169,34171,34173,34175,34178],{"class":129,"line":34158},196,[127,34160,34134],{"class":147},[127,34162,34137],{"class":781},[127,34164,34165],{"class":147},"],train_process.val_loss_all,",[127,34167,34168],{"class":781},"'bs--'",[127,34170,1053],{"class":147},[127,34172,34148],{"class":5758},[127,34174,725],{"class":290},[127,34176,34177],{"class":781},"'val loss'",[127,34179,687],{"class":147},[127,34181,34183],{"class":129,"line":34182},197,[127,34184,34185],{"class":133},"    # 添加一个图例\n",[127,34187,34189],{"class":129,"line":34188},198,[127,34190,34191],{"class":147},"    plt.legend()\n",[127,34193,34195],{"class":129,"line":34194},199,[127,34196,34197],{"class":133},"    # 给轴添加标签\n",[127,34199,34201,34204,34207],{"class":129,"line":34200},200,[127,34202,34203],{"class":147},"    plt.xlabel(",[127,34205,34206],{"class":781},"'epoch'",[127,34208,687],{"class":147},[127,34210,34212,34215,34218],{"class":129,"line":34211},201,[127,34213,34214],{"class":147},"    plt.ylabel(",[127,34216,34217],{"class":781},"'loss'",[127,34219,687],{"class":147},[127,34221,34223],{"class":129,"line":34222},202,[127,34224,34225],{"class":133},"    # ②准确度图\n",[127,34227,34229,34231,34233,34235,34237,34239,34241],{"class":129,"line":34228},203,[127,34230,32267],{"class":147},[127,34232,893],{"class":154},[127,34234,1053],{"class":147},[127,34236,530],{"class":154},[127,34238,1053],{"class":147},[127,34240,530],{"class":154},[127,34242,687],{"class":147},[127,34244,34246,34248,34250,34253,34255,34257,34259,34261,34264],{"class":129,"line":34245},204,[127,34247,34134],{"class":147},[127,34249,34137],{"class":781},[127,34251,34252],{"class":147},"],train_process.train_acc_all,",[127,34254,34143],{"class":781},[127,34256,1053],{"class":147},[127,34258,34148],{"class":5758},[127,34260,725],{"class":290},[127,34262,34263],{"class":781},"'train acc'",[127,34265,687],{"class":147},[127,34267,34269,34271,34273,34276,34278,34280,34282,34284,34287],{"class":129,"line":34268},205,[127,34270,34134],{"class":147},[127,34272,34137],{"class":781},[127,34274,34275],{"class":147},"],train_process.val_acc_all,",[127,34277,34168],{"class":781},[127,34279,1053],{"class":147},[127,34281,34148],{"class":5758},[127,34283,725],{"class":290},[127,34285,34286],{"class":781},"'val acc'",[127,34288,687],{"class":147},[127,34290,34292],{"class":129,"line":34291},206,[127,34293,34294],{"class":133},"    # 添加图例\n",[127,34296,34298],{"class":129,"line":34297},207,[127,34299,34191],{"class":147},[127,34301,34303,34305,34307],{"class":129,"line":34302},208,[127,34304,34203],{"class":147},[127,34306,34137],{"class":781},[127,34308,687],{"class":147},[127,34310,34312,34314,34317],{"class":129,"line":34311},209,[127,34313,34214],{"class":147},[127,34315,34316],{"class":781},"\"acc\"",[127,34318,687],{"class":147},[127,34320,34322],{"class":129,"line":34321},210,[127,34323,34324],{"class":147},"    plt.show()\n",[127,34326,34328],{"class":129,"line":34327},211,[127,34329,2942],{"emptyLinePlaceholder":606},[127,34331,34333],{"class":129,"line":34332},212,[127,34334,34335],{"class":133},"# 正式开始训练:\n",[127,34337,34339,34341,34343,34345,34347],{"class":129,"line":34338},213,[127,34340,2075],{"class":290},[127,34342,31760],{"class":154},[127,34344,3491],{"class":290},[127,34346,31765],{"class":781},[127,34348,4281],{"class":147},[127,34350,34352],{"class":129,"line":34351},214,[127,34353,34354],{"class":133},"    # 将模型实例化\n",[127,34356,34358,34361,34363],{"class":129,"line":34357},215,[127,34359,34360],{"class":147},"    LeNet",[127,34362,725],{"class":290},[127,34364,34365],{"class":147},"LeNet()\n",[127,34367,34369,34372,34374],{"class":129,"line":34368},216,[127,34370,34371],{"class":147},"    train_dataloader,val_dataloader",[127,34373,725],{"class":290},[127,34375,34376],{"class":147},"train_val_data_process()\n",[127,34378,34380,34382,34384,34387,34390,34392,34394],{"class":129,"line":34379},217,[127,34381,33933],{"class":147},[127,34383,725],{"class":290},[127,34385,34386],{"class":147},"train_model_process(LeNet,train_dataloader,val_dataloader,",[127,34388,34389],{"class":5758},"num_epochs",[127,34391,725],{"class":290},[127,34393,1374],{"class":154},[127,34395,687],{"class":147},[127,34397,34399],{"class":129,"line":34398},218,[127,34400,34401],{"class":147},"    matplot_acc_loss(train_process)\n",[19,34403,34404],{},"画图的补充点学习：",[19,34406,34407],{},[23,34408],{"alt":122,"src":34409},"\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",[632,34411,34412],{"start":151},[635,34413,34414],{},"测试",[117,34416,34418],{"className":30918,"code":34417,"language":30920,"meta":122,"style":122},"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",[124,34419,34420,34426,34436,34448,34458,34463,34473,34483,34487,34492,34501,34518,34530,34547,34558,34574,34579,34590,34601,34612,34619,34623,34628,34638,34643,34660,34668,34672,34677,34686,34695,34699,34704,34709,34714,34721,34726,34738,34748,34758,34763,34767,34772,34781,34786,34802,34807,34812,34817,34831,34836,34850,34854,34859,34874,34879,34891,34895,34900,34912,34917,34925,34930,34935,34945,34950,34959,34964,34969,34973,34978,34983,34999,35007,35012,35017,35076,35082,35087,35098,35106,35114,35118,35123,35127,35132,35140,35145,35161,35166,35176,35186],{"__ignoreMap":122},[127,34421,34422,34424],{"class":129,"line":130},[127,34423,30932],{"class":290},[127,34425,30935],{"class":147},[127,34427,34428,34430,34432,34434],{"class":129,"line":137},[127,34429,30932],{"class":290},[127,34431,31955],{"class":147},[127,34433,31923],{"class":290},[127,34435,31960],{"class":147},[127,34437,34438,34440,34443,34445],{"class":129,"line":151},[127,34439,31277],{"class":290},[127,34441,34442],{"class":147}," jupyter_client.consoleapp ",[127,34444,30932],{"class":290},[127,34446,34447],{"class":147}," classes\n",[127,34449,34450,34452,34454,34456],{"class":129,"line":167},[127,34451,31277],{"class":290},[127,34453,31938],{"class":147},[127,34455,30932],{"class":290},[127,34457,31943],{"class":147},[127,34459,34460],{"class":129,"line":415},[127,34461,34462],{"class":133},"# 导入数据集\n",[127,34464,34465,34467,34469,34471],{"class":129,"line":421},[127,34466,31277],{"class":290},[127,34468,31908],{"class":147},[127,34470,30932],{"class":290},[127,34472,31913],{"class":147},[127,34474,34475,34477,34479,34481],{"class":129,"line":1766},[127,34476,31277],{"class":290},[127,34478,32454],{"class":147},[127,34480,30932],{"class":290},[127,34482,32459],{"class":147},[127,34484,34485],{"class":129,"line":1856},[127,34486,2942],{"emptyLinePlaceholder":606},[127,34488,34489],{"class":129,"line":1862},[127,34490,34491],{"class":133},"# 测试数据处理\n",[127,34493,34494,34496,34499],{"class":129,"line":1874},[127,34495,32487],{"class":290},[127,34497,34498],{"class":143}," test_data_process",[127,34500,32493],{"class":147},[127,34502,34503,34506,34508,34510,34512,34514,34516],{"class":129,"line":2155},[127,34504,34505],{"class":147},"    test_data",[127,34507,725],{"class":290},[127,34509,31995],{"class":147},[127,34511,31998],{"class":5758},[127,34513,725],{"class":290},[127,34515,32003],{"class":781},[127,34517,32006],{"class":147},[127,34519,34520,34523,34525,34528],{"class":129,"line":2160},[127,34521,34522],{"class":5758},"                           train",[127,34524,725],{"class":290},[127,34526,34527],{"class":154},"False",[127,34529,32006],{"class":147},[127,34531,34532,34535,34537,34539,34541,34543,34545],{"class":129,"line":2166},[127,34533,34534],{"class":5758},"                           transform",[127,34536,725],{"class":290},[127,34538,32033],{"class":147},[127,34540,32036],{"class":5758},[127,34542,725],{"class":290},[127,34544,1575],{"class":154},[127,34546,32044],{"class":147},[127,34548,34549,34552,34554,34556],{"class":129,"line":2171},[127,34550,34551],{"class":5758},"                           download",[127,34553,725],{"class":290},[127,34555,32016],{"class":154},[127,34557,687],{"class":147},[127,34559,34560,34563,34565,34567,34569,34571],{"class":129,"line":2185},[127,34561,34562],{"class":147},"    test_dataloader",[127,34564,725],{"class":290},[127,34566,32074],{"class":147},[127,34568,32077],{"class":5758},[127,34570,725],{"class":290},[127,34572,34573],{"class":147},"test_data,\n",[127,34575,34576],{"class":129,"line":2190},[127,34577,34578],{"class":133},"                                    # 这里是一张一张进行测试\n",[127,34580,34581,34584,34586,34588],{"class":129,"line":2196},[127,34582,34583],{"class":5758},"                                    batch_size",[127,34585,725],{"class":290},[127,34587,893],{"class":154},[127,34589,32006],{"class":147},[127,34591,34592,34595,34597,34599],{"class":129,"line":2217},[127,34593,34594],{"class":5758},"                                    shuffle",[127,34596,725],{"class":290},[127,34598,32016],{"class":154},[127,34600,32006],{"class":147},[127,34602,34603,34606,34608,34610],{"class":129,"line":2222},[127,34604,34605],{"class":5758},"                                    num_workers",[127,34607,725],{"class":290},[127,34609,867],{"class":154},[127,34611,687],{"class":147},[127,34613,34614,34616],{"class":129,"line":2236},[127,34615,4632],{"class":290},[127,34617,34618],{"class":147}," test_dataloader\n",[127,34620,34621],{"class":129,"line":2241},[127,34622,2942],{"emptyLinePlaceholder":606},[127,34624,34625],{"class":129,"line":2270},[127,34626,34627],{"class":133},"# 定义模型测试函数\n",[127,34629,34630,34632,34635],{"class":129,"line":2275},[127,34631,32487],{"class":290},[127,34633,34634],{"class":143}," test_model_process",[127,34636,34637],{"class":147},"(model,test_dataloader):\n",[127,34639,34640],{"class":129,"line":2292},[127,34641,34642],{"class":133},"    # 将模型放到设备当中，先进行判断\n",[127,34644,34645,34647,34649,34651,34653,34655,34657],{"class":129,"line":2297},[127,34646,31777],{"class":147},[127,34648,725],{"class":290},[127,34650,31784],{"class":781},[127,34652,2247],{"class":290},[127,34654,31789],{"class":147},[127,34656,2244],{"class":290},[127,34658,34659],{"class":781}," \"cpu\"\n",[127,34661,34662,34664,34666],{"class":129,"line":2302},[127,34663,31829],{"class":147},[127,34665,725],{"class":290},[127,34667,32829],{"class":147},[127,34669,34670],{"class":129,"line":2307},[127,34671,2942],{"emptyLinePlaceholder":606},[127,34673,34674],{"class":129,"line":2321},[127,34675,34676],{"class":133},"    # 设置初始化参数\n",[127,34678,34679,34682,34684],{"class":129,"line":2326},[127,34680,34681],{"class":147},"    test_corrects",[127,34683,725],{"class":290},[127,34685,32882],{"class":154},[127,34687,34688,34691,34693],{"class":129,"line":3119},[127,34689,34690],{"class":147},"    test_num",[127,34692,725],{"class":290},[127,34694,3627],{"class":154},[127,34696,34697],{"class":129,"line":3133},[127,34698,2942],{"emptyLinePlaceholder":606},[127,34700,34701],{"class":129,"line":3141},[127,34702,34703],{"class":133},"    # 进行模型测试\n",[127,34705,34706],{"class":129,"line":3146},[127,34707,34708],{"class":133},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[127,34710,34711],{"class":129,"line":3152},[127,34712,34713],{"class":133},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[127,34715,34716,34719],{"class":129,"line":3158},[127,34717,34718],{"class":290},"    with",[127,34720,33424],{"class":147},[127,34722,34723],{"class":129,"line":3163},[127,34724,34725],{"class":133},"        # 从数据中进行\n",[127,34727,34728,34730,34733,34735],{"class":129,"line":8490},[127,34729,3945],{"class":290},[127,34731,34732],{"class":147}," test_data_x,test_data_y ",[127,34734,26584],{"class":290},[127,34736,34737],{"class":147}," test_dataloader:\n",[127,34739,34740,34743,34745],{"class":129,"line":8514},[127,34741,34742],{"class":147},"            test_data_x",[127,34744,725],{"class":290},[127,34746,34747],{"class":147},"test_data_x.to(device)\n",[127,34749,34750,34753,34755],{"class":129,"line":8519},[127,34751,34752],{"class":147},"            test_data_y",[127,34754,725],{"class":290},[127,34756,34757],{"class":147},"test_data_y.to(device)\n",[127,34759,34760],{"class":129,"line":8525},[127,34761,34762],{"class":133},"            # 设置为验证模式\n",[127,34764,34765],{"class":129,"line":8552},[127,34766,33415],{"class":147},[127,34768,34769],{"class":129,"line":8557},[127,34770,34771],{"class":133},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[127,34773,34774,34776,34778],{"class":129,"line":8563},[127,34775,33200],{"class":147},[127,34777,725],{"class":290},[127,34779,34780],{"class":147},"model(test_data_x)\n",[127,34782,34783],{"class":129,"line":8575},[127,34784,34785],{"class":133},"            # 查找每一行中最大值对应的下标\n",[127,34787,34788,34790,34792,34794,34796,34798,34800],{"class":129,"line":8587},[127,34789,33217],{"class":147},[127,34791,725],{"class":290},[127,34793,33222],{"class":147},[127,34795,33225],{"class":5758},[127,34797,725],{"class":290},[127,34799,893],{"class":154},[127,34801,687],{"class":147},[127,34803,34804],{"class":129,"line":8599},[127,34805,34806],{"class":133},"            # 计算正确率\n",[127,34808,34809],{"class":129,"line":10258},[127,34810,34811],{"class":133},"            # .data表示是一个不带梯度信息的tensor\n",[127,34813,34814],{"class":129,"line":10283},[127,34815,34816],{"class":133},"            # 如果预测正确，则准确度test_corrects加1\n",[127,34818,34819,34822,34824,34826,34828],{"class":129,"line":10306},[127,34820,34821],{"class":147},"            test_corrects",[127,34823,10019],{"class":290},[127,34825,33327],{"class":147},[127,34827,3491],{"class":290},[127,34829,34830],{"class":147},"test_data_y.data)\n",[127,34832,34833],{"class":129,"line":10330},[127,34834,34835],{"class":133},"            # 将所有的测试样本进行累计\n",[127,34837,34838,34841,34843,34846,34848],{"class":129,"line":10335},[127,34839,34840],{"class":147},"            test_num",[127,34842,10019],{"class":290},[127,34844,34845],{"class":147},"test_data_x.size(",[127,34847,867],{"class":154},[127,34849,687],{"class":147},[127,34851,34852],{"class":129,"line":10340},[127,34853,2942],{"emptyLinePlaceholder":606},[127,34855,34856],{"class":129,"line":10345},[127,34857,34858],{"class":133},"        # 计算准确度\n",[127,34860,34861,34864,34866,34869,34871],{"class":129,"line":10354},[127,34862,34863],{"class":147},"        test_acc",[127,34865,725],{"class":290},[127,34867,34868],{"class":147},"test_corrects.double().item()",[127,34870,1259],{"class":290},[127,34872,34873],{"class":147},"test_num\n",[127,34875,34876],{"class":129,"line":10359},[127,34877,34878],{"class":133},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[127,34880,34881,34883,34885,34888],{"class":129,"line":10365},[127,34882,32991],{"class":154},[127,34884,681],{"class":147},[127,34886,34887],{"class":781},"\"测试的准确率：\"",[127,34889,34890],{"class":147},",test_acc)\n",[127,34892,34893],{"class":129,"line":10386},[127,34894,2942],{"emptyLinePlaceholder":606},[127,34896,34897],{"class":129,"line":10392},[127,34898,34899],{"class":133},"# 实现模型的测试功能\n",[127,34901,34902,34904,34906,34908,34910],{"class":129,"line":10406},[127,34903,2075],{"class":290},[127,34905,31760],{"class":154},[127,34907,3491],{"class":290},[127,34909,31765],{"class":781},[127,34911,4281],{"class":147},[127,34913,34914],{"class":129,"line":10412},[127,34915,34916],{"class":133},"    # 加载模型\n",[127,34918,34919,34921,34923],{"class":129,"line":10439},[127,34920,31829],{"class":147},[127,34922,725],{"class":290},[127,34924,34365],{"class":147},[127,34926,34927],{"class":129,"line":10448},[127,34928,34929],{"class":133},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[127,34931,34932],{"class":129,"line":10454},[127,34933,34934],{"class":133},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[127,34936,34937,34940,34943],{"class":129,"line":10462},[127,34938,34939],{"class":147},"    model.load_state_dict(torch.load(",[127,34941,34942],{"class":781},"'best_model.pth'",[127,34944,31037],{"class":147},[127,34946,34947],{"class":129,"line":10467},[127,34948,34949],{"class":133},"    # 数据加载\n",[127,34951,34952,34954,34956],{"class":129,"line":17145},[127,34953,34562],{"class":147},[127,34955,725],{"class":290},[127,34957,34958],{"class":147},"test_data_process()\n",[127,34960,34961],{"class":129,"line":17151},[127,34962,34963],{"class":133},"    # 加载模型测试的函数\n",[127,34965,34966],{"class":129,"line":17174},[127,34967,34968],{"class":147},"    test_model_process(model,test_dataloader)\n",[127,34970,34971],{"class":129,"line":17180},[127,34972,2942],{"emptyLinePlaceholder":606},[127,34974,34975],{"class":129,"line":17203},[127,34976,34977],{"class":133},"    # 验证集推理实现：\n",[127,34979,34980],{"class":129,"line":17217},[127,34981,34982],{"class":133},"    # 加载数据加载的更详细一些\n",[127,34984,34985,34987,34989,34991,34993,34995,34997],{"class":129,"line":17237},[127,34986,31777],{"class":147},[127,34988,725],{"class":290},[127,34990,31784],{"class":781},[127,34992,2247],{"class":290},[127,34994,31789],{"class":147},[127,34996,2244],{"class":290},[127,34998,34659],{"class":781},[127,35000,35001,35003,35005],{"class":129,"line":17243},[127,35002,31829],{"class":147},[127,35004,725],{"class":290},[127,35006,32829],{"class":147},[127,35008,35009],{"class":129,"line":17254},[127,35010,35011],{"class":133},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[127,35013,35014],{"class":129,"line":17277},[127,35015,35016],{"class":133},"    # 顺序不可改变\n",[127,35018,35019,35022,35024,35026,35029,35031,35034,35036,35039,35041,35044,35046,35049,35051,35054,35056,35059,35061,35064,35066,35069,35071,35074],{"class":129,"line":17299},[127,35020,35021],{"class":147},"    classes",[127,35023,725],{"class":290},[127,35025,1564],{"class":147},[127,35027,35028],{"class":781},"'T-shirt\u002Ftop'",[127,35030,1053],{"class":147},[127,35032,35033],{"class":781},"'Trouser'",[127,35035,1053],{"class":147},[127,35037,35038],{"class":781},"'Pullover'",[127,35040,1053],{"class":147},[127,35042,35043],{"class":781},"'Dress'",[127,35045,1053],{"class":147},[127,35047,35048],{"class":781},"'Coat'",[127,35050,1053],{"class":147},[127,35052,35053],{"class":781},"'Sandal'",[127,35055,1053],{"class":147},[127,35057,35058],{"class":781},"'Shirt'",[127,35060,1053],{"class":147},[127,35062,35063],{"class":781},"'Sneaker'",[127,35065,1053],{"class":147},[127,35067,35068],{"class":781},"'Bag'",[127,35070,1053],{"class":147},[127,35072,35073],{"class":781},"'Ankle boot'",[127,35075,33786],{"class":147},[127,35077,35078,35080],{"class":129,"line":17304},[127,35079,34718],{"class":290},[127,35081,33424],{"class":147},[127,35083,35084],{"class":129,"line":17310},[127,35085,35086],{"class":133},"        # 将数据和标签都放到设备当中\n",[127,35088,35089,35091,35094,35096],{"class":129,"line":17324},[127,35090,3945],{"class":290},[127,35092,35093],{"class":147}," b_x,b_y ",[127,35095,26584],{"class":290},[127,35097,34737],{"class":147},[127,35099,35100,35102,35104],{"class":129,"line":17337},[127,35101,33150],{"class":147},[127,35103,725],{"class":290},[127,35105,33155],{"class":147},[127,35107,35108,35110,35112],{"class":129,"line":17342},[127,35109,33165],{"class":147},[127,35111,725],{"class":290},[127,35113,33170],{"class":147},[127,35115,35116],{"class":129,"line":17356},[127,35117,2942],{"emptyLinePlaceholder":606},[127,35119,35120],{"class":129,"line":17361},[127,35121,35122],{"class":133},"            # 设置模型为验证模式\n",[127,35124,35125],{"class":129,"line":17367},[127,35126,33415],{"class":147},[127,35128,35129],{"class":129,"line":17372},[127,35130,35131],{"class":133},"            # 模型推理结果\n",[127,35133,35134,35136,35138],{"class":129,"line":17386},[127,35135,33200],{"class":147},[127,35137,725],{"class":290},[127,35139,33205],{"class":147},[127,35141,35142],{"class":129,"line":17391},[127,35143,35144],{"class":133},"            # 获取最大下标，最大下标就是类别号\n",[127,35146,35147,35149,35151,35153,35155,35157,35159],{"class":129,"line":17396},[127,35148,33217],{"class":147},[127,35150,725],{"class":290},[127,35152,33222],{"class":147},[127,35154,33225],{"class":5758},[127,35156,725],{"class":290},[127,35158,893],{"class":154},[127,35160,687],{"class":147},[127,35162,35163],{"class":129,"line":17410},[127,35164,35165],{"class":133},"            # 取出张量中的数值\n",[127,35167,35168,35171,35173],{"class":129,"line":17422},[127,35169,35170],{"class":147},"            result",[127,35172,725],{"class":290},[127,35174,35175],{"class":147},"pre_lab.item()\n",[127,35177,35178,35181,35183],{"class":129,"line":17427},[127,35179,35180],{"class":147},"            label",[127,35182,725],{"class":290},[127,35184,35185],{"class":147},"b_y.item()\n",[127,35187,35188,35191,35193,35196,35199,35202,35204,35207],{"class":129,"line":17440},[127,35189,35190],{"class":154},"            print",[127,35192,681],{"class":147},[127,35194,35195],{"class":781},"\"预测值：\"",[127,35197,35198],{"class":147},",classes[result],",[127,35200,35201],{"class":781},"\"------\"",[127,35203,1053],{"class":147},[127,35205,35206],{"class":781},"\"真实值：\"",[127,35208,35209],{"class":147},",classes[label])\n",[19,35211,35212],{},"（2）AlexNet",[632,35214,35215],{},[635,35216,35217],{},"神经网络构建",[117,35219,35221],{"className":30918,"code":35220,"language":30920,"meta":122,"style":122},"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",[124,35222,35223,35229,35239,35249,35261,35265,35282,35290,35305,35317,35359,35386,35429,35455,35499,35542,35585,35612,35616,35626,35631,35659,35678,35697,35701,35706,35714,35729,35739,35753,35763,35778,35793,35808,35819,35823,35828,35838,35853,35858,35872,35887,35899,35904,35915,35920,35926,35931,35943,35963,35968,35977],{"__ignoreMap":122},[127,35224,35225,35227],{"class":129,"line":130},[127,35226,30932],{"class":290},[127,35228,30935],{"class":147},[127,35230,35231,35233,35235,35237],{"class":129,"line":137},[127,35232,31277],{"class":290},[127,35234,31280],{"class":147},[127,35236,30932],{"class":290},[127,35238,31285],{"class":147},[127,35240,35241,35243,35245,35247],{"class":129,"line":151},[127,35242,31277],{"class":290},[127,35244,31297],{"class":147},[127,35246,30932],{"class":290},[127,35248,31302],{"class":147},[127,35250,35251,35253,35256,35258],{"class":129,"line":167},[127,35252,30932],{"class":290},[127,35254,35255],{"class":147}," torch.nn.functional ",[127,35257,31923],{"class":290},[127,35259,35260],{"class":147}," F\n",[127,35262,35263],{"class":129,"line":415},[127,35264,2942],{"emptyLinePlaceholder":606},[127,35266,35267,35269,35272,35274,35276,35278,35280],{"class":129,"line":421},[127,35268,15236],{"class":290},[127,35270,35271],{"class":143}," AlexNet",[127,35273,681],{"class":147},[127,35275,31318],{"class":143},[127,35277,1233],{"class":147},[127,35279,31323],{"class":143},[127,35281,31326],{"class":147},[127,35283,35284,35286,35288],{"class":129,"line":1766},[127,35285,31341],{"class":290},[127,35287,31344],{"class":154},[127,35289,31347],{"class":147},[127,35291,35292,35294,35297,35299,35301,35303],{"class":129,"line":1856},[127,35293,31357],{"class":154},[127,35295,35296],{"class":147},"(AlexNet,",[127,35298,31363],{"class":154},[127,35300,31366],{"class":147},[127,35302,31369],{"class":154},[127,35304,2518],{"class":147},[127,35306,35307,35309,35312,35314],{"class":129,"line":1862},[127,35308,31385],{"class":154},[127,35310,35311],{"class":147},".ReLu",[127,35313,725],{"class":290},[127,35315,35316],{"class":147},"nn.ReLU()\n",[127,35318,35319,35321,35323,35325,35327,35329,35331,35333,35335,35337,35339,35341,35343,35345,35347,35349,35351,35353,35355,35357],{"class":129,"line":1874},[127,35320,31385],{"class":154},[127,35322,31388],{"class":147},[127,35324,725],{"class":290},[127,35326,31393],{"class":147},[127,35328,31396],{"class":5758},[127,35330,725],{"class":290},[127,35332,893],{"class":154},[127,35334,1053],{"class":147},[127,35336,31405],{"class":5758},[127,35338,725],{"class":290},[127,35340,885],{"class":154},[127,35342,1053],{"class":147},[127,35344,31414],{"class":5758},[127,35346,725],{"class":290},[127,35348,1147],{"class":154},[127,35350,1053],{"class":147},[127,35352,31469],{"class":5758},[127,35354,725],{"class":290},[127,35356,968],{"class":154},[127,35358,687],{"class":147},[127,35360,35361,35363,35365,35367,35370,35372,35374,35376,35378,35380,35382,35384],{"class":129,"line":2155},[127,35362,31385],{"class":154},[127,35364,31453],{"class":147},[127,35366,725],{"class":290},[127,35368,35369],{"class":147},"nn.MaxPool2d(",[127,35371,31414],{"class":5758},[127,35373,725],{"class":290},[127,35375,749],{"class":154},[127,35377,1053],{"class":147},[127,35379,31469],{"class":5758},[127,35381,725],{"class":290},[127,35383,530],{"class":154},[127,35385,687],{"class":147},[127,35387,35388,35390,35392,35394,35396,35398,35400,35402,35404,35406,35408,35411,35413,35415,35417,35419,35421,35423,35425,35427],{"class":129,"line":2160},[127,35389,31385],{"class":154},[127,35391,31482],{"class":147},[127,35393,725],{"class":290},[127,35395,31393],{"class":147},[127,35397,31396],{"class":5758},[127,35399,725],{"class":290},[127,35401,885],{"class":154},[127,35403,1053],{"class":147},[127,35405,31405],{"class":5758},[127,35407,725],{"class":290},[127,35409,35410],{"class":154},"256",[127,35412,1053],{"class":147},[127,35414,31414],{"class":5758},[127,35416,725],{"class":290},[127,35418,994],{"class":154},[127,35420,1053],{"class":147},[127,35422,31423],{"class":5758},[127,35424,725],{"class":290},[127,35426,530],{"class":154},[127,35428,687],{"class":147},[127,35430,35431,35433,35435,35437,35439,35441,35443,35445,35447,35449,35451,35453],{"class":129,"line":2166},[127,35432,31385],{"class":154},[127,35434,31517],{"class":147},[127,35436,725],{"class":290},[127,35438,35369],{"class":147},[127,35440,31414],{"class":5758},[127,35442,725],{"class":290},[127,35444,749],{"class":154},[127,35446,1053],{"class":147},[127,35448,31469],{"class":5758},[127,35450,725],{"class":290},[127,35452,530],{"class":154},[127,35454,687],{"class":147},[127,35456,35457,35459,35462,35464,35466,35468,35470,35472,35474,35476,35478,35481,35483,35485,35487,35489,35491,35493,35495,35497],{"class":129,"line":2171},[127,35458,31385],{"class":154},[127,35460,35461],{"class":147},".c5",[127,35463,725],{"class":290},[127,35465,31393],{"class":147},[127,35467,31396],{"class":5758},[127,35469,725],{"class":290},[127,35471,35410],{"class":154},[127,35473,1053],{"class":147},[127,35475,31405],{"class":5758},[127,35477,725],{"class":290},[127,35479,35480],{"class":154},"384",[127,35482,1053],{"class":147},[127,35484,31414],{"class":5758},[127,35486,725],{"class":290},[127,35488,749],{"class":154},[127,35490,1053],{"class":147},[127,35492,31423],{"class":5758},[127,35494,725],{"class":290},[127,35496,893],{"class":154},[127,35498,687],{"class":147},[127,35500,35501,35503,35506,35508,35510,35512,35514,35516,35518,35520,35522,35524,35526,35528,35530,35532,35534,35536,35538,35540],{"class":129,"line":2185},[127,35502,31385],{"class":154},[127,35504,35505],{"class":147},".c6",[127,35507,725],{"class":290},[127,35509,31393],{"class":147},[127,35511,31396],{"class":5758},[127,35513,725],{"class":290},[127,35515,35480],{"class":154},[127,35517,1053],{"class":147},[127,35519,31405],{"class":5758},[127,35521,725],{"class":290},[127,35523,35480],{"class":154},[127,35525,1053],{"class":147},[127,35527,31414],{"class":5758},[127,35529,725],{"class":290},[127,35531,749],{"class":154},[127,35533,1053],{"class":147},[127,35535,31423],{"class":5758},[127,35537,725],{"class":290},[127,35539,893],{"class":154},[127,35541,687],{"class":147},[127,35543,35544,35546,35549,35551,35553,35555,35557,35559,35561,35563,35565,35567,35569,35571,35573,35575,35577,35579,35581,35583],{"class":129,"line":2190},[127,35545,31385],{"class":154},[127,35547,35548],{"class":147},".c7",[127,35550,725],{"class":290},[127,35552,31393],{"class":147},[127,35554,31396],{"class":5758},[127,35556,725],{"class":290},[127,35558,35480],{"class":154},[127,35560,1053],{"class":147},[127,35562,31405],{"class":5758},[127,35564,725],{"class":290},[127,35566,35410],{"class":154},[127,35568,1053],{"class":147},[127,35570,31414],{"class":5758},[127,35572,725],{"class":290},[127,35574,749],{"class":154},[127,35576,1053],{"class":147},[127,35578,31423],{"class":5758},[127,35580,725],{"class":290},[127,35582,893],{"class":154},[127,35584,687],{"class":147},[127,35586,35587,35589,35592,35594,35596,35598,35600,35602,35604,35606,35608,35610],{"class":129,"line":2196},[127,35588,31385],{"class":154},[127,35590,35591],{"class":147},".s8",[127,35593,725],{"class":290},[127,35595,35369],{"class":147},[127,35597,31414],{"class":5758},[127,35599,725],{"class":290},[127,35601,749],{"class":154},[127,35603,1053],{"class":147},[127,35605,31469],{"class":5758},[127,35607,725],{"class":290},[127,35609,530],{"class":154},[127,35611,687],{"class":147},[127,35613,35614],{"class":129,"line":2217},[127,35615,31542],{"class":133},[127,35617,35618,35620,35622,35624],{"class":129,"line":2222},[127,35619,31385],{"class":154},[127,35621,31549],{"class":147},[127,35623,725],{"class":290},[127,35625,31554],{"class":147},[127,35627,35628],{"class":129,"line":2236},[127,35629,35630],{"class":133},"       # 定义全连接层\n",[127,35632,35633,35635,35638,35640,35642,35644,35646,35648,35650,35652,35654,35657],{"class":129,"line":2241},[127,35634,31385],{"class":154},[127,35636,35637],{"class":147},".f1",[127,35639,725],{"class":290},[127,35641,31571],{"class":147},[127,35643,1019],{"class":154},[127,35645,1130],{"class":290},[127,35647,1019],{"class":154},[127,35649,1130],{"class":290},[127,35651,35410],{"class":154},[127,35653,1053],{"class":147},[127,35655,35656],{"class":154},"4096",[127,35658,687],{"class":147},[127,35660,35661,35663,35666,35668,35670,35672,35674,35676],{"class":129,"line":2270},[127,35662,31385],{"class":154},[127,35664,35665],{"class":147},".f2",[127,35667,725],{"class":290},[127,35669,31571],{"class":147},[127,35671,35656],{"class":154},[127,35673,1053],{"class":147},[127,35675,35656],{"class":154},[127,35677,687],{"class":147},[127,35679,35680,35682,35685,35687,35689,35691,35693,35695],{"class":129,"line":2275},[127,35681,31385],{"class":154},[127,35683,35684],{"class":147},".f3",[127,35686,725],{"class":290},[127,35688,31571],{"class":147},[127,35690,35656],{"class":154},[127,35692,1053],{"class":147},[127,35694,1121],{"class":154},[127,35696,687],{"class":147},[127,35698,35699],{"class":129,"line":2292},[127,35700,2942],{"emptyLinePlaceholder":606},[127,35702,35703],{"class":129,"line":2297},[127,35704,35705],{"class":133},"    # 定义前向传播\n",[127,35707,35708,35710,35712],{"class":129,"line":2302},[127,35709,31341],{"class":290},[127,35711,31633],{"class":143},[127,35713,31636],{"class":147},[127,35715,35716,35718,35720,35722,35725,35727],{"class":129,"line":2307},[127,35717,31641],{"class":147},[127,35719,725],{"class":290},[127,35721,31363],{"class":154},[127,35723,35724],{"class":147},".ReLu(",[127,35726,31363],{"class":154},[127,35728,31653],{"class":147},[127,35730,35731,35733,35735,35737],{"class":129,"line":2321},[127,35732,31641],{"class":147},[127,35734,725],{"class":290},[127,35736,31363],{"class":154},[127,35738,31664],{"class":147},[127,35740,35741,35743,35745,35747,35749,35751],{"class":129,"line":2326},[127,35742,31641],{"class":147},[127,35744,725],{"class":290},[127,35746,31363],{"class":154},[127,35748,35724],{"class":147},[127,35750,31363],{"class":154},[127,35752,31679],{"class":147},[127,35754,35755,35757,35759,35761],{"class":129,"line":3119},[127,35756,31641],{"class":147},[127,35758,725],{"class":290},[127,35760,31363],{"class":154},[127,35762,31690],{"class":147},[127,35764,35765,35767,35769,35771,35773,35775],{"class":129,"line":3133},[127,35766,31641],{"class":147},[127,35768,725],{"class":290},[127,35770,31363],{"class":154},[127,35772,35724],{"class":147},[127,35774,31363],{"class":154},[127,35776,35777],{"class":147},".c5(x))\n",[127,35779,35780,35782,35784,35786,35788,35790],{"class":129,"line":3141},[127,35781,31641],{"class":147},[127,35783,725],{"class":290},[127,35785,31363],{"class":154},[127,35787,35724],{"class":147},[127,35789,31363],{"class":154},[127,35791,35792],{"class":147},".c6(x))\n",[127,35794,35795,35797,35799,35801,35803,35805],{"class":129,"line":3146},[127,35796,31641],{"class":147},[127,35798,725],{"class":290},[127,35800,31363],{"class":154},[127,35802,35724],{"class":147},[127,35804,31363],{"class":154},[127,35806,35807],{"class":147},".c7(x))\n",[127,35809,35810,35812,35814,35816],{"class":129,"line":3152},[127,35811,31641],{"class":147},[127,35813,725],{"class":290},[127,35815,31363],{"class":154},[127,35817,35818],{"class":147},".s8(x)\n",[127,35820,35821],{"class":129,"line":3158},[127,35822,2942],{"emptyLinePlaceholder":606},[127,35824,35825],{"class":129,"line":3163},[127,35826,35827],{"class":133},"        # 展平加线性全连接层\n",[127,35829,35830,35832,35834,35836],{"class":129,"line":8490},[127,35831,31641],{"class":147},[127,35833,725],{"class":290},[127,35835,31363],{"class":154},[127,35837,31701],{"class":147},[127,35839,35840,35842,35844,35846,35848,35850],{"class":129,"line":8514},[127,35841,31641],{"class":147},[127,35843,725],{"class":290},[127,35845,31363],{"class":154},[127,35847,35724],{"class":147},[127,35849,31363],{"class":154},[127,35851,35852],{"class":147},".f1(x))\n",[127,35854,35855],{"class":129,"line":8519},[127,35856,35857],{"class":133},"        # 还需要dropout对神经元随机进行失活\n",[127,35859,35860,35862,35864,35867,35870],{"class":129,"line":8525},[127,35861,31641],{"class":147},[127,35863,725],{"class":290},[127,35865,35866],{"class":147},"F.dropout(x,",[127,35868,35869],{"class":154},"0.5",[127,35871,687],{"class":147},[127,35873,35874,35876,35878,35880,35882,35884],{"class":129,"line":8552},[127,35875,31641],{"class":147},[127,35877,725],{"class":290},[127,35879,31363],{"class":154},[127,35881,35724],{"class":147},[127,35883,31363],{"class":154},[127,35885,35886],{"class":147},".f2(x))\n",[127,35888,35889,35891,35893,35895,35897],{"class":129,"line":8557},[127,35890,31641],{"class":147},[127,35892,725],{"class":290},[127,35894,35866],{"class":147},[127,35896,35869],{"class":154},[127,35898,687],{"class":147},[127,35900,35901],{"class":129,"line":8563},[127,35902,35903],{"class":133},"        # 直接输出\n",[127,35905,35906,35908,35910,35912],{"class":129,"line":8575},[127,35907,31641],{"class":147},[127,35909,725],{"class":290},[127,35911,31363],{"class":154},[127,35913,35914],{"class":147},".f3(x)\n",[127,35916,35917],{"class":129,"line":8587},[127,35918,35919],{"class":133},"        # 前向传播输出\n",[127,35921,35922,35924],{"class":129,"line":8599},[127,35923,15294],{"class":290},[127,35925,31749],{"class":147},[127,35927,35928],{"class":129,"line":10258},[127,35929,35930],{"class":133},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[127,35932,35933,35935,35937,35939,35941],{"class":129,"line":10283},[127,35934,2075],{"class":290},[127,35936,31760],{"class":154},[127,35938,3491],{"class":290},[127,35940,31765],{"class":781},[127,35942,4281],{"class":147},[127,35944,35945,35947,35949,35951,35953,35955,35957,35959,35961],{"class":129,"line":10306},[127,35946,31777],{"class":147},[127,35948,725],{"class":290},[127,35950,30991],{"class":147},[127,35952,31784],{"class":781},[127,35954,2247],{"class":290},[127,35956,31789],{"class":147},[127,35958,2244],{"class":290},[127,35960,31016],{"class":781},[127,35962,687],{"class":147},[127,35964,35965],{"class":129,"line":10330},[127,35966,35967],{"class":133},"    # 模型实例化，然后将实例化的模型放到设备中\n",[127,35969,35970,35972,35974],{"class":129,"line":10335},[127,35971,31829],{"class":147},[127,35973,725],{"class":290},[127,35975,35976],{"class":147},"AlexNet().to(device)\n",[127,35978,35979,35981,35983,35985,35987,35990,35992,35994],{"class":129,"line":10340},[127,35980,31839],{"class":154},[127,35982,31842],{"class":147},[127,35984,893],{"class":154},[127,35986,1053],{"class":147},[127,35988,35989],{"class":154},"227",[127,35991,1053],{"class":147},[127,35993,35989],{"class":154},[127,35995,31855],{"class":147},[632,35997,35998],{"start":137},[635,35999,31868],{},[117,36001,36003],{"className":30918,"code":36002,"language":30920,"meta":122,"style":122},"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",[124,36004,36005,36011,36017,36027,36033,36043,36053,36063,36073,36083,36087,36098,36108,36112,36116,36120,36128,36140,36150,36166,36176,36208,36222,36232,36242,36246,36256,36270,36280,36290,36300,36306,36310,36314,36318,36322,36326,36334,36354,36358,36362,36366,36370,36374,36390,36394,36398,36406,36410,36414,36422,36426,36430,36434,36442,36446,36450,36454,36458,36466,36470,36478,36482,36490,36494,36502,36506,36514,36518,36522,36530,36534,36538,36542,36554,36578,36592,36596,36600,36604,36612,36616,36624,36628,36636,36640,36648,36652,36660,36664,36672,36676,36688,36692,36700,36704,36712,36716,36720,36724,36728,36736,36740,36756,36760,36768,36772,36776,36780,36784,36788,36792,36796,36812,36816,36828,36832,36844,36848,36860,36864,36872,36876,36884,36888,36892,36897,36903,36907,36916,36920,36937,36941,36950,36954,36972,36985,36990,37003,37007,37011,37019,37023,37027,37035,37039,37047,37051,37059,37063,37067,37109,37151,37155,37159,37175,37179,37195,37199,37203,37211,37215,37219,37231,37269,37274,37279,37288,37292,37306,37316,37322,37328,37334,37340,37344,37348,37354,37358,37362,37370,37374,37392,37396,37400,37404,37420,37424,37428,37432,37436,37440,37460,37480,37484,37488,37492,37500,37508,37512,37528,37548,37568,37572,37576,37584,37592,37596,37600,37604,37616,37620,37630,37638,37655],{"__ignoreMap":122},[127,36006,36007,36009],{"class":129,"line":130},[127,36008,30932],{"class":290},[127,36010,32362],{"class":147},[127,36012,36013,36015],{"class":129,"line":137},[127,36014,30932],{"class":290},[127,36016,32369],{"class":147},[127,36018,36019,36021,36023,36025],{"class":129,"line":151},[127,36020,30932],{"class":290},[127,36022,32380],{"class":147},[127,36024,31923],{"class":290},[127,36026,32385],{"class":147},[127,36028,36029,36031],{"class":129,"line":167},[127,36030,30932],{"class":290},[127,36032,30935],{"class":147},[127,36034,36035,36037,36039,36041],{"class":129,"line":415},[127,36036,31277],{"class":290},[127,36038,31955],{"class":147},[127,36040,30932],{"class":290},[127,36042,32402],{"class":147},[127,36044,36045,36047,36049,36051],{"class":129,"line":421},[127,36046,31277],{"class":290},[127,36048,31908],{"class":147},[127,36050,30932],{"class":290},[127,36052,31913],{"class":147},[127,36054,36055,36057,36059,36061],{"class":129,"line":1766},[127,36056,31277],{"class":290},[127,36058,31938],{"class":147},[127,36060,30932],{"class":290},[127,36062,31943],{"class":147},[127,36064,36065,36067,36069,36071],{"class":129,"line":1856},[127,36066,30932],{"class":290},[127,36068,31955],{"class":147},[127,36070,31923],{"class":290},[127,36072,31960],{"class":147},[127,36074,36075,36077,36079,36081],{"class":129,"line":1862},[127,36076,30932],{"class":290},[127,36078,31972],{"class":147},[127,36080,31923],{"class":290},[127,36082,31977],{"class":147},[127,36084,36085],{"class":129,"line":1874},[127,36086,32447],{"class":133},[127,36088,36089,36091,36093,36095],{"class":129,"line":2155},[127,36090,31277],{"class":290},[127,36092,32454],{"class":147},[127,36094,30932],{"class":290},[127,36096,36097],{"class":147}," AlexNet\n",[127,36099,36100,36102,36104,36106],{"class":129,"line":2160},[127,36101,31277],{"class":290},[127,36103,31280],{"class":147},[127,36105,30932],{"class":290},[127,36107,31285],{"class":147},[127,36109,36110],{"class":129,"line":2166},[127,36111,2942],{"emptyLinePlaceholder":606},[127,36113,36114],{"class":129,"line":2171},[127,36115,2942],{"emptyLinePlaceholder":606},[127,36117,36118],{"class":129,"line":2185},[127,36119,32482],{"class":133},[127,36121,36122,36124,36126],{"class":129,"line":2190},[127,36123,32487],{"class":290},[127,36125,32490],{"class":143},[127,36127,32493],{"class":147},[127,36129,36130,36132,36134,36136,36138],{"class":129,"line":2196},[127,36131,32498],{"class":147},[127,36133,725],{"class":290},[127,36135,31995],{"class":147},[127,36137,32003],{"class":781},[127,36139,32006],{"class":147},[127,36141,36142,36144,36146,36148],{"class":129,"line":2217},[127,36143,32511],{"class":5758},[127,36145,725],{"class":290},[127,36147,32016],{"class":154},[127,36149,32006],{"class":147},[127,36151,36152,36154,36156,36158,36160,36162,36164],{"class":129,"line":2222},[127,36153,32522],{"class":5758},[127,36155,725],{"class":290},[127,36157,32033],{"class":147},[127,36159,32036],{"class":5758},[127,36161,725],{"class":290},[127,36163,35989],{"class":154},[127,36165,32044],{"class":147},[127,36167,36168,36170,36172,36174],{"class":129,"line":2236},[127,36169,32539],{"class":5758},[127,36171,725],{"class":290},[127,36173,32016],{"class":154},[127,36175,687],{"class":147},[127,36177,36178,36180,36182,36184,36186,36188,36190,36192,36194,36196,36198,36200,36202,36204,36206],{"class":129,"line":2241},[127,36179,32550],{"class":147},[127,36181,725],{"class":290},[127,36183,32555],{"class":147},[127,36185,32558],{"class":154},[127,36187,681],{"class":147},[127,36189,32563],{"class":154},[127,36191,1130],{"class":290},[127,36193,7900],{"class":154},[127,36195,32570],{"class":147},[127,36197,32558],{"class":154},[127,36199,681],{"class":147},[127,36201,32577],{"class":154},[127,36203,1130],{"class":290},[127,36205,7900],{"class":154},[127,36207,32584],{"class":147},[127,36209,36210,36212,36214,36216,36218,36220],{"class":129,"line":2270},[127,36211,32589],{"class":147},[127,36213,725],{"class":290},[127,36215,32594],{"class":147},[127,36217,32077],{"class":5758},[127,36219,725],{"class":290},[127,36221,32082],{"class":147},[127,36223,36224,36226,36228,36230],{"class":129,"line":2275},[127,36225,32605],{"class":5758},[127,36227,725],{"class":290},[127,36229,32610],{"class":154},[127,36231,32006],{"class":147},[127,36233,36234,36236,36238,36240],{"class":129,"line":2292},[127,36235,32617],{"class":5758},[127,36237,725],{"class":290},[127,36239,32016],{"class":154},[127,36241,32006],{"class":147},[127,36243,36244],{"class":129,"line":2297},[127,36245,32628],{"class":133},[127,36247,36248,36250,36252,36254],{"class":129,"line":2302},[127,36249,32633],{"class":5758},[127,36251,725],{"class":290},[127,36253,1070],{"class":154},[127,36255,687],{"class":147},[127,36257,36258,36260,36262,36264,36266,36268],{"class":129,"line":2307},[127,36259,32644],{"class":147},[127,36261,725],{"class":290},[127,36263,32074],{"class":147},[127,36265,32077],{"class":5758},[127,36267,725],{"class":290},[127,36269,32655],{"class":147},[127,36271,36272,36274,36276,36278],{"class":129,"line":2321},[127,36273,32660],{"class":5758},[127,36275,725],{"class":290},[127,36277,32610],{"class":154},[127,36279,32006],{"class":147},[127,36281,36282,36284,36286,36288],{"class":129,"line":2326},[127,36283,32671],{"class":5758},[127,36285,725],{"class":290},[127,36287,32016],{"class":154},[127,36289,32006],{"class":147},[127,36291,36292,36294,36296,36298],{"class":129,"line":3119},[127,36293,32682],{"class":5758},[127,36295,725],{"class":290},[127,36297,1070],{"class":154},[127,36299,687],{"class":147},[127,36301,36302,36304],{"class":129,"line":3133},[127,36303,4632],{"class":290},[127,36305,32695],{"class":147},[127,36307,36308],{"class":129,"line":3141},[127,36309,2942],{"emptyLinePlaceholder":606},[127,36311,36312],{"class":129,"line":3146},[127,36313,32704],{"class":133},[127,36315,36316],{"class":129,"line":3152},[127,36317,32709],{"class":133},[127,36319,36320],{"class":129,"line":3158},[127,36321,2942],{"emptyLinePlaceholder":606},[127,36323,36324],{"class":129,"line":3163},[127,36325,32718],{"class":133},[127,36327,36328,36330,36332],{"class":129,"line":8490},[127,36329,32487],{"class":290},[127,36331,32725],{"class":143},[127,36333,32728],{"class":147},[127,36335,36336,36338,36340,36342,36344,36346,36348,36350,36352],{"class":129,"line":8514},[127,36337,31777],{"class":147},[127,36339,725],{"class":290},[127,36341,30991],{"class":147},[127,36343,31784],{"class":781},[127,36345,2247],{"class":290},[127,36347,31789],{"class":147},[127,36349,2244],{"class":290},[127,36351,32747],{"class":781},[127,36353,687],{"class":147},[127,36355,36356],{"class":129,"line":8519},[127,36357,2942],{"emptyLinePlaceholder":606},[127,36359,36360],{"class":129,"line":8525},[127,36361,2942],{"emptyLinePlaceholder":606},[127,36363,36364],{"class":129,"line":8552},[127,36365,32762],{"class":133},[127,36367,36368],{"class":129,"line":8557},[127,36369,32767],{"class":133},[127,36371,36372],{"class":129,"line":8563},[127,36373,32772],{"class":133},[127,36375,36376,36378,36380,36382,36384,36386,36388],{"class":129,"line":8575},[127,36377,32777],{"class":147},[127,36379,725],{"class":290},[127,36381,32782],{"class":147},[127,36383,32785],{"class":5758},[127,36385,725],{"class":290},[127,36387,32790],{"class":154},[127,36389,687],{"class":147},[127,36391,36392],{"class":129,"line":8587},[127,36393,2942],{"emptyLinePlaceholder":606},[127,36395,36396],{"class":129,"line":8599},[127,36397,32801],{"class":133},[127,36399,36400,36402,36404],{"class":129,"line":10258},[127,36401,32806],{"class":147},[127,36403,725],{"class":290},[127,36405,32811],{"class":147},[127,36407,36408],{"class":129,"line":10283},[127,36409,2942],{"emptyLinePlaceholder":606},[127,36411,36412],{"class":129,"line":10306},[127,36413,32820],{"class":133},[127,36415,36416,36418,36420],{"class":129,"line":10330},[127,36417,31829],{"class":147},[127,36419,725],{"class":290},[127,36421,32829],{"class":147},[127,36423,36424],{"class":129,"line":10335},[127,36425,32834],{"class":133},[127,36427,36428],{"class":129,"line":10340},[127,36429,32839],{"class":133},[127,36431,36432],{"class":129,"line":10345},[127,36433,32844],{"class":133},[127,36435,36436,36438,36440],{"class":129,"line":10354},[127,36437,32849],{"class":147},[127,36439,725],{"class":290},[127,36441,32854],{"class":147},[127,36443,36444],{"class":129,"line":10359},[127,36445,2942],{"emptyLinePlaceholder":606},[127,36447,36448],{"class":129,"line":10365},[127,36449,2942],{"emptyLinePlaceholder":606},[127,36451,36452],{"class":129,"line":10386},[127,36453,32867],{"class":133},[127,36455,36456],{"class":129,"line":10392},[127,36457,32872],{"class":133},[127,36459,36460,36462,36464],{"class":129,"line":10406},[127,36461,32877],{"class":147},[127,36463,725],{"class":290},[127,36465,32882],{"class":154},[127,36467,36468],{"class":129,"line":10412},[127,36469,32887],{"class":133},[127,36471,36472,36474,36476],{"class":129,"line":10439},[127,36473,32892],{"class":147},[127,36475,725],{"class":290},[127,36477,32897],{"class":147},[127,36479,36480],{"class":129,"line":10448},[127,36481,32902],{"class":133},[127,36483,36484,36486,36488],{"class":129,"line":10454},[127,36485,32907],{"class":147},[127,36487,725],{"class":290},[127,36489,32897],{"class":147},[127,36491,36492],{"class":129,"line":10462},[127,36493,32916],{"class":133},[127,36495,36496,36498,36500],{"class":129,"line":10467},[127,36497,32921],{"class":147},[127,36499,725],{"class":290},[127,36501,32897],{"class":147},[127,36503,36504],{"class":129,"line":17145},[127,36505,32930],{"class":133},[127,36507,36508,36510,36512],{"class":129,"line":17151},[127,36509,32935],{"class":147},[127,36511,725],{"class":290},[127,36513,32897],{"class":147},[127,36515,36516],{"class":129,"line":17174},[127,36517,2942],{"emptyLinePlaceholder":606},[127,36519,36520],{"class":129,"line":17180},[127,36521,32948],{"class":133},[127,36523,36524,36526,36528],{"class":129,"line":17203},[127,36525,32953],{"class":147},[127,36527,725],{"class":290},[127,36529,32958],{"class":147},[127,36531,36532],{"class":129,"line":17217},[127,36533,2942],{"emptyLinePlaceholder":606},[127,36535,36536],{"class":129,"line":17237},[127,36537,2942],{"emptyLinePlaceholder":606},[127,36539,36540],{"class":129,"line":17243},[127,36541,32971],{"class":133},[127,36543,36544,36546,36548,36550,36552],{"class":129,"line":17254},[127,36545,3743],{"class":290},[127,36547,32978],{"class":147},[127,36549,26584],{"class":290},[127,36551,32983],{"class":154},[127,36553,32986],{"class":147},[127,36555,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576],{"class":129,"line":17277},[127,36557,32991],{"class":154},[127,36559,681],{"class":147},[127,36561,32996],{"class":781},[127,36563,32999],{"class":154},[127,36565,1259],{"class":781},[127,36567,32999],{"class":154},[127,36569,926],{"class":781},[127,36571,33008],{"class":147},[127,36573,1207],{"class":290},[127,36575,893],{"class":154},[127,36577,31037],{"class":147},[127,36579,36580,36582,36584,36586,36588,36590],{"class":129,"line":17299},[127,36581,32991],{"class":154},[127,36583,681],{"class":147},[127,36585,33023],{"class":781},[127,36587,1130],{"class":290},[127,36589,1121],{"class":154},[127,36591,687],{"class":147},[127,36593,36594],{"class":129,"line":17304},[127,36595,2942],{"emptyLinePlaceholder":606},[127,36597,36598],{"class":129,"line":17310},[127,36599,33038],{"class":133},[127,36601,36602],{"class":129,"line":17324},[127,36603,33043],{"class":133},[127,36605,36606,36608,36610],{"class":129,"line":17337},[127,36607,33048],{"class":147},[127,36609,725],{"class":290},[127,36611,32882],{"class":154},[127,36613,36614],{"class":129,"line":17342},[127,36615,33057],{"class":133},[127,36617,36618,36620,36622],{"class":129,"line":17356},[127,36619,33062],{"class":147},[127,36621,725],{"class":290},[127,36623,3627],{"class":154},[127,36625,36626],{"class":129,"line":17361},[127,36627,33071],{"class":133},[127,36629,36630,36632,36634],{"class":129,"line":17367},[127,36631,33076],{"class":147},[127,36633,725],{"class":290},[127,36635,32882],{"class":154},[127,36637,36638],{"class":129,"line":17372},[127,36639,33085],{"class":133},[127,36641,36642,36644,36646],{"class":129,"line":17386},[127,36643,33090],{"class":147},[127,36645,725],{"class":290},[127,36647,3627],{"class":154},[127,36649,36650],{"class":129,"line":17391},[127,36651,33099],{"class":133},[127,36653,36654,36656,36658],{"class":129,"line":17396},[127,36655,33104],{"class":147},[127,36657,725],{"class":290},[127,36659,3627],{"class":154},[127,36661,36662],{"class":129,"line":17410},[127,36663,33113],{"class":133},[127,36665,36666,36668,36670],{"class":129,"line":17422},[127,36667,33118],{"class":147},[127,36669,725],{"class":290},[127,36671,3627],{"class":154},[127,36673,36674],{"class":129,"line":17427},[127,36675,33127],{"class":133},[127,36677,36678,36680,36682,36684,36686],{"class":129,"line":17440},[127,36679,3945],{"class":290},[127,36681,32141],{"class":147},[127,36683,26584],{"class":290},[127,36685,32146],{"class":154},[127,36687,33140],{"class":147},[127,36689,36690],{"class":129,"line":17445},[127,36691,33145],{"class":133},[127,36693,36694,36696,36698],{"class":129,"line":17450},[127,36695,33150],{"class":147},[127,36697,725],{"class":290},[127,36699,33155],{"class":147},[127,36701,36702],{"class":129,"line":17455},[127,36703,33160],{"class":133},[127,36705,36706,36708,36710],{"class":129,"line":17468},[127,36707,33165],{"class":147},[127,36709,725],{"class":290},[127,36711,33170],{"class":147},[127,36713,36714],{"class":129,"line":17473},[127,36715,33176],{"class":133},[127,36717,36718],{"class":129,"line":33173},[127,36719,33182],{"class":147},[127,36721,36722],{"class":129,"line":33179},[127,36723,33188],{"class":133},[127,36725,36726],{"class":129,"line":33185},[127,36727,33194],{"class":133},[127,36729,36730,36732,36734],{"class":129,"line":33191},[127,36731,33200],{"class":147},[127,36733,725],{"class":290},[127,36735,33205],{"class":147},[127,36737,36738],{"class":129,"line":33197},[127,36739,33211],{"class":133},[127,36741,36742,36744,36746,36748,36750,36752,36754],{"class":129,"line":33208},[127,36743,33217],{"class":147},[127,36745,725],{"class":290},[127,36747,33222],{"class":147},[127,36749,33225],{"class":5758},[127,36751,725],{"class":290},[127,36753,893],{"class":154},[127,36755,687],{"class":147},[127,36757,36758],{"class":129,"line":33214},[127,36759,33237],{"class":133},[127,36761,36762,36764,36766],{"class":129,"line":33234},[127,36763,33243],{"class":147},[127,36765,725],{"class":290},[127,36767,33248],{"class":147},[127,36769,36770],{"class":129,"line":33240},[127,36771,33254],{"class":133},[127,36773,36774],{"class":129,"line":33251},[127,36775,33260],{"class":147},[127,36777,36778],{"class":129,"line":33257},[127,36779,33266],{"class":133},[127,36781,36782],{"class":129,"line":33263},[127,36783,33272],{"class":147},[127,36785,36786],{"class":129,"line":33269},[127,36787,33278],{"class":133},[127,36789,36790],{"class":129,"line":33275},[127,36791,33284],{"class":147},[127,36793,36794],{"class":129,"line":33281},[127,36795,33290],{"class":133},[127,36797,36798,36800,36802,36804,36806,36808,36810],{"class":129,"line":33287},[127,36799,33296],{"class":147},[127,36801,10019],{"class":290},[127,36803,33301],{"class":147},[127,36805,1130],{"class":290},[127,36807,33306],{"class":147},[127,36809,867],{"class":154},[127,36811,687],{"class":147},[127,36813,36814],{"class":129,"line":33293},[127,36815,33316],{"class":133},[127,36817,36818,36820,36822,36824,36826],{"class":129,"line":33313},[127,36819,33322],{"class":147},[127,36821,10019],{"class":290},[127,36823,33327],{"class":147},[127,36825,3491],{"class":290},[127,36827,33332],{"class":147},[127,36829,36830],{"class":129,"line":33319},[127,36831,33338],{"class":133},[127,36833,36834,36836,36838,36840,36842],{"class":129,"line":33335},[127,36835,33344],{"class":147},[127,36837,10019],{"class":290},[127,36839,33306],{"class":147},[127,36841,867],{"class":154},[127,36843,687],{"class":147},[127,36845,36846],{"class":129,"line":33341},[127,36847,33358],{"class":133},[127,36849,36850,36852,36854,36856,36858],{"class":129,"line":33355},[127,36851,3945],{"class":290},[127,36853,33366],{"class":147},[127,36855,26584],{"class":290},[127,36857,32146],{"class":154},[127,36859,33373],{"class":147},[127,36861,36862],{"class":129,"line":33361},[127,36863,33379],{"class":133},[127,36865,36866,36868,36870],{"class":129,"line":33376},[127,36867,33150],{"class":147},[127,36869,725],{"class":290},[127,36871,33155],{"class":147},[127,36873,36874],{"class":129,"line":33382},[127,36875,33394],{"class":133},[127,36877,36878,36880,36882],{"class":129,"line":33391},[127,36879,33165],{"class":147},[127,36881,725],{"class":290},[127,36883,33170],{"class":147},[127,36885,36886],{"class":129,"line":33397},[127,36887,33409],{"class":133},[127,36889,36890],{"class":129,"line":33406},[127,36891,33415],{"class":147},[127,36893,36894],{"class":129,"line":33412},[127,36895,36896],{"class":133},"            # 验证时不计算梯度以节省内存\u002F计算\n",[127,36898,36899,36901],{"class":129,"line":33418},[127,36900,33421],{"class":290},[127,36902,33424],{"class":147},[127,36904,36905],{"class":129,"line":33427},[127,36906,33430],{"class":133},[127,36908,36909,36912,36914],{"class":129,"line":33433},[127,36910,36911],{"class":147},"                output",[127,36913,725],{"class":290},[127,36915,33205],{"class":147},[127,36917,36918],{"class":129,"line":33444},[127,36919,33447],{"class":133},[127,36921,36922,36925,36927,36929,36931,36933,36935],{"class":129,"line":33450},[127,36923,36924],{"class":147},"                pre_lab",[127,36926,725],{"class":290},[127,36928,33222],{"class":147},[127,36930,33225],{"class":5758},[127,36932,725],{"class":290},[127,36934,893],{"class":154},[127,36936,687],{"class":147},[127,36938,36939],{"class":129,"line":33469},[127,36940,33472],{"class":133},[127,36942,36943,36946,36948],{"class":129,"line":33475},[127,36944,36945],{"class":147},"                val_batch_loss",[127,36947,725],{"class":290},[127,36949,33248],{"class":147},[127,36951,36952],{"class":129,"line":33486},[127,36953,33489],{"class":133},[127,36955,36956,36959,36961,36964,36966,36968,36970],{"class":129,"line":33492},[127,36957,36958],{"class":147},"                val_loss",[127,36960,10019],{"class":290},[127,36962,36963],{"class":147},"val_batch_loss.item()",[127,36965,1130],{"class":290},[127,36967,33306],{"class":147},[127,36969,867],{"class":154},[127,36971,687],{"class":147},[127,36973,36974,36977,36979,36981,36983],{"class":129,"line":33512},[127,36975,36976],{"class":147},"                val_corrects",[127,36978,10019],{"class":290},[127,36980,33327],{"class":147},[127,36982,3491],{"class":290},[127,36984,33332],{"class":147},[127,36986,36987],{"class":129,"line":33528},[127,36988,36989],{"class":133},"            # 当前用于验证的样本数量\n",[127,36991,36992,36995,36997,36999,37001],{"class":129,"line":33534},[127,36993,36994],{"class":147},"            val_num",[127,36996,10019],{"class":290},[127,36998,33306],{"class":147},[127,37000,867],{"class":154},[127,37002,687],{"class":147},[127,37004,37005],{"class":129,"line":33548},[127,37006,33551],{"class":133},[127,37008,37009],{"class":129,"line":33554},[127,37010,33557],{"class":133},[127,37012,37013,37015,37017],{"class":129,"line":33560},[127,37014,33563],{"class":147},[127,37016,1259],{"class":290},[127,37018,33568],{"class":147},[127,37020,37021],{"class":129,"line":33571},[127,37022,33574],{"class":133},[127,37024,37025],{"class":129,"line":33577},[127,37026,33580],{"class":133},[127,37028,37029,37031,37033],{"class":129,"line":33583},[127,37030,33586],{"class":147},[127,37032,1259],{"class":290},[127,37034,33568],{"class":147},[127,37036,37037],{"class":129,"line":33593},[127,37038,33596],{"class":133},[127,37040,37041,37043,37045],{"class":129,"line":33599},[127,37042,33602],{"class":147},[127,37044,1259],{"class":290},[127,37046,33607],{"class":147},[127,37048,37049],{"class":129,"line":33610},[127,37050,33613],{"class":133},[127,37052,37053,37055,37057],{"class":129,"line":33616},[127,37054,33619],{"class":147},[127,37056,1259],{"class":290},[127,37058,33607],{"class":147},[127,37060,37061],{"class":129,"line":33626},[127,37062,2942],{"emptyLinePlaceholder":606},[127,37064,37065],{"class":129,"line":33631},[127,37066,33634],{"class":133},[127,37068,37069,37071,37073,37075,37077,37079,37081,37083,37085,37087,37089,37091,37093,37095,37097,37099,37101,37103,37105,37107],{"class":129,"line":33637},[127,37070,32991],{"class":154},[127,37072,681],{"class":147},[127,37074,4134],{"class":781},[127,37076,32999],{"class":154},[127,37078,33648],{"class":781},[127,37080,1570],{"class":154},[127,37082,33653],{"class":290},[127,37084,1620],{"class":154},[127,37086,33658],{"class":781},[127,37088,1570],{"class":154},[127,37090,33653],{"class":290},[127,37092,1620],{"class":154},[127,37094,4134],{"class":781},[127,37096,33669],{"class":147},[127,37098,1207],{"class":290},[127,37100,893],{"class":154},[127,37102,33676],{"class":147},[127,37104,1207],{"class":290},[127,37106,893],{"class":154},[127,37108,33683],{"class":147},[127,37110,37111,37113,37115,37117,37119,37121,37123,37125,37127,37129,37131,37133,37135,37137,37139,37141,37143,37145,37147,37149],{"class":129,"line":33686},[127,37112,32991],{"class":154},[127,37114,681],{"class":147},[127,37116,4134],{"class":781},[127,37118,32999],{"class":154},[127,37120,33697],{"class":781},[127,37122,1570],{"class":154},[127,37124,33653],{"class":290},[127,37126,1620],{"class":154},[127,37128,33706],{"class":781},[127,37130,1570],{"class":154},[127,37132,33653],{"class":290},[127,37134,1620],{"class":154},[127,37136,4134],{"class":781},[127,37138,33717],{"class":147},[127,37140,1207],{"class":290},[127,37142,893],{"class":154},[127,37144,33724],{"class":147},[127,37146,1207],{"class":290},[127,37148,893],{"class":154},[127,37150,33683],{"class":147},[127,37152,37153],{"class":129,"line":33733},[127,37154,2942],{"emptyLinePlaceholder":606},[127,37156,37157],{"class":129,"line":33738},[127,37158,33741],{"class":133},[127,37160,37161,37163,37165,37167,37169,37171,37173],{"class":129,"line":33744},[127,37162,3039],{"class":290},[127,37164,33749],{"class":147},[127,37166,1207],{"class":290},[127,37168,893],{"class":154},[127,37170,1614],{"class":147},[127,37172,1634],{"class":290},[127,37174,33760],{"class":147},[127,37176,37177],{"class":129,"line":33763},[127,37178,33766],{"class":133},[127,37180,37181,37183,37185,37187,37189,37191,37193],{"class":129,"line":33769},[127,37182,33772],{"class":147},[127,37184,719],{"class":154},[127,37186,725],{"class":290},[127,37188,33779],{"class":147},[127,37190,1207],{"class":290},[127,37192,893],{"class":154},[127,37194,33786],{"class":147},[127,37196,37197],{"class":129,"line":33789},[127,37198,33792],{"class":133},[127,37200,37201],{"class":129,"line":33795},[127,37202,33798],{"class":133},[127,37204,37205,37207,37209],{"class":129,"line":33801},[127,37206,33804],{"class":147},[127,37208,725],{"class":290},[127,37210,32854],{"class":147},[127,37212,37213],{"class":129,"line":33811},[127,37214,2942],{"emptyLinePlaceholder":606},[127,37216,37217],{"class":129,"line":33816},[127,37218,33819],{"class":133},[127,37220,37221,37223,37225,37227,37229],{"class":129,"line":33822},[127,37222,33825],{"class":147},[127,37224,725],{"class":290},[127,37226,33830],{"class":147},[127,37228,1207],{"class":290},[127,37230,33835],{"class":147},[127,37232,37233,37235,37237,37239,37241,37243,37245,37247,37249,37251,37253,37255,37257,37259,37261,37263,37265,37267],{"class":129,"line":33838},[127,37234,32991],{"class":154},[127,37236,681],{"class":147},[127,37238,33845],{"class":781},[127,37240,1570],{"class":154},[127,37242,33850],{"class":290},[127,37244,1620],{"class":154},[127,37246,1219],{"class":781},[127,37248,1570],{"class":154},[127,37250,33850],{"class":290},[127,37252,1620],{"class":154},[127,37254,33863],{"class":781},[127,37256,33866],{"class":147},[127,37258,33869],{"class":290},[127,37260,1581],{"class":154},[127,37262,33874],{"class":147},[127,37264,1003],{"class":290},[127,37266,1581],{"class":154},[127,37268,31037],{"class":147},[127,37270,37271],{"class":129,"line":33883},[127,37272,37273],{"class":133},"    # 选择最优参数并保存\n",[127,37275,37276],{"class":129,"line":33889},[127,37277,37278],{"class":133},"    # 保存最佳模型权重字典\n",[127,37280,37281,37284,37286],{"class":129,"line":33895},[127,37282,37283],{"class":147},"    torch.save(best_model_wts,",[127,37285,33907],{"class":781},[127,37287,687],{"class":147},[127,37289,37290],{"class":129,"line":33901},[127,37291,33927],{"class":133},[127,37293,37294,37296,37298,37300,37302,37304],{"class":129,"line":33912},[127,37295,33933],{"class":147},[127,37297,725],{"class":290},[127,37299,33938],{"class":147},[127,37301,33941],{"class":5758},[127,37303,725],{"class":290},[127,37305,2090],{"class":147},[127,37307,37308,37310,37312,37314],{"class":129,"line":33918},[127,37309,33951],{"class":781},[127,37311,1533],{"class":147},[127,37313,33956],{"class":154},[127,37315,33959],{"class":147},[127,37317,37318,37320],{"class":129,"line":33924},[127,37319,33965],{"class":781},[127,37321,33968],{"class":147},[127,37323,37324,37326],{"class":129,"line":33930},[127,37325,33974],{"class":781},[127,37327,33977],{"class":147},[127,37329,37330,37332],{"class":129,"line":33948},[127,37331,33983],{"class":781},[127,37333,33986],{"class":147},[127,37335,37336,37338],{"class":129,"line":33962},[127,37337,33992],{"class":781},[127,37339,33995],{"class":147},[127,37341,37342],{"class":129,"line":33971},[127,37343,34001],{"class":147},[127,37345,37346],{"class":129,"line":33980},[127,37347,34007],{"class":133},[127,37349,37350,37352],{"class":129,"line":33989},[127,37351,4632],{"class":290},[127,37353,34015],{"class":147},[127,37355,37356],{"class":129,"line":33998},[127,37357,2942],{"emptyLinePlaceholder":606},[127,37359,37360],{"class":129,"line":34004},[127,37361,34026],{"class":133},[127,37363,37364,37366,37368],{"class":129,"line":34010},[127,37365,32487],{"class":290},[127,37367,34034],{"class":143},[127,37369,34037],{"class":147},[127,37371,37372],{"class":129,"line":34018},[127,37373,34043],{"class":133},[127,37375,37376,37378,37380,37382,37384,37386,37388,37390],{"class":129,"line":34023},[127,37377,34049],{"class":147},[127,37379,32233],{"class":5758},[127,37381,725],{"class":290},[127,37383,681],{"class":147},[127,37385,1173],{"class":154},[127,37387,1053],{"class":147},[127,37389,968],{"class":154},[127,37391,31037],{"class":147},[127,37393,37394],{"class":129,"line":34029},[127,37395,34069],{"class":133},[127,37397,37398],{"class":129,"line":34040},[127,37399,34075],{"class":133},[127,37401,37402],{"class":129,"line":34046},[127,37403,34081],{"class":133},[127,37405,37406,37408,37410,37412,37414,37416,37418],{"class":129,"line":34066},[127,37407,32267],{"class":147},[127,37409,893],{"class":154},[127,37411,1053],{"class":147},[127,37413,530],{"class":154},[127,37415,1053],{"class":147},[127,37417,893],{"class":154},[127,37419,687],{"class":147},[127,37421,37422],{"class":129,"line":34072},[127,37423,34104],{"class":133},[127,37425,37426],{"class":129,"line":34078},[127,37427,34110],{"class":133},[127,37429,37430],{"class":129,"line":34084},[127,37431,34116],{"class":133},[127,37433,37434],{"class":129,"line":34101},[127,37435,34122],{"class":133},[127,37437,37438],{"class":129,"line":34107},[127,37439,34128],{"class":133},[127,37441,37442,37444,37446,37448,37450,37452,37454,37456,37458],{"class":129,"line":34113},[127,37443,34134],{"class":147},[127,37445,34137],{"class":781},[127,37447,34140],{"class":147},[127,37449,34143],{"class":781},[127,37451,1053],{"class":147},[127,37453,34148],{"class":5758},[127,37455,725],{"class":290},[127,37457,34153],{"class":781},[127,37459,687],{"class":147},[127,37461,37462,37464,37466,37468,37470,37472,37474,37476,37478],{"class":129,"line":34119},[127,37463,34134],{"class":147},[127,37465,34137],{"class":781},[127,37467,34165],{"class":147},[127,37469,34168],{"class":781},[127,37471,1053],{"class":147},[127,37473,34148],{"class":5758},[127,37475,725],{"class":290},[127,37477,34177],{"class":781},[127,37479,687],{"class":147},[127,37481,37482],{"class":129,"line":34125},[127,37483,34185],{"class":133},[127,37485,37486],{"class":129,"line":34131},[127,37487,34191],{"class":147},[127,37489,37490],{"class":129,"line":34158},[127,37491,34197],{"class":133},[127,37493,37494,37496,37498],{"class":129,"line":34182},[127,37495,34203],{"class":147},[127,37497,34206],{"class":781},[127,37499,687],{"class":147},[127,37501,37502,37504,37506],{"class":129,"line":34188},[127,37503,34214],{"class":147},[127,37505,34217],{"class":781},[127,37507,687],{"class":147},[127,37509,37510],{"class":129,"line":34194},[127,37511,34225],{"class":133},[127,37513,37514,37516,37518,37520,37522,37524,37526],{"class":129,"line":34200},[127,37515,32267],{"class":147},[127,37517,893],{"class":154},[127,37519,1053],{"class":147},[127,37521,530],{"class":154},[127,37523,1053],{"class":147},[127,37525,530],{"class":154},[127,37527,687],{"class":147},[127,37529,37530,37532,37534,37536,37538,37540,37542,37544,37546],{"class":129,"line":34211},[127,37531,34134],{"class":147},[127,37533,34137],{"class":781},[127,37535,34252],{"class":147},[127,37537,34143],{"class":781},[127,37539,1053],{"class":147},[127,37541,34148],{"class":5758},[127,37543,725],{"class":290},[127,37545,34263],{"class":781},[127,37547,687],{"class":147},[127,37549,37550,37552,37554,37556,37558,37560,37562,37564,37566],{"class":129,"line":34222},[127,37551,34134],{"class":147},[127,37553,34137],{"class":781},[127,37555,34275],{"class":147},[127,37557,34168],{"class":781},[127,37559,1053],{"class":147},[127,37561,34148],{"class":5758},[127,37563,725],{"class":290},[127,37565,34286],{"class":781},[127,37567,687],{"class":147},[127,37569,37570],{"class":129,"line":34228},[127,37571,34294],{"class":133},[127,37573,37574],{"class":129,"line":34245},[127,37575,34191],{"class":147},[127,37577,37578,37580,37582],{"class":129,"line":34268},[127,37579,34203],{"class":147},[127,37581,34137],{"class":781},[127,37583,687],{"class":147},[127,37585,37586,37588,37590],{"class":129,"line":34291},[127,37587,34214],{"class":147},[127,37589,34316],{"class":781},[127,37591,687],{"class":147},[127,37593,37594],{"class":129,"line":34297},[127,37595,34324],{"class":147},[127,37597,37598],{"class":129,"line":34302},[127,37599,2942],{"emptyLinePlaceholder":606},[127,37601,37602],{"class":129,"line":34311},[127,37603,34335],{"class":133},[127,37605,37606,37608,37610,37612,37614],{"class":129,"line":34321},[127,37607,2075],{"class":290},[127,37609,31760],{"class":154},[127,37611,3491],{"class":290},[127,37613,31765],{"class":781},[127,37615,4281],{"class":147},[127,37617,37618],{"class":129,"line":34327},[127,37619,34354],{"class":133},[127,37621,37622,37625,37627],{"class":129,"line":34332},[127,37623,37624],{"class":147},"    AlexNet",[127,37626,725],{"class":290},[127,37628,37629],{"class":147},"AlexNet()\n",[127,37631,37632,37634,37636],{"class":129,"line":34338},[127,37633,34371],{"class":147},[127,37635,725],{"class":290},[127,37637,34376],{"class":147},[127,37639,37640,37642,37644,37647,37649,37651,37653],{"class":129,"line":34351},[127,37641,33933],{"class":147},[127,37643,725],{"class":290},[127,37645,37646],{"class":147},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[127,37648,34389],{"class":5758},[127,37650,725],{"class":290},[127,37652,1374],{"class":154},[127,37654,687],{"class":147},[127,37656,37657],{"class":129,"line":34357},[127,37658,34401],{"class":147},[632,37660,37661],{"start":151},[635,37662,34414],{},[117,37664,37666],{"className":30918,"code":37665,"language":30920,"meta":122,"style":122},"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",[124,37667,37668,37674,37684,37694,37704,37708,37718,37728,37739,37743,37747,37751,37759,37775,37785,37801,37811,37825,37829,37839,37849,37859,37865,37869,37873,37881,37885,37901,37909,37913,37917,37925,37933,37937,37941,37945,37949,37955,37959,37969,37977,37985,37989,37993,37997,38005,38009,38025,38029,38033,38037,38049,38053,38065,38069,38073,38085,38089,38099,38103,38107,38119,38123,38131,38135,38139,38147,38151,38159,38163,38167,38171,38175,38179,38195,38203,38207,38211,38259,38265,38269,38279,38287,38295,38299,38303,38307,38311,38319,38323,38339,38343,38351,38359],{"__ignoreMap":122},[127,37669,37670,37672],{"class":129,"line":130},[127,37671,30932],{"class":290},[127,37673,30935],{"class":147},[127,37675,37676,37678,37680,37682],{"class":129,"line":137},[127,37677,30932],{"class":290},[127,37679,31955],{"class":147},[127,37681,31923],{"class":290},[127,37683,31960],{"class":147},[127,37685,37686,37688,37690,37692],{"class":129,"line":151},[127,37687,31277],{"class":290},[127,37689,34442],{"class":147},[127,37691,30932],{"class":290},[127,37693,34447],{"class":147},[127,37695,37696,37698,37700,37702],{"class":129,"line":167},[127,37697,31277],{"class":290},[127,37699,31938],{"class":147},[127,37701,30932],{"class":290},[127,37703,31943],{"class":147},[127,37705,37706],{"class":129,"line":415},[127,37707,34462],{"class":133},[127,37709,37710,37712,37714,37716],{"class":129,"line":421},[127,37711,31277],{"class":290},[127,37713,31908],{"class":147},[127,37715,30932],{"class":290},[127,37717,31913],{"class":147},[127,37719,37720,37722,37724,37726],{"class":129,"line":1766},[127,37721,31277],{"class":290},[127,37723,32454],{"class":147},[127,37725,30932],{"class":290},[127,37727,36097],{"class":147},[127,37729,37730,37732,37735,37737],{"class":129,"line":1856},[127,37731,31277],{"class":290},[127,37733,37734],{"class":147}," 练习.AlexNet.model ",[127,37736,30932],{"class":290},[127,37738,36097],{"class":147},[127,37740,37741],{"class":129,"line":1862},[127,37742,2942],{"emptyLinePlaceholder":606},[127,37744,37745],{"class":129,"line":1874},[127,37746,2942],{"emptyLinePlaceholder":606},[127,37748,37749],{"class":129,"line":2155},[127,37750,34491],{"class":133},[127,37752,37753,37755,37757],{"class":129,"line":2160},[127,37754,32487],{"class":290},[127,37756,34498],{"class":143},[127,37758,32493],{"class":147},[127,37760,37761,37763,37765,37767,37769,37771,37773],{"class":129,"line":2166},[127,37762,34505],{"class":147},[127,37764,725],{"class":290},[127,37766,31995],{"class":147},[127,37768,31998],{"class":5758},[127,37770,725],{"class":290},[127,37772,32003],{"class":781},[127,37774,32006],{"class":147},[127,37776,37777,37779,37781,37783],{"class":129,"line":2171},[127,37778,34522],{"class":5758},[127,37780,725],{"class":290},[127,37782,34527],{"class":154},[127,37784,32006],{"class":147},[127,37786,37787,37789,37791,37793,37795,37797,37799],{"class":129,"line":2185},[127,37788,34534],{"class":5758},[127,37790,725],{"class":290},[127,37792,32033],{"class":147},[127,37794,32036],{"class":5758},[127,37796,725],{"class":290},[127,37798,35989],{"class":154},[127,37800,32044],{"class":147},[127,37802,37803,37805,37807,37809],{"class":129,"line":2190},[127,37804,34551],{"class":5758},[127,37806,725],{"class":290},[127,37808,32016],{"class":154},[127,37810,687],{"class":147},[127,37812,37813,37815,37817,37819,37821,37823],{"class":129,"line":2196},[127,37814,34562],{"class":147},[127,37816,725],{"class":290},[127,37818,32074],{"class":147},[127,37820,32077],{"class":5758},[127,37822,725],{"class":290},[127,37824,34573],{"class":147},[127,37826,37827],{"class":129,"line":2217},[127,37828,34578],{"class":133},[127,37830,37831,37833,37835,37837],{"class":129,"line":2222},[127,37832,34583],{"class":5758},[127,37834,725],{"class":290},[127,37836,893],{"class":154},[127,37838,32006],{"class":147},[127,37840,37841,37843,37845,37847],{"class":129,"line":2236},[127,37842,34594],{"class":5758},[127,37844,725],{"class":290},[127,37846,32016],{"class":154},[127,37848,32006],{"class":147},[127,37850,37851,37853,37855,37857],{"class":129,"line":2241},[127,37852,34605],{"class":5758},[127,37854,725],{"class":290},[127,37856,867],{"class":154},[127,37858,687],{"class":147},[127,37860,37861,37863],{"class":129,"line":2270},[127,37862,4632],{"class":290},[127,37864,34618],{"class":147},[127,37866,37867],{"class":129,"line":2275},[127,37868,2942],{"emptyLinePlaceholder":606},[127,37870,37871],{"class":129,"line":2292},[127,37872,34627],{"class":133},[127,37874,37875,37877,37879],{"class":129,"line":2297},[127,37876,32487],{"class":290},[127,37878,34634],{"class":143},[127,37880,34637],{"class":147},[127,37882,37883],{"class":129,"line":2302},[127,37884,34642],{"class":133},[127,37886,37887,37889,37891,37893,37895,37897,37899],{"class":129,"line":2307},[127,37888,31777],{"class":147},[127,37890,725],{"class":290},[127,37892,31784],{"class":781},[127,37894,2247],{"class":290},[127,37896,31789],{"class":147},[127,37898,2244],{"class":290},[127,37900,34659],{"class":781},[127,37902,37903,37905,37907],{"class":129,"line":2321},[127,37904,31829],{"class":147},[127,37906,725],{"class":290},[127,37908,32829],{"class":147},[127,37910,37911],{"class":129,"line":2326},[127,37912,2942],{"emptyLinePlaceholder":606},[127,37914,37915],{"class":129,"line":3119},[127,37916,34676],{"class":133},[127,37918,37919,37921,37923],{"class":129,"line":3133},[127,37920,34681],{"class":147},[127,37922,725],{"class":290},[127,37924,32882],{"class":154},[127,37926,37927,37929,37931],{"class":129,"line":3141},[127,37928,34690],{"class":147},[127,37930,725],{"class":290},[127,37932,3627],{"class":154},[127,37934,37935],{"class":129,"line":3146},[127,37936,2942],{"emptyLinePlaceholder":606},[127,37938,37939],{"class":129,"line":3152},[127,37940,34703],{"class":133},[127,37942,37943],{"class":129,"line":3158},[127,37944,34708],{"class":133},[127,37946,37947],{"class":129,"line":3163},[127,37948,34713],{"class":133},[127,37950,37951,37953],{"class":129,"line":8490},[127,37952,34718],{"class":290},[127,37954,33424],{"class":147},[127,37956,37957],{"class":129,"line":8514},[127,37958,34725],{"class":133},[127,37960,37961,37963,37965,37967],{"class":129,"line":8519},[127,37962,3945],{"class":290},[127,37964,34732],{"class":147},[127,37966,26584],{"class":290},[127,37968,34737],{"class":147},[127,37970,37971,37973,37975],{"class":129,"line":8525},[127,37972,34742],{"class":147},[127,37974,725],{"class":290},[127,37976,34747],{"class":147},[127,37978,37979,37981,37983],{"class":129,"line":8552},[127,37980,34752],{"class":147},[127,37982,725],{"class":290},[127,37984,34757],{"class":147},[127,37986,37987],{"class":129,"line":8557},[127,37988,34762],{"class":133},[127,37990,37991],{"class":129,"line":8563},[127,37992,33415],{"class":147},[127,37994,37995],{"class":129,"line":8575},[127,37996,34771],{"class":133},[127,37998,37999,38001,38003],{"class":129,"line":8587},[127,38000,33200],{"class":147},[127,38002,725],{"class":290},[127,38004,34780],{"class":147},[127,38006,38007],{"class":129,"line":8599},[127,38008,34785],{"class":133},[127,38010,38011,38013,38015,38017,38019,38021,38023],{"class":129,"line":10258},[127,38012,33217],{"class":147},[127,38014,725],{"class":290},[127,38016,33222],{"class":147},[127,38018,33225],{"class":5758},[127,38020,725],{"class":290},[127,38022,893],{"class":154},[127,38024,687],{"class":147},[127,38026,38027],{"class":129,"line":10283},[127,38028,34806],{"class":133},[127,38030,38031],{"class":129,"line":10306},[127,38032,34811],{"class":133},[127,38034,38035],{"class":129,"line":10330},[127,38036,34816],{"class":133},[127,38038,38039,38041,38043,38045,38047],{"class":129,"line":10335},[127,38040,34821],{"class":147},[127,38042,10019],{"class":290},[127,38044,33327],{"class":147},[127,38046,3491],{"class":290},[127,38048,34830],{"class":147},[127,38050,38051],{"class":129,"line":10340},[127,38052,34835],{"class":133},[127,38054,38055,38057,38059,38061,38063],{"class":129,"line":10345},[127,38056,34840],{"class":147},[127,38058,10019],{"class":290},[127,38060,34845],{"class":147},[127,38062,867],{"class":154},[127,38064,687],{"class":147},[127,38066,38067],{"class":129,"line":10354},[127,38068,2942],{"emptyLinePlaceholder":606},[127,38070,38071],{"class":129,"line":10359},[127,38072,34858],{"class":133},[127,38074,38075,38077,38079,38081,38083],{"class":129,"line":10365},[127,38076,34863],{"class":147},[127,38078,725],{"class":290},[127,38080,34868],{"class":147},[127,38082,1259],{"class":290},[127,38084,34873],{"class":147},[127,38086,38087],{"class":129,"line":10386},[127,38088,34878],{"class":133},[127,38090,38091,38093,38095,38097],{"class":129,"line":10392},[127,38092,32991],{"class":154},[127,38094,681],{"class":147},[127,38096,34887],{"class":781},[127,38098,34890],{"class":147},[127,38100,38101],{"class":129,"line":10406},[127,38102,2942],{"emptyLinePlaceholder":606},[127,38104,38105],{"class":129,"line":10412},[127,38106,34899],{"class":133},[127,38108,38109,38111,38113,38115,38117],{"class":129,"line":10439},[127,38110,2075],{"class":290},[127,38112,31760],{"class":154},[127,38114,3491],{"class":290},[127,38116,31765],{"class":781},[127,38118,4281],{"class":147},[127,38120,38121],{"class":129,"line":10448},[127,38122,34916],{"class":133},[127,38124,38125,38127,38129],{"class":129,"line":10454},[127,38126,31829],{"class":147},[127,38128,725],{"class":290},[127,38130,37629],{"class":147},[127,38132,38133],{"class":129,"line":10462},[127,38134,34929],{"class":133},[127,38136,38137],{"class":129,"line":10467},[127,38138,34934],{"class":133},[127,38140,38141,38143,38145],{"class":129,"line":17145},[127,38142,34939],{"class":147},[127,38144,34942],{"class":781},[127,38146,31037],{"class":147},[127,38148,38149],{"class":129,"line":17151},[127,38150,34949],{"class":133},[127,38152,38153,38155,38157],{"class":129,"line":17174},[127,38154,34562],{"class":147},[127,38156,725],{"class":290},[127,38158,34958],{"class":147},[127,38160,38161],{"class":129,"line":17180},[127,38162,34963],{"class":133},[127,38164,38165],{"class":129,"line":17203},[127,38166,34968],{"class":147},[127,38168,38169],{"class":129,"line":17217},[127,38170,2942],{"emptyLinePlaceholder":606},[127,38172,38173],{"class":129,"line":17237},[127,38174,34977],{"class":133},[127,38176,38177],{"class":129,"line":17243},[127,38178,34982],{"class":133},[127,38180,38181,38183,38185,38187,38189,38191,38193],{"class":129,"line":17254},[127,38182,31777],{"class":147},[127,38184,725],{"class":290},[127,38186,31784],{"class":781},[127,38188,2247],{"class":290},[127,38190,31789],{"class":147},[127,38192,2244],{"class":290},[127,38194,34659],{"class":781},[127,38196,38197,38199,38201],{"class":129,"line":17277},[127,38198,31829],{"class":147},[127,38200,725],{"class":290},[127,38202,32829],{"class":147},[127,38204,38205],{"class":129,"line":17299},[127,38206,35011],{"class":133},[127,38208,38209],{"class":129,"line":17304},[127,38210,35016],{"class":133},[127,38212,38213,38215,38217,38219,38221,38223,38225,38227,38229,38231,38233,38235,38237,38239,38241,38243,38245,38247,38249,38251,38253,38255,38257],{"class":129,"line":17310},[127,38214,35021],{"class":147},[127,38216,725],{"class":290},[127,38218,1564],{"class":147},[127,38220,35028],{"class":781},[127,38222,1053],{"class":147},[127,38224,35033],{"class":781},[127,38226,1053],{"class":147},[127,38228,35038],{"class":781},[127,38230,1053],{"class":147},[127,38232,35043],{"class":781},[127,38234,1053],{"class":147},[127,38236,35048],{"class":781},[127,38238,1053],{"class":147},[127,38240,35053],{"class":781},[127,38242,1053],{"class":147},[127,38244,35058],{"class":781},[127,38246,1053],{"class":147},[127,38248,35063],{"class":781},[127,38250,1053],{"class":147},[127,38252,35068],{"class":781},[127,38254,1053],{"class":147},[127,38256,35073],{"class":781},[127,38258,33786],{"class":147},[127,38260,38261,38263],{"class":129,"line":17324},[127,38262,34718],{"class":290},[127,38264,33424],{"class":147},[127,38266,38267],{"class":129,"line":17337},[127,38268,35086],{"class":133},[127,38270,38271,38273,38275,38277],{"class":129,"line":17342},[127,38272,3945],{"class":290},[127,38274,35093],{"class":147},[127,38276,26584],{"class":290},[127,38278,34737],{"class":147},[127,38280,38281,38283,38285],{"class":129,"line":17356},[127,38282,33150],{"class":147},[127,38284,725],{"class":290},[127,38286,33155],{"class":147},[127,38288,38289,38291,38293],{"class":129,"line":17361},[127,38290,33165],{"class":147},[127,38292,725],{"class":290},[127,38294,33170],{"class":147},[127,38296,38297],{"class":129,"line":17367},[127,38298,2942],{"emptyLinePlaceholder":606},[127,38300,38301],{"class":129,"line":17372},[127,38302,35122],{"class":133},[127,38304,38305],{"class":129,"line":17386},[127,38306,33415],{"class":147},[127,38308,38309],{"class":129,"line":17391},[127,38310,35131],{"class":133},[127,38312,38313,38315,38317],{"class":129,"line":17396},[127,38314,33200],{"class":147},[127,38316,725],{"class":290},[127,38318,33205],{"class":147},[127,38320,38321],{"class":129,"line":17410},[127,38322,35144],{"class":133},[127,38324,38325,38327,38329,38331,38333,38335,38337],{"class":129,"line":17422},[127,38326,33217],{"class":147},[127,38328,725],{"class":290},[127,38330,33222],{"class":147},[127,38332,33225],{"class":5758},[127,38334,725],{"class":290},[127,38336,893],{"class":154},[127,38338,687],{"class":147},[127,38340,38341],{"class":129,"line":17427},[127,38342,35165],{"class":133},[127,38344,38345,38347,38349],{"class":129,"line":17440},[127,38346,35170],{"class":147},[127,38348,725],{"class":290},[127,38350,35175],{"class":147},[127,38352,38353,38355,38357],{"class":129,"line":17445},[127,38354,35180],{"class":147},[127,38356,725],{"class":290},[127,38358,35185],{"class":147},[127,38360,38361,38363,38365,38367,38369,38371,38373,38375],{"class":129,"line":17450},[127,38362,35190],{"class":154},[127,38364,681],{"class":147},[127,38366,35195],{"class":781},[127,38368,35198],{"class":147},[127,38370,35201],{"class":781},[127,38372,1053],{"class":147},[127,38374,35206],{"class":781},[127,38376,35209],{"class":147},[62,38378,38380],{"id":38379},"_22vgg","2.2.VGG",[22539,38382,38384],{"id":38383},"_221原理","2.2.1.原理",[19,38386,38387],{},[23,38388],{"alt":122,"src":38389},"\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",[19,38391,38392],{},[23,38393],{"alt":122,"src":38394},"\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",[19,38396,38397],{},[23,38398],{"alt":122,"src":38399},"\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",[19,38401,38402],{},"参数详细描述：",[19,38404,38405],{},[23,38406],{"alt":122,"src":38407},"\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",[19,38409,38410],{},[23,38411],{"alt":122,"src":38412},"\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",[19,38414,38415],{},[23,38416],{"alt":122,"src":38417},"\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",[19,38419,38420],{},[23,38421],{"alt":122,"src":38422},"\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",[19,38424,38425],{},[23,38426],{"alt":122,"src":38427},"\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",[22539,38429,38431],{"id":38430},"_222代码实现","2.2.2.代码实现",[632,38433,38434],{},[635,38435,38436],{},"网络搭建",[117,38438,38440],{"className":30918,"code":38439,"language":30920,"meta":122,"style":122},"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",[124,38441,38442,38448,38460,38470,38480,38484,38501,38509,38528,38533,38538,38550,38588,38593,38629,38633,38662,38667,38672,38683,38719,38723,38759,38763,38791,38795,38800,38811,38847,38851,38887,38891,38927,38931,38959,38963,38968,38979,39016,39020,39056,39060,39096,39100,39128,39132,39137,39148,39184,39188,39224,39228,39264,39268,39296,39300,39305,39316,39321,39326,39331,39352,39356,39368,39372,39384,39388,39392,39397,39402,39417,39422,39432,39437,39452,39457,39476,39481,39490,39495,39505,39510,39515,39529,39534,39548,39556,39560,39564,39572,39583,39594,39605,39616,39627,39638,39644,39648,39653,39666,39686,39692,39701],{"__ignoreMap":122},[127,38443,38444,38446],{"class":129,"line":130},[127,38445,30932],{"class":290},[127,38447,30935],{"class":147},[127,38449,38450,38452,38455,38457],{"class":129,"line":137},[127,38451,31277],{"class":290},[127,38453,38454],{"class":147}," sympy.core.sympify ",[127,38456,30932],{"class":290},[127,38458,38459],{"class":147}," kernS\n",[127,38461,38462,38464,38466,38468],{"class":129,"line":151},[127,38463,31277],{"class":290},[127,38465,31280],{"class":147},[127,38467,30932],{"class":290},[127,38469,31285],{"class":147},[127,38471,38472,38474,38476,38478],{"class":129,"line":167},[127,38473,31277],{"class":290},[127,38475,31297],{"class":147},[127,38477,30932],{"class":290},[127,38479,31302],{"class":147},[127,38481,38482],{"class":129,"line":415},[127,38483,2942],{"emptyLinePlaceholder":606},[127,38485,38486,38488,38491,38493,38495,38497,38499],{"class":129,"line":421},[127,38487,15236],{"class":290},[127,38489,38490],{"class":143}," VGG16",[127,38492,681],{"class":147},[127,38494,31318],{"class":143},[127,38496,1233],{"class":147},[127,38498,31323],{"class":143},[127,38500,31326],{"class":147},[127,38502,38503,38505,38507],{"class":129,"line":1766},[127,38504,31341],{"class":290},[127,38506,31344],{"class":154},[127,38508,31347],{"class":147},[127,38510,38511,38513,38515,38518,38520,38522,38524,38526],{"class":129,"line":1856},[127,38512,31357],{"class":154},[127,38514,681],{"class":147},[127,38516,38517],{"class":154},"VGG16",[127,38519,12977],{"class":147},[127,38521,31363],{"class":154},[127,38523,31366],{"class":147},[127,38525,31369],{"class":154},[127,38527,2518],{"class":147},[127,38529,38530],{"class":129,"line":1862},[127,38531,38532],{"class":133},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[127,38534,38535],{"class":129,"line":1874},[127,38536,38537],{"class":133},"        # 这里用的是灰度图\n",[127,38539,38540,38542,38545,38547],{"class":129,"line":2155},[127,38541,31385],{"class":154},[127,38543,38544],{"class":147},".block1",[127,38546,725],{"class":290},[127,38548,38549],{"class":147},"nn.Sequential(\n",[127,38551,38552,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585],{"class":129,"line":2160},[127,38553,38554],{"class":147},"            nn.Conv2d(",[127,38556,31396],{"class":5758},[127,38558,725],{"class":290},[127,38560,893],{"class":154},[127,38562,1053],{"class":147},[127,38564,31405],{"class":5758},[127,38566,725],{"class":290},[127,38568,879],{"class":154},[127,38570,1053],{"class":147},[127,38572,31414],{"class":5758},[127,38574,725],{"class":290},[127,38576,749],{"class":154},[127,38578,1053],{"class":147},[127,38580,31423],{"class":5758},[127,38582,725],{"class":290},[127,38584,893],{"class":154},[127,38586,38587],{"class":147},"),\n",[127,38589,38590],{"class":129,"line":2166},[127,38591,38592],{"class":147},"            nn.ReLU(),\n",[127,38594,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627],{"class":129,"line":2171},[127,38596,38554],{"class":147},[127,38598,31396],{"class":5758},[127,38600,725],{"class":290},[127,38602,879],{"class":154},[127,38604,1053],{"class":147},[127,38606,31405],{"class":5758},[127,38608,725],{"class":290},[127,38610,879],{"class":154},[127,38612,1053],{"class":147},[127,38614,31414],{"class":5758},[127,38616,725],{"class":290},[127,38618,749],{"class":154},[127,38620,1053],{"class":147},[127,38622,31423],{"class":5758},[127,38624,725],{"class":290},[127,38626,893],{"class":154},[127,38628,38587],{"class":147},[127,38630,38631],{"class":129,"line":2185},[127,38632,38592],{"class":147},[127,38634,38635,38638,38640,38642,38644,38646,38648,38650,38652,38654,38656,38658,38660],{"class":129,"line":2190},[127,38636,38637],{"class":147},"            nn.MaxPool2d(",[127,38639,31414],{"class":5758},[127,38641,725],{"class":290},[127,38643,530],{"class":154},[127,38645,1053],{"class":147},[127,38647,31469],{"class":5758},[127,38649,725],{"class":290},[127,38651,530],{"class":154},[127,38653,1053],{"class":147},[127,38655,31423],{"class":5758},[127,38657,725],{"class":290},[127,38659,867],{"class":154},[127,38661,687],{"class":147},[127,38663,38664],{"class":129,"line":2196},[127,38665,38666],{"class":147},"        )\n",[127,38668,38669],{"class":129,"line":2217},[127,38670,38671],{"class":133},"        # 第二层\n",[127,38673,38674,38676,38679,38681],{"class":129,"line":2222},[127,38675,31385],{"class":154},[127,38677,38678],{"class":147},".block2",[127,38680,725],{"class":290},[127,38682,38549],{"class":147},[127,38684,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717],{"class":129,"line":2236},[127,38686,38554],{"class":147},[127,38688,31396],{"class":5758},[127,38690,725],{"class":290},[127,38692,879],{"class":154},[127,38694,1053],{"class":147},[127,38696,31405],{"class":5758},[127,38698,725],{"class":290},[127,38700,32610],{"class":154},[127,38702,1053],{"class":147},[127,38704,31414],{"class":5758},[127,38706,725],{"class":290},[127,38708,749],{"class":154},[127,38710,1053],{"class":147},[127,38712,31423],{"class":5758},[127,38714,725],{"class":290},[127,38716,893],{"class":154},[127,38718,38587],{"class":147},[127,38720,38721],{"class":129,"line":2241},[127,38722,38592],{"class":147},[127,38724,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757],{"class":129,"line":2270},[127,38726,38554],{"class":147},[127,38728,31396],{"class":5758},[127,38730,725],{"class":290},[127,38732,32610],{"class":154},[127,38734,1053],{"class":147},[127,38736,31405],{"class":5758},[127,38738,725],{"class":290},[127,38740,32610],{"class":154},[127,38742,1053],{"class":147},[127,38744,31414],{"class":5758},[127,38746,725],{"class":290},[127,38748,749],{"class":154},[127,38750,1053],{"class":147},[127,38752,31423],{"class":5758},[127,38754,725],{"class":290},[127,38756,893],{"class":154},[127,38758,38587],{"class":147},[127,38760,38761],{"class":129,"line":2275},[127,38762,38592],{"class":147},[127,38764,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789],{"class":129,"line":2292},[127,38766,38637],{"class":147},[127,38768,31414],{"class":5758},[127,38770,725],{"class":290},[127,38772,530],{"class":154},[127,38774,1053],{"class":147},[127,38776,31469],{"class":5758},[127,38778,725],{"class":290},[127,38780,530],{"class":154},[127,38782,1053],{"class":147},[127,38784,31423],{"class":5758},[127,38786,725],{"class":290},[127,38788,867],{"class":154},[127,38790,687],{"class":147},[127,38792,38793],{"class":129,"line":2297},[127,38794,38666],{"class":147},[127,38796,38797],{"class":129,"line":2302},[127,38798,38799],{"class":133},"        # 第三层\n",[127,38801,38802,38804,38807,38809],{"class":129,"line":2307},[127,38803,31385],{"class":154},[127,38805,38806],{"class":147},".block3",[127,38808,725],{"class":290},[127,38810,38549],{"class":147},[127,38812,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843,38845],{"class":129,"line":2321},[127,38814,38554],{"class":147},[127,38816,31396],{"class":5758},[127,38818,725],{"class":290},[127,38820,32610],{"class":154},[127,38822,1053],{"class":147},[127,38824,31405],{"class":5758},[127,38826,725],{"class":290},[127,38828,35410],{"class":154},[127,38830,1053],{"class":147},[127,38832,31414],{"class":5758},[127,38834,725],{"class":290},[127,38836,749],{"class":154},[127,38838,1053],{"class":147},[127,38840,31423],{"class":5758},[127,38842,725],{"class":290},[127,38844,893],{"class":154},[127,38846,38587],{"class":147},[127,38848,38849],{"class":129,"line":2326},[127,38850,38592],{"class":147},[127,38852,38853,38855,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877,38879,38881,38883,38885],{"class":129,"line":3119},[127,38854,38554],{"class":147},[127,38856,31396],{"class":5758},[127,38858,725],{"class":290},[127,38860,35410],{"class":154},[127,38862,1053],{"class":147},[127,38864,31405],{"class":5758},[127,38866,725],{"class":290},[127,38868,35410],{"class":154},[127,38870,1053],{"class":147},[127,38872,31414],{"class":5758},[127,38874,725],{"class":290},[127,38876,749],{"class":154},[127,38878,1053],{"class":147},[127,38880,31423],{"class":5758},[127,38882,725],{"class":290},[127,38884,893],{"class":154},[127,38886,38587],{"class":147},[127,38888,38889],{"class":129,"line":3133},[127,38890,38592],{"class":147},[127,38892,38893,38895,38897,38899,38901,38903,38905,38907,38909,38911,38913,38915,38917,38919,38921,38923,38925],{"class":129,"line":3141},[127,38894,38554],{"class":147},[127,38896,31396],{"class":5758},[127,38898,725],{"class":290},[127,38900,35410],{"class":154},[127,38902,1053],{"class":147},[127,38904,31405],{"class":5758},[127,38906,725],{"class":290},[127,38908,35410],{"class":154},[127,38910,1053],{"class":147},[127,38912,31414],{"class":5758},[127,38914,725],{"class":290},[127,38916,749],{"class":154},[127,38918,1053],{"class":147},[127,38920,31423],{"class":5758},[127,38922,725],{"class":290},[127,38924,893],{"class":154},[127,38926,38587],{"class":147},[127,38928,38929],{"class":129,"line":3146},[127,38930,38592],{"class":147},[127,38932,38933,38935,38937,38939,38941,38943,38945,38947,38949,38951,38953,38955,38957],{"class":129,"line":3152},[127,38934,38637],{"class":147},[127,38936,31414],{"class":5758},[127,38938,725],{"class":290},[127,38940,530],{"class":154},[127,38942,1053],{"class":147},[127,38944,31469],{"class":5758},[127,38946,725],{"class":290},[127,38948,530],{"class":154},[127,38950,1053],{"class":147},[127,38952,31423],{"class":5758},[127,38954,725],{"class":290},[127,38956,867],{"class":154},[127,38958,687],{"class":147},[127,38960,38961],{"class":129,"line":3158},[127,38962,38666],{"class":147},[127,38964,38965],{"class":129,"line":3163},[127,38966,38967],{"class":133},"        # 第四层\n",[127,38969,38970,38972,38975,38977],{"class":129,"line":8490},[127,38971,31385],{"class":154},[127,38973,38974],{"class":147},".block4",[127,38976,725],{"class":290},[127,38978,38549],{"class":147},[127,38980,38981,38983,38985,38987,38989,38991,38993,38995,38998,39000,39002,39004,39006,39008,39010,39012,39014],{"class":129,"line":8514},[127,38982,38554],{"class":147},[127,38984,31396],{"class":5758},[127,38986,725],{"class":290},[127,38988,35410],{"class":154},[127,38990,1053],{"class":147},[127,38992,31405],{"class":5758},[127,38994,725],{"class":290},[127,38996,38997],{"class":154},"512",[127,38999,1053],{"class":147},[127,39001,31414],{"class":5758},[127,39003,725],{"class":290},[127,39005,749],{"class":154},[127,39007,1053],{"class":147},[127,39009,31423],{"class":5758},[127,39011,725],{"class":290},[127,39013,893],{"class":154},[127,39015,38587],{"class":147},[127,39017,39018],{"class":129,"line":8519},[127,39019,38592],{"class":147},[127,39021,39022,39024,39026,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054],{"class":129,"line":8525},[127,39023,38554],{"class":147},[127,39025,31396],{"class":5758},[127,39027,725],{"class":290},[127,39029,38997],{"class":154},[127,39031,1053],{"class":147},[127,39033,31405],{"class":5758},[127,39035,725],{"class":290},[127,39037,38997],{"class":154},[127,39039,1053],{"class":147},[127,39041,31414],{"class":5758},[127,39043,725],{"class":290},[127,39045,749],{"class":154},[127,39047,1053],{"class":147},[127,39049,31423],{"class":5758},[127,39051,725],{"class":290},[127,39053,893],{"class":154},[127,39055,38587],{"class":147},[127,39057,39058],{"class":129,"line":8552},[127,39059,38592],{"class":147},[127,39061,39062,39064,39066,39068,39070,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094],{"class":129,"line":8557},[127,39063,38554],{"class":147},[127,39065,31396],{"class":5758},[127,39067,725],{"class":290},[127,39069,38997],{"class":154},[127,39071,1053],{"class":147},[127,39073,31405],{"class":5758},[127,39075,725],{"class":290},[127,39077,38997],{"class":154},[127,39079,1053],{"class":147},[127,39081,31414],{"class":5758},[127,39083,725],{"class":290},[127,39085,749],{"class":154},[127,39087,1053],{"class":147},[127,39089,31423],{"class":5758},[127,39091,725],{"class":290},[127,39093,893],{"class":154},[127,39095,38587],{"class":147},[127,39097,39098],{"class":129,"line":8563},[127,39099,38592],{"class":147},[127,39101,39102,39104,39106,39108,39110,39112,39114,39116,39118,39120,39122,39124,39126],{"class":129,"line":8575},[127,39103,38637],{"class":147},[127,39105,31414],{"class":5758},[127,39107,725],{"class":290},[127,39109,530],{"class":154},[127,39111,1053],{"class":147},[127,39113,31469],{"class":5758},[127,39115,725],{"class":290},[127,39117,530],{"class":154},[127,39119,1053],{"class":147},[127,39121,31423],{"class":5758},[127,39123,725],{"class":290},[127,39125,867],{"class":154},[127,39127,687],{"class":147},[127,39129,39130],{"class":129,"line":8587},[127,39131,38666],{"class":147},[127,39133,39134],{"class":129,"line":8599},[127,39135,39136],{"class":133},"        # 第五层\n",[127,39138,39139,39141,39144,39146],{"class":129,"line":10258},[127,39140,31385],{"class":154},[127,39142,39143],{"class":147},".block5",[127,39145,725],{"class":290},[127,39147,38549],{"class":147},[127,39149,39150,39152,39154,39156,39158,39160,39162,39164,39166,39168,39170,39172,39174,39176,39178,39180,39182],{"class":129,"line":10283},[127,39151,38554],{"class":147},[127,39153,31396],{"class":5758},[127,39155,725],{"class":290},[127,39157,38997],{"class":154},[127,39159,1053],{"class":147},[127,39161,31405],{"class":5758},[127,39163,725],{"class":290},[127,39165,38997],{"class":154},[127,39167,1053],{"class":147},[127,39169,31414],{"class":5758},[127,39171,725],{"class":290},[127,39173,749],{"class":154},[127,39175,1053],{"class":147},[127,39177,31423],{"class":5758},[127,39179,725],{"class":290},[127,39181,893],{"class":154},[127,39183,38587],{"class":147},[127,39185,39186],{"class":129,"line":10306},[127,39187,38592],{"class":147},[127,39189,39190,39192,39194,39196,39198,39200,39202,39204,39206,39208,39210,39212,39214,39216,39218,39220,39222],{"class":129,"line":10330},[127,39191,38554],{"class":147},[127,39193,31396],{"class":5758},[127,39195,725],{"class":290},[127,39197,38997],{"class":154},[127,39199,1053],{"class":147},[127,39201,31405],{"class":5758},[127,39203,725],{"class":290},[127,39205,38997],{"class":154},[127,39207,1053],{"class":147},[127,39209,31414],{"class":5758},[127,39211,725],{"class":290},[127,39213,749],{"class":154},[127,39215,1053],{"class":147},[127,39217,31423],{"class":5758},[127,39219,725],{"class":290},[127,39221,893],{"class":154},[127,39223,38587],{"class":147},[127,39225,39226],{"class":129,"line":10335},[127,39227,38592],{"class":147},[127,39229,39230,39232,39234,39236,39238,39240,39242,39244,39246,39248,39250,39252,39254,39256,39258,39260,39262],{"class":129,"line":10340},[127,39231,38554],{"class":147},[127,39233,31396],{"class":5758},[127,39235,725],{"class":290},[127,39237,38997],{"class":154},[127,39239,1053],{"class":147},[127,39241,31405],{"class":5758},[127,39243,725],{"class":290},[127,39245,38997],{"class":154},[127,39247,1053],{"class":147},[127,39249,31414],{"class":5758},[127,39251,725],{"class":290},[127,39253,749],{"class":154},[127,39255,1053],{"class":147},[127,39257,31423],{"class":5758},[127,39259,725],{"class":290},[127,39261,893],{"class":154},[127,39263,38587],{"class":147},[127,39265,39266],{"class":129,"line":10345},[127,39267,38592],{"class":147},[127,39269,39270,39272,39274,39276,39278,39280,39282,39284,39286,39288,39290,39292,39294],{"class":129,"line":10354},[127,39271,38637],{"class":147},[127,39273,31414],{"class":5758},[127,39275,725],{"class":290},[127,39277,530],{"class":154},[127,39279,1053],{"class":147},[127,39281,31469],{"class":5758},[127,39283,725],{"class":290},[127,39285,530],{"class":154},[127,39287,1053],{"class":147},[127,39289,31423],{"class":5758},[127,39291,725],{"class":290},[127,39293,867],{"class":154},[127,39295,687],{"class":147},[127,39297,39298],{"class":129,"line":10359},[127,39299,38666],{"class":147},[127,39301,39302],{"class":129,"line":10365},[127,39303,39304],{"class":133},"        # 全连接层\n",[127,39306,39307,39309,39312,39314],{"class":129,"line":10386},[127,39308,31385],{"class":154},[127,39310,39311],{"class":147},".block6",[127,39313,725],{"class":290},[127,39315,38549],{"class":147},[127,39317,39318],{"class":129,"line":10392},[127,39319,39320],{"class":133},"            # 平展操作\n",[127,39322,39323],{"class":129,"line":10406},[127,39324,39325],{"class":133},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[127,39327,39328],{"class":129,"line":10412},[127,39329,39330],{"class":147},"            nn.Flatten(),\n",[127,39332,39333,39336,39338,39340,39342,39344,39346,39348,39350],{"class":129,"line":10439},[127,39334,39335],{"class":147},"            nn.Linear(",[127,39337,1044],{"class":154},[127,39339,1130],{"class":290},[127,39341,1044],{"class":154},[127,39343,1130],{"class":290},[127,39345,38997],{"class":154},[127,39347,1053],{"class":147},[127,39349,35410],{"class":154},[127,39351,38587],{"class":147},[127,39353,39354],{"class":129,"line":10448},[127,39355,38592],{"class":147},[127,39357,39358,39360,39362,39364,39366],{"class":129,"line":10454},[127,39359,39335],{"class":147},[127,39361,35410],{"class":154},[127,39363,1053],{"class":147},[127,39365,32610],{"class":154},[127,39367,38587],{"class":147},[127,39369,39370],{"class":129,"line":10462},[127,39371,38592],{"class":147},[127,39373,39374,39376,39378,39380,39382],{"class":129,"line":10467},[127,39375,39335],{"class":147},[127,39377,32610],{"class":154},[127,39379,1053],{"class":147},[127,39381,1121],{"class":154},[127,39383,687],{"class":147},[127,39385,39386],{"class":129,"line":17145},[127,39387,38666],{"class":147},[127,39389,39390],{"class":129,"line":17151},[127,39391,2942],{"emptyLinePlaceholder":606},[127,39393,39394],{"class":129,"line":17174},[127,39395,39396],{"class":133},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[127,39398,39399],{"class":129,"line":17180},[127,39400,39401],{"class":133},"        # 循环遍历模型\n",[127,39403,39404,39406,39409,39411,39414],{"class":129,"line":17203},[127,39405,3945],{"class":290},[127,39407,39408],{"class":147}," m ",[127,39410,26584],{"class":290},[127,39412,39413],{"class":154}," self",[127,39415,39416],{"class":147},".modules():\n",[127,39418,39419],{"class":129,"line":17217},[127,39420,39421],{"class":133},"            # print(m)\n",[127,39423,39424,39426,39429],{"class":129,"line":17237},[127,39425,5184],{"class":290},[127,39427,39428],{"class":154}," isinstance",[127,39430,39431],{"class":147},"(m,nn.Conv2d):\n",[127,39433,39434],{"class":129,"line":17243},[127,39435,39436],{"class":133},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[127,39438,39439,39442,39445,39447,39450],{"class":129,"line":17254},[127,39440,39441],{"class":147},"                nn.init.kaiming_normal_(m.weight,",[127,39443,39444],{"class":5758},"nonlinearity",[127,39446,725],{"class":290},[127,39448,39449],{"class":781},"'relu'",[127,39451,687],{"class":147},[127,39453,39454],{"class":129,"line":17277},[127,39455,39456],{"class":133},"                # 判断b参数是否存在\n",[127,39458,39459,39462,39465,39468,39471,39474],{"class":129,"line":17299},[127,39460,39461],{"class":290},"                if",[127,39463,39464],{"class":147}," m.bias ",[127,39466,39467],{"class":290},"is",[127,39469,39470],{"class":290}," not",[127,39472,39473],{"class":154}," None",[127,39475,4281],{"class":147},[127,39477,39478],{"class":129,"line":17304},[127,39479,39480],{"class":133},"                    # 如果参数不存在的化初始化b=0\n",[127,39482,39483,39486,39488],{"class":129,"line":17310},[127,39484,39485],{"class":147},"                    nn.init.constant_(m.bias,",[127,39487,867],{"class":154},[127,39489,687],{"class":147},[127,39491,39492],{"class":129,"line":17324},[127,39493,39494],{"class":133},"            # 全连接层初始化\n",[127,39496,39497,39500,39502],{"class":129,"line":17337},[127,39498,39499],{"class":290},"            elif",[127,39501,39428],{"class":154},[127,39503,39504],{"class":147},"(m,nn.Linear):\n",[127,39506,39507],{"class":129,"line":17342},[127,39508,39509],{"class":133},"                # 这个初始化方法是利用的是正太分布的方式\n",[127,39511,39512],{"class":129,"line":17356},[127,39513,39514],{"class":133},"                # 均值为0，方差为0.01\n",[127,39516,39517,39520,39522,39524,39527],{"class":129,"line":17361},[127,39518,39519],{"class":147},"                nn.init.normal_(m.weight,",[127,39521,867],{"class":154},[127,39523,1053],{"class":147},[127,39525,39526],{"class":154},"0.01",[127,39528,687],{"class":147},[127,39530,39531],{"class":129,"line":17367},[127,39532,39533],{"class":133},"                # 初始化b参数\n",[127,39535,39536,39538,39540,39542,39544,39546],{"class":129,"line":17372},[127,39537,39461],{"class":290},[127,39539,39464],{"class":147},[127,39541,39467],{"class":290},[127,39543,39470],{"class":290},[127,39545,39473],{"class":154},[127,39547,4281],{"class":147},[127,39549,39550,39552,39554],{"class":129,"line":17386},[127,39551,39485],{"class":147},[127,39553,867],{"class":154},[127,39555,687],{"class":147},[127,39557,39558],{"class":129,"line":17391},[127,39559,2942],{"emptyLinePlaceholder":606},[127,39561,39562],{"class":129,"line":17396},[127,39563,35705],{"class":133},[127,39565,39566,39568,39570],{"class":129,"line":17410},[127,39567,31341],{"class":290},[127,39569,31633],{"class":143},[127,39571,31636],{"class":147},[127,39573,39574,39576,39578,39580],{"class":129,"line":17422},[127,39575,31641],{"class":147},[127,39577,725],{"class":290},[127,39579,31363],{"class":154},[127,39581,39582],{"class":147},".block1(x)\n",[127,39584,39585,39587,39589,39591],{"class":129,"line":17427},[127,39586,31641],{"class":147},[127,39588,725],{"class":290},[127,39590,31363],{"class":154},[127,39592,39593],{"class":147},".block2(x)\n",[127,39595,39596,39598,39600,39602],{"class":129,"line":17440},[127,39597,31641],{"class":147},[127,39599,725],{"class":290},[127,39601,31363],{"class":154},[127,39603,39604],{"class":147},".block3(x)\n",[127,39606,39607,39609,39611,39613],{"class":129,"line":17445},[127,39608,31641],{"class":147},[127,39610,725],{"class":290},[127,39612,31363],{"class":154},[127,39614,39615],{"class":147},".block4(x)\n",[127,39617,39618,39620,39622,39624],{"class":129,"line":17450},[127,39619,31641],{"class":147},[127,39621,725],{"class":290},[127,39623,31363],{"class":154},[127,39625,39626],{"class":147},".block5(x)\n",[127,39628,39629,39631,39633,39635],{"class":129,"line":17455},[127,39630,31641],{"class":147},[127,39632,725],{"class":290},[127,39634,31363],{"class":154},[127,39636,39637],{"class":147},".block6(x)\n",[127,39639,39640,39642],{"class":129,"line":17468},[127,39641,15294],{"class":290},[127,39643,31749],{"class":147},[127,39645,39646],{"class":129,"line":17473},[127,39647,2942],{"emptyLinePlaceholder":606},[127,39649,39650],{"class":129,"line":33173},[127,39651,39652],{"class":133},"# 验证模型\n",[127,39654,39655,39657,39659,39661,39664],{"class":129,"line":33179},[127,39656,2075],{"class":290},[127,39658,31760],{"class":154},[127,39660,3491],{"class":290},[127,39662,39663],{"class":781},"'__main__'",[127,39665,4281],{"class":147},[127,39667,39668,39670,39672,39674,39676,39678,39680,39682,39684],{"class":129,"line":33185},[127,39669,31777],{"class":147},[127,39671,725],{"class":290},[127,39673,30991],{"class":147},[127,39675,31784],{"class":781},[127,39677,2247],{"class":290},[127,39679,31789],{"class":147},[127,39681,2244],{"class":290},[127,39683,31016],{"class":781},[127,39685,687],{"class":147},[127,39687,39688,39690],{"class":129,"line":33191},[127,39689,31839],{"class":154},[127,39691,31025],{"class":147},[127,39693,39694,39696,39698],{"class":129,"line":33197},[127,39695,31829],{"class":147},[127,39697,725],{"class":290},[127,39699,39700],{"class":147},"VGG16().to(device)\n",[127,39702,39703,39705,39707,39709,39711,39713,39715,39717],{"class":129,"line":33208},[127,39704,31839],{"class":154},[127,39706,31842],{"class":147},[127,39708,893],{"class":154},[127,39710,1053],{"class":147},[127,39712,32041],{"class":154},[127,39714,1053],{"class":147},[127,39716,32041],{"class":154},[127,39718,31855],{"class":147},[632,39720,39721],{"start":137},[635,39722,39723],{},"训练代码",[19,39725,39726],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39728,39729],{},"解决方式:",[19,39731,39732],{},"①权重初始化",[117,39734,39736],{"className":30918,"code":39735,"language":30920,"meta":122,"style":122},"# 权重初始化,保证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",[124,39737,39738,39743,39748,39760,39765,39773,39778,39791,39796,39810,39815,39824,39829,39838,39843,39848,39861,39866,39880],{"__ignoreMap":122},[127,39739,39740],{"class":129,"line":130},[127,39741,39742],{"class":133},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[127,39744,39745],{"class":129,"line":137},[127,39746,39747],{"class":133},"# 循环遍历模型\n",[127,39749,39750,39752,39754,39756,39758],{"class":129,"line":151},[127,39751,3567],{"class":290},[127,39753,39408],{"class":147},[127,39755,26584],{"class":290},[127,39757,39413],{"class":154},[127,39759,39416],{"class":147},[127,39761,39762],{"class":129,"line":167},[127,39763,39764],{"class":133},"    # print(m)\n",[127,39766,39767,39769,39771],{"class":129,"line":415},[127,39768,3643],{"class":290},[127,39770,39428],{"class":154},[127,39772,39431],{"class":147},[127,39774,39775],{"class":129,"line":421},[127,39776,39777],{"class":133},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[127,39779,39780,39783,39785,39787,39789],{"class":129,"line":1766},[127,39781,39782],{"class":147},"        nn.init.kaiming_normal_(m.weight,",[127,39784,39444],{"class":5758},[127,39786,725],{"class":290},[127,39788,39449],{"class":781},[127,39790,687],{"class":147},[127,39792,39793],{"class":129,"line":1856},[127,39794,39795],{"class":133},"        # 判断b参数是否存在\n",[127,39797,39798,39800,39802,39804,39806,39808],{"class":129,"line":1862},[127,39799,3039],{"class":290},[127,39801,39464],{"class":147},[127,39803,39467],{"class":290},[127,39805,39470],{"class":290},[127,39807,39473],{"class":154},[127,39809,4281],{"class":147},[127,39811,39812],{"class":129,"line":1874},[127,39813,39814],{"class":133},"            # 如果参数不存在的化初始化b=0\n",[127,39816,39817,39820,39822],{"class":129,"line":2155},[127,39818,39819],{"class":147},"            nn.init.constant_(m.bias,",[127,39821,867],{"class":154},[127,39823,687],{"class":147},[127,39825,39826],{"class":129,"line":2160},[127,39827,39828],{"class":133},"    # 全连接层初始化\n",[127,39830,39831,39834,39836],{"class":129,"line":2166},[127,39832,39833],{"class":290},"    elif",[127,39835,39428],{"class":154},[127,39837,39504],{"class":147},[127,39839,39840],{"class":129,"line":2171},[127,39841,39842],{"class":133},"        # 这个初始化方法是利用的是正太分布的方式\n",[127,39844,39845],{"class":129,"line":2185},[127,39846,39847],{"class":133},"        # 均值为0，方差为0.01\n",[127,39849,39850,39853,39855,39857,39859],{"class":129,"line":2190},[127,39851,39852],{"class":147},"        nn.init.normal_(m.weight,",[127,39854,867],{"class":154},[127,39856,1053],{"class":147},[127,39858,39526],{"class":154},[127,39860,687],{"class":147},[127,39862,39863],{"class":129,"line":2196},[127,39864,39865],{"class":133},"        # 初始化b参数\n",[127,39867,39868,39870,39872,39874,39876,39878],{"class":129,"line":2217},[127,39869,3039],{"class":290},[127,39871,39464],{"class":147},[127,39873,39467],{"class":290},[127,39875,39470],{"class":290},[127,39877,39473],{"class":154},[127,39879,4281],{"class":147},[127,39881,39882,39884,39886],{"class":129,"line":2222},[127,39883,39819],{"class":147},[127,39885,867],{"class":154},[127,39887,687],{"class":147},[19,39889,39890],{},"②尽可能地增加批次",[19,39892,39893],{},"训练完整代码：",[117,39895,39896],{"className":30918,"code":38439,"language":30920,"meta":122,"style":122},[124,39897,39898,39904,39914,39924,39934,39938,39954,39962,39980,39984,39988,39998,40034,40038,40074,40078,40106,40110,40114,40124,40160,40164,40200,40204,40232,40236,40240,40250,40286,40290,40326,40330,40366,40370,40398,40402,40406,40416,40452,40456,40492,40496,40532,40536,40564,40568,40572,40582,40618,40622,40658,40662,40698,40702,40730,40734,40738,40748,40752,40756,40760,40780,40784,40796,40800,40812,40816,40820,40824,40828,40840,40844,40852,40856,40868,40872,40886,40890,40898,40902,40910,40914,40918,40930,40934,40948,40956,40960,40964,40972,40982,40992,41002,41012,41022,41032,41038,41042,41046,41058,41078,41084,41092],{"__ignoreMap":122},[127,39899,39900,39902],{"class":129,"line":130},[127,39901,30932],{"class":290},[127,39903,30935],{"class":147},[127,39905,39906,39908,39910,39912],{"class":129,"line":137},[127,39907,31277],{"class":290},[127,39909,38454],{"class":147},[127,39911,30932],{"class":290},[127,39913,38459],{"class":147},[127,39915,39916,39918,39920,39922],{"class":129,"line":151},[127,39917,31277],{"class":290},[127,39919,31280],{"class":147},[127,39921,30932],{"class":290},[127,39923,31285],{"class":147},[127,39925,39926,39928,39930,39932],{"class":129,"line":167},[127,39927,31277],{"class":290},[127,39929,31297],{"class":147},[127,39931,30932],{"class":290},[127,39933,31302],{"class":147},[127,39935,39936],{"class":129,"line":415},[127,39937,2942],{"emptyLinePlaceholder":606},[127,39939,39940,39942,39944,39946,39948,39950,39952],{"class":129,"line":421},[127,39941,15236],{"class":290},[127,39943,38490],{"class":143},[127,39945,681],{"class":147},[127,39947,31318],{"class":143},[127,39949,1233],{"class":147},[127,39951,31323],{"class":143},[127,39953,31326],{"class":147},[127,39955,39956,39958,39960],{"class":129,"line":1766},[127,39957,31341],{"class":290},[127,39959,31344],{"class":154},[127,39961,31347],{"class":147},[127,39963,39964,39966,39968,39970,39972,39974,39976,39978],{"class":129,"line":1856},[127,39965,31357],{"class":154},[127,39967,681],{"class":147},[127,39969,38517],{"class":154},[127,39971,12977],{"class":147},[127,39973,31363],{"class":154},[127,39975,31366],{"class":147},[127,39977,31369],{"class":154},[127,39979,2518],{"class":147},[127,39981,39982],{"class":129,"line":1862},[127,39983,38532],{"class":133},[127,39985,39986],{"class":129,"line":1874},[127,39987,38537],{"class":133},[127,39989,39990,39992,39994,39996],{"class":129,"line":2155},[127,39991,31385],{"class":154},[127,39993,38544],{"class":147},[127,39995,725],{"class":290},[127,39997,38549],{"class":147},[127,39999,40000,40002,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032],{"class":129,"line":2160},[127,40001,38554],{"class":147},[127,40003,31396],{"class":5758},[127,40005,725],{"class":290},[127,40007,893],{"class":154},[127,40009,1053],{"class":147},[127,40011,31405],{"class":5758},[127,40013,725],{"class":290},[127,40015,879],{"class":154},[127,40017,1053],{"class":147},[127,40019,31414],{"class":5758},[127,40021,725],{"class":290},[127,40023,749],{"class":154},[127,40025,1053],{"class":147},[127,40027,31423],{"class":5758},[127,40029,725],{"class":290},[127,40031,893],{"class":154},[127,40033,38587],{"class":147},[127,40035,40036],{"class":129,"line":2166},[127,40037,38592],{"class":147},[127,40039,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070,40072],{"class":129,"line":2171},[127,40041,38554],{"class":147},[127,40043,31396],{"class":5758},[127,40045,725],{"class":290},[127,40047,879],{"class":154},[127,40049,1053],{"class":147},[127,40051,31405],{"class":5758},[127,40053,725],{"class":290},[127,40055,879],{"class":154},[127,40057,1053],{"class":147},[127,40059,31414],{"class":5758},[127,40061,725],{"class":290},[127,40063,749],{"class":154},[127,40065,1053],{"class":147},[127,40067,31423],{"class":5758},[127,40069,725],{"class":290},[127,40071,893],{"class":154},[127,40073,38587],{"class":147},[127,40075,40076],{"class":129,"line":2185},[127,40077,38592],{"class":147},[127,40079,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104],{"class":129,"line":2190},[127,40081,38637],{"class":147},[127,40083,31414],{"class":5758},[127,40085,725],{"class":290},[127,40087,530],{"class":154},[127,40089,1053],{"class":147},[127,40091,31469],{"class":5758},[127,40093,725],{"class":290},[127,40095,530],{"class":154},[127,40097,1053],{"class":147},[127,40099,31423],{"class":5758},[127,40101,725],{"class":290},[127,40103,867],{"class":154},[127,40105,687],{"class":147},[127,40107,40108],{"class":129,"line":2196},[127,40109,38666],{"class":147},[127,40111,40112],{"class":129,"line":2217},[127,40113,38671],{"class":133},[127,40115,40116,40118,40120,40122],{"class":129,"line":2222},[127,40117,31385],{"class":154},[127,40119,38678],{"class":147},[127,40121,725],{"class":290},[127,40123,38549],{"class":147},[127,40125,40126,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158],{"class":129,"line":2236},[127,40127,38554],{"class":147},[127,40129,31396],{"class":5758},[127,40131,725],{"class":290},[127,40133,879],{"class":154},[127,40135,1053],{"class":147},[127,40137,31405],{"class":5758},[127,40139,725],{"class":290},[127,40141,32610],{"class":154},[127,40143,1053],{"class":147},[127,40145,31414],{"class":5758},[127,40147,725],{"class":290},[127,40149,749],{"class":154},[127,40151,1053],{"class":147},[127,40153,31423],{"class":5758},[127,40155,725],{"class":290},[127,40157,893],{"class":154},[127,40159,38587],{"class":147},[127,40161,40162],{"class":129,"line":2241},[127,40163,38592],{"class":147},[127,40165,40166,40168,40170,40172,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198],{"class":129,"line":2270},[127,40167,38554],{"class":147},[127,40169,31396],{"class":5758},[127,40171,725],{"class":290},[127,40173,32610],{"class":154},[127,40175,1053],{"class":147},[127,40177,31405],{"class":5758},[127,40179,725],{"class":290},[127,40181,32610],{"class":154},[127,40183,1053],{"class":147},[127,40185,31414],{"class":5758},[127,40187,725],{"class":290},[127,40189,749],{"class":154},[127,40191,1053],{"class":147},[127,40193,31423],{"class":5758},[127,40195,725],{"class":290},[127,40197,893],{"class":154},[127,40199,38587],{"class":147},[127,40201,40202],{"class":129,"line":2275},[127,40203,38592],{"class":147},[127,40205,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230],{"class":129,"line":2292},[127,40207,38637],{"class":147},[127,40209,31414],{"class":5758},[127,40211,725],{"class":290},[127,40213,530],{"class":154},[127,40215,1053],{"class":147},[127,40217,31469],{"class":5758},[127,40219,725],{"class":290},[127,40221,530],{"class":154},[127,40223,1053],{"class":147},[127,40225,31423],{"class":5758},[127,40227,725],{"class":290},[127,40229,867],{"class":154},[127,40231,687],{"class":147},[127,40233,40234],{"class":129,"line":2297},[127,40235,38666],{"class":147},[127,40237,40238],{"class":129,"line":2302},[127,40239,38799],{"class":133},[127,40241,40242,40244,40246,40248],{"class":129,"line":2307},[127,40243,31385],{"class":154},[127,40245,38806],{"class":147},[127,40247,725],{"class":290},[127,40249,38549],{"class":147},[127,40251,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284],{"class":129,"line":2321},[127,40253,38554],{"class":147},[127,40255,31396],{"class":5758},[127,40257,725],{"class":290},[127,40259,32610],{"class":154},[127,40261,1053],{"class":147},[127,40263,31405],{"class":5758},[127,40265,725],{"class":290},[127,40267,35410],{"class":154},[127,40269,1053],{"class":147},[127,40271,31414],{"class":5758},[127,40273,725],{"class":290},[127,40275,749],{"class":154},[127,40277,1053],{"class":147},[127,40279,31423],{"class":5758},[127,40281,725],{"class":290},[127,40283,893],{"class":154},[127,40285,38587],{"class":147},[127,40287,40288],{"class":129,"line":2326},[127,40289,38592],{"class":147},[127,40291,40292,40294,40296,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324],{"class":129,"line":3119},[127,40293,38554],{"class":147},[127,40295,31396],{"class":5758},[127,40297,725],{"class":290},[127,40299,35410],{"class":154},[127,40301,1053],{"class":147},[127,40303,31405],{"class":5758},[127,40305,725],{"class":290},[127,40307,35410],{"class":154},[127,40309,1053],{"class":147},[127,40311,31414],{"class":5758},[127,40313,725],{"class":290},[127,40315,749],{"class":154},[127,40317,1053],{"class":147},[127,40319,31423],{"class":5758},[127,40321,725],{"class":290},[127,40323,893],{"class":154},[127,40325,38587],{"class":147},[127,40327,40328],{"class":129,"line":3133},[127,40329,38592],{"class":147},[127,40331,40332,40334,40336,40338,40340,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364],{"class":129,"line":3141},[127,40333,38554],{"class":147},[127,40335,31396],{"class":5758},[127,40337,725],{"class":290},[127,40339,35410],{"class":154},[127,40341,1053],{"class":147},[127,40343,31405],{"class":5758},[127,40345,725],{"class":290},[127,40347,35410],{"class":154},[127,40349,1053],{"class":147},[127,40351,31414],{"class":5758},[127,40353,725],{"class":290},[127,40355,749],{"class":154},[127,40357,1053],{"class":147},[127,40359,31423],{"class":5758},[127,40361,725],{"class":290},[127,40363,893],{"class":154},[127,40365,38587],{"class":147},[127,40367,40368],{"class":129,"line":3146},[127,40369,38592],{"class":147},[127,40371,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396],{"class":129,"line":3152},[127,40373,38637],{"class":147},[127,40375,31414],{"class":5758},[127,40377,725],{"class":290},[127,40379,530],{"class":154},[127,40381,1053],{"class":147},[127,40383,31469],{"class":5758},[127,40385,725],{"class":290},[127,40387,530],{"class":154},[127,40389,1053],{"class":147},[127,40391,31423],{"class":5758},[127,40393,725],{"class":290},[127,40395,867],{"class":154},[127,40397,687],{"class":147},[127,40399,40400],{"class":129,"line":3158},[127,40401,38666],{"class":147},[127,40403,40404],{"class":129,"line":3163},[127,40405,38967],{"class":133},[127,40407,40408,40410,40412,40414],{"class":129,"line":8490},[127,40409,31385],{"class":154},[127,40411,38974],{"class":147},[127,40413,725],{"class":290},[127,40415,38549],{"class":147},[127,40417,40418,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450],{"class":129,"line":8514},[127,40419,38554],{"class":147},[127,40421,31396],{"class":5758},[127,40423,725],{"class":290},[127,40425,35410],{"class":154},[127,40427,1053],{"class":147},[127,40429,31405],{"class":5758},[127,40431,725],{"class":290},[127,40433,38997],{"class":154},[127,40435,1053],{"class":147},[127,40437,31414],{"class":5758},[127,40439,725],{"class":290},[127,40441,749],{"class":154},[127,40443,1053],{"class":147},[127,40445,31423],{"class":5758},[127,40447,725],{"class":290},[127,40449,893],{"class":154},[127,40451,38587],{"class":147},[127,40453,40454],{"class":129,"line":8519},[127,40455,38592],{"class":147},[127,40457,40458,40460,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490],{"class":129,"line":8525},[127,40459,38554],{"class":147},[127,40461,31396],{"class":5758},[127,40463,725],{"class":290},[127,40465,38997],{"class":154},[127,40467,1053],{"class":147},[127,40469,31405],{"class":5758},[127,40471,725],{"class":290},[127,40473,38997],{"class":154},[127,40475,1053],{"class":147},[127,40477,31414],{"class":5758},[127,40479,725],{"class":290},[127,40481,749],{"class":154},[127,40483,1053],{"class":147},[127,40485,31423],{"class":5758},[127,40487,725],{"class":290},[127,40489,893],{"class":154},[127,40491,38587],{"class":147},[127,40493,40494],{"class":129,"line":8552},[127,40495,38592],{"class":147},[127,40497,40498,40500,40502,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530],{"class":129,"line":8557},[127,40499,38554],{"class":147},[127,40501,31396],{"class":5758},[127,40503,725],{"class":290},[127,40505,38997],{"class":154},[127,40507,1053],{"class":147},[127,40509,31405],{"class":5758},[127,40511,725],{"class":290},[127,40513,38997],{"class":154},[127,40515,1053],{"class":147},[127,40517,31414],{"class":5758},[127,40519,725],{"class":290},[127,40521,749],{"class":154},[127,40523,1053],{"class":147},[127,40525,31423],{"class":5758},[127,40527,725],{"class":290},[127,40529,893],{"class":154},[127,40531,38587],{"class":147},[127,40533,40534],{"class":129,"line":8563},[127,40535,38592],{"class":147},[127,40537,40538,40540,40542,40544,40546,40548,40550,40552,40554,40556,40558,40560,40562],{"class":129,"line":8575},[127,40539,38637],{"class":147},[127,40541,31414],{"class":5758},[127,40543,725],{"class":290},[127,40545,530],{"class":154},[127,40547,1053],{"class":147},[127,40549,31469],{"class":5758},[127,40551,725],{"class":290},[127,40553,530],{"class":154},[127,40555,1053],{"class":147},[127,40557,31423],{"class":5758},[127,40559,725],{"class":290},[127,40561,867],{"class":154},[127,40563,687],{"class":147},[127,40565,40566],{"class":129,"line":8587},[127,40567,38666],{"class":147},[127,40569,40570],{"class":129,"line":8599},[127,40571,39136],{"class":133},[127,40573,40574,40576,40578,40580],{"class":129,"line":10258},[127,40575,31385],{"class":154},[127,40577,39143],{"class":147},[127,40579,725],{"class":290},[127,40581,38549],{"class":147},[127,40583,40584,40586,40588,40590,40592,40594,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616],{"class":129,"line":10283},[127,40585,38554],{"class":147},[127,40587,31396],{"class":5758},[127,40589,725],{"class":290},[127,40591,38997],{"class":154},[127,40593,1053],{"class":147},[127,40595,31405],{"class":5758},[127,40597,725],{"class":290},[127,40599,38997],{"class":154},[127,40601,1053],{"class":147},[127,40603,31414],{"class":5758},[127,40605,725],{"class":290},[127,40607,749],{"class":154},[127,40609,1053],{"class":147},[127,40611,31423],{"class":5758},[127,40613,725],{"class":290},[127,40615,893],{"class":154},[127,40617,38587],{"class":147},[127,40619,40620],{"class":129,"line":10306},[127,40621,38592],{"class":147},[127,40623,40624,40626,40628,40630,40632,40634,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654,40656],{"class":129,"line":10330},[127,40625,38554],{"class":147},[127,40627,31396],{"class":5758},[127,40629,725],{"class":290},[127,40631,38997],{"class":154},[127,40633,1053],{"class":147},[127,40635,31405],{"class":5758},[127,40637,725],{"class":290},[127,40639,38997],{"class":154},[127,40641,1053],{"class":147},[127,40643,31414],{"class":5758},[127,40645,725],{"class":290},[127,40647,749],{"class":154},[127,40649,1053],{"class":147},[127,40651,31423],{"class":5758},[127,40653,725],{"class":290},[127,40655,893],{"class":154},[127,40657,38587],{"class":147},[127,40659,40660],{"class":129,"line":10335},[127,40661,38592],{"class":147},[127,40663,40664,40666,40668,40670,40672,40674,40676,40678,40680,40682,40684,40686,40688,40690,40692,40694,40696],{"class":129,"line":10340},[127,40665,38554],{"class":147},[127,40667,31396],{"class":5758},[127,40669,725],{"class":290},[127,40671,38997],{"class":154},[127,40673,1053],{"class":147},[127,40675,31405],{"class":5758},[127,40677,725],{"class":290},[127,40679,38997],{"class":154},[127,40681,1053],{"class":147},[127,40683,31414],{"class":5758},[127,40685,725],{"class":290},[127,40687,749],{"class":154},[127,40689,1053],{"class":147},[127,40691,31423],{"class":5758},[127,40693,725],{"class":290},[127,40695,893],{"class":154},[127,40697,38587],{"class":147},[127,40699,40700],{"class":129,"line":10345},[127,40701,38592],{"class":147},[127,40703,40704,40706,40708,40710,40712,40714,40716,40718,40720,40722,40724,40726,40728],{"class":129,"line":10354},[127,40705,38637],{"class":147},[127,40707,31414],{"class":5758},[127,40709,725],{"class":290},[127,40711,530],{"class":154},[127,40713,1053],{"class":147},[127,40715,31469],{"class":5758},[127,40717,725],{"class":290},[127,40719,530],{"class":154},[127,40721,1053],{"class":147},[127,40723,31423],{"class":5758},[127,40725,725],{"class":290},[127,40727,867],{"class":154},[127,40729,687],{"class":147},[127,40731,40732],{"class":129,"line":10359},[127,40733,38666],{"class":147},[127,40735,40736],{"class":129,"line":10365},[127,40737,39304],{"class":133},[127,40739,40740,40742,40744,40746],{"class":129,"line":10386},[127,40741,31385],{"class":154},[127,40743,39311],{"class":147},[127,40745,725],{"class":290},[127,40747,38549],{"class":147},[127,40749,40750],{"class":129,"line":10392},[127,40751,39320],{"class":133},[127,40753,40754],{"class":129,"line":10406},[127,40755,39325],{"class":133},[127,40757,40758],{"class":129,"line":10412},[127,40759,39330],{"class":147},[127,40761,40762,40764,40766,40768,40770,40772,40774,40776,40778],{"class":129,"line":10439},[127,40763,39335],{"class":147},[127,40765,1044],{"class":154},[127,40767,1130],{"class":290},[127,40769,1044],{"class":154},[127,40771,1130],{"class":290},[127,40773,38997],{"class":154},[127,40775,1053],{"class":147},[127,40777,35410],{"class":154},[127,40779,38587],{"class":147},[127,40781,40782],{"class":129,"line":10448},[127,40783,38592],{"class":147},[127,40785,40786,40788,40790,40792,40794],{"class":129,"line":10454},[127,40787,39335],{"class":147},[127,40789,35410],{"class":154},[127,40791,1053],{"class":147},[127,40793,32610],{"class":154},[127,40795,38587],{"class":147},[127,40797,40798],{"class":129,"line":10462},[127,40799,38592],{"class":147},[127,40801,40802,40804,40806,40808,40810],{"class":129,"line":10467},[127,40803,39335],{"class":147},[127,40805,32610],{"class":154},[127,40807,1053],{"class":147},[127,40809,1121],{"class":154},[127,40811,687],{"class":147},[127,40813,40814],{"class":129,"line":17145},[127,40815,38666],{"class":147},[127,40817,40818],{"class":129,"line":17151},[127,40819,2942],{"emptyLinePlaceholder":606},[127,40821,40822],{"class":129,"line":17174},[127,40823,39396],{"class":133},[127,40825,40826],{"class":129,"line":17180},[127,40827,39401],{"class":133},[127,40829,40830,40832,40834,40836,40838],{"class":129,"line":17203},[127,40831,3945],{"class":290},[127,40833,39408],{"class":147},[127,40835,26584],{"class":290},[127,40837,39413],{"class":154},[127,40839,39416],{"class":147},[127,40841,40842],{"class":129,"line":17217},[127,40843,39421],{"class":133},[127,40845,40846,40848,40850],{"class":129,"line":17237},[127,40847,5184],{"class":290},[127,40849,39428],{"class":154},[127,40851,39431],{"class":147},[127,40853,40854],{"class":129,"line":17243},[127,40855,39436],{"class":133},[127,40857,40858,40860,40862,40864,40866],{"class":129,"line":17254},[127,40859,39441],{"class":147},[127,40861,39444],{"class":5758},[127,40863,725],{"class":290},[127,40865,39449],{"class":781},[127,40867,687],{"class":147},[127,40869,40870],{"class":129,"line":17277},[127,40871,39456],{"class":133},[127,40873,40874,40876,40878,40880,40882,40884],{"class":129,"line":17299},[127,40875,39461],{"class":290},[127,40877,39464],{"class":147},[127,40879,39467],{"class":290},[127,40881,39470],{"class":290},[127,40883,39473],{"class":154},[127,40885,4281],{"class":147},[127,40887,40888],{"class":129,"line":17304},[127,40889,39480],{"class":133},[127,40891,40892,40894,40896],{"class":129,"line":17310},[127,40893,39485],{"class":147},[127,40895,867],{"class":154},[127,40897,687],{"class":147},[127,40899,40900],{"class":129,"line":17324},[127,40901,39494],{"class":133},[127,40903,40904,40906,40908],{"class":129,"line":17337},[127,40905,39499],{"class":290},[127,40907,39428],{"class":154},[127,40909,39504],{"class":147},[127,40911,40912],{"class":129,"line":17342},[127,40913,39509],{"class":133},[127,40915,40916],{"class":129,"line":17356},[127,40917,39514],{"class":133},[127,40919,40920,40922,40924,40926,40928],{"class":129,"line":17361},[127,40921,39519],{"class":147},[127,40923,867],{"class":154},[127,40925,1053],{"class":147},[127,40927,39526],{"class":154},[127,40929,687],{"class":147},[127,40931,40932],{"class":129,"line":17367},[127,40933,39533],{"class":133},[127,40935,40936,40938,40940,40942,40944,40946],{"class":129,"line":17372},[127,40937,39461],{"class":290},[127,40939,39464],{"class":147},[127,40941,39467],{"class":290},[127,40943,39470],{"class":290},[127,40945,39473],{"class":154},[127,40947,4281],{"class":147},[127,40949,40950,40952,40954],{"class":129,"line":17386},[127,40951,39485],{"class":147},[127,40953,867],{"class":154},[127,40955,687],{"class":147},[127,40957,40958],{"class":129,"line":17391},[127,40959,2942],{"emptyLinePlaceholder":606},[127,40961,40962],{"class":129,"line":17396},[127,40963,35705],{"class":133},[127,40965,40966,40968,40970],{"class":129,"line":17410},[127,40967,31341],{"class":290},[127,40969,31633],{"class":143},[127,40971,31636],{"class":147},[127,40973,40974,40976,40978,40980],{"class":129,"line":17422},[127,40975,31641],{"class":147},[127,40977,725],{"class":290},[127,40979,31363],{"class":154},[127,40981,39582],{"class":147},[127,40983,40984,40986,40988,40990],{"class":129,"line":17427},[127,40985,31641],{"class":147},[127,40987,725],{"class":290},[127,40989,31363],{"class":154},[127,40991,39593],{"class":147},[127,40993,40994,40996,40998,41000],{"class":129,"line":17440},[127,40995,31641],{"class":147},[127,40997,725],{"class":290},[127,40999,31363],{"class":154},[127,41001,39604],{"class":147},[127,41003,41004,41006,41008,41010],{"class":129,"line":17445},[127,41005,31641],{"class":147},[127,41007,725],{"class":290},[127,41009,31363],{"class":154},[127,41011,39615],{"class":147},[127,41013,41014,41016,41018,41020],{"class":129,"line":17450},[127,41015,31641],{"class":147},[127,41017,725],{"class":290},[127,41019,31363],{"class":154},[127,41021,39626],{"class":147},[127,41023,41024,41026,41028,41030],{"class":129,"line":17455},[127,41025,31641],{"class":147},[127,41027,725],{"class":290},[127,41029,31363],{"class":154},[127,41031,39637],{"class":147},[127,41033,41034,41036],{"class":129,"line":17468},[127,41035,15294],{"class":290},[127,41037,31749],{"class":147},[127,41039,41040],{"class":129,"line":17473},[127,41041,2942],{"emptyLinePlaceholder":606},[127,41043,41044],{"class":129,"line":33173},[127,41045,39652],{"class":133},[127,41047,41048,41050,41052,41054,41056],{"class":129,"line":33179},[127,41049,2075],{"class":290},[127,41051,31760],{"class":154},[127,41053,3491],{"class":290},[127,41055,39663],{"class":781},[127,41057,4281],{"class":147},[127,41059,41060,41062,41064,41066,41068,41070,41072,41074,41076],{"class":129,"line":33185},[127,41061,31777],{"class":147},[127,41063,725],{"class":290},[127,41065,30991],{"class":147},[127,41067,31784],{"class":781},[127,41069,2247],{"class":290},[127,41071,31789],{"class":147},[127,41073,2244],{"class":290},[127,41075,31016],{"class":781},[127,41077,687],{"class":147},[127,41079,41080,41082],{"class":129,"line":33191},[127,41081,31839],{"class":154},[127,41083,31025],{"class":147},[127,41085,41086,41088,41090],{"class":129,"line":33197},[127,41087,31829],{"class":147},[127,41089,725],{"class":290},[127,41091,39700],{"class":147},[127,41093,41094,41096,41098,41100,41102,41104,41106,41108],{"class":129,"line":33208},[127,41095,31839],{"class":154},[127,41097,31842],{"class":147},[127,41099,893],{"class":154},[127,41101,1053],{"class":147},[127,41103,32041],{"class":154},[127,41105,1053],{"class":147},[127,41107,32041],{"class":154},[127,41109,31855],{"class":147},[632,41111,41112],{"start":151},[635,41113,41114],{},"测试代码",[117,41116,41118],{"className":30918,"code":41117,"language":30920,"meta":122,"style":122},"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",[124,41119,41120,41126,41136,41146,41150,41160,41171,41175,41179,41183,41191,41207,41217,41233,41243,41257,41261,41271,41281,41291,41297,41301,41305,41313,41317,41333,41341,41345,41349,41357,41365,41369,41373,41377,41381,41387,41391,41401,41409,41417,41421,41425,41429,41437,41441,41457,41461,41465,41469,41481,41485,41497,41501,41505,41517,41521,41531,41535,41539,41551,41555,41564,41568,41572,41580,41584,41592,41596,41600,41604,41608,41612,41628,41636,41640,41644,41692,41698,41702,41712,41720,41728,41732,41736,41740,41744,41752,41756,41772,41776,41784,41792],{"__ignoreMap":122},[127,41121,41122,41124],{"class":129,"line":130},[127,41123,30932],{"class":290},[127,41125,30935],{"class":147},[127,41127,41128,41130,41132,41134],{"class":129,"line":137},[127,41129,30932],{"class":290},[127,41131,31955],{"class":147},[127,41133,31923],{"class":290},[127,41135,31960],{"class":147},[127,41137,41138,41140,41142,41144],{"class":129,"line":151},[127,41139,31277],{"class":290},[127,41141,31938],{"class":147},[127,41143,30932],{"class":290},[127,41145,31943],{"class":147},[127,41147,41148],{"class":129,"line":167},[127,41149,34462],{"class":133},[127,41151,41152,41154,41156,41158],{"class":129,"line":415},[127,41153,31277],{"class":290},[127,41155,31908],{"class":147},[127,41157,30932],{"class":290},[127,41159,31913],{"class":147},[127,41161,41162,41164,41166,41168],{"class":129,"line":421},[127,41163,31277],{"class":290},[127,41165,32454],{"class":147},[127,41167,30932],{"class":290},[127,41169,41170],{"class":154}," VGG16\n",[127,41172,41173],{"class":129,"line":1766},[127,41174,2942],{"emptyLinePlaceholder":606},[127,41176,41177],{"class":129,"line":1856},[127,41178,2942],{"emptyLinePlaceholder":606},[127,41180,41181],{"class":129,"line":1862},[127,41182,34491],{"class":133},[127,41184,41185,41187,41189],{"class":129,"line":1874},[127,41186,32487],{"class":290},[127,41188,34498],{"class":143},[127,41190,32493],{"class":147},[127,41192,41193,41195,41197,41199,41201,41203,41205],{"class":129,"line":2155},[127,41194,34505],{"class":147},[127,41196,725],{"class":290},[127,41198,31995],{"class":147},[127,41200,31998],{"class":5758},[127,41202,725],{"class":290},[127,41204,32003],{"class":781},[127,41206,32006],{"class":147},[127,41208,41209,41211,41213,41215],{"class":129,"line":2160},[127,41210,34522],{"class":5758},[127,41212,725],{"class":290},[127,41214,34527],{"class":154},[127,41216,32006],{"class":147},[127,41218,41219,41221,41223,41225,41227,41229,41231],{"class":129,"line":2166},[127,41220,34534],{"class":5758},[127,41222,725],{"class":290},[127,41224,32033],{"class":147},[127,41226,32036],{"class":5758},[127,41228,725],{"class":290},[127,41230,32041],{"class":154},[127,41232,32044],{"class":147},[127,41234,41235,41237,41239,41241],{"class":129,"line":2171},[127,41236,34551],{"class":5758},[127,41238,725],{"class":290},[127,41240,32016],{"class":154},[127,41242,687],{"class":147},[127,41244,41245,41247,41249,41251,41253,41255],{"class":129,"line":2185},[127,41246,34562],{"class":147},[127,41248,725],{"class":290},[127,41250,32074],{"class":147},[127,41252,32077],{"class":5758},[127,41254,725],{"class":290},[127,41256,34573],{"class":147},[127,41258,41259],{"class":129,"line":2190},[127,41260,34578],{"class":133},[127,41262,41263,41265,41267,41269],{"class":129,"line":2196},[127,41264,34583],{"class":5758},[127,41266,725],{"class":290},[127,41268,893],{"class":154},[127,41270,32006],{"class":147},[127,41272,41273,41275,41277,41279],{"class":129,"line":2217},[127,41274,34594],{"class":5758},[127,41276,725],{"class":290},[127,41278,32016],{"class":154},[127,41280,32006],{"class":147},[127,41282,41283,41285,41287,41289],{"class":129,"line":2222},[127,41284,34605],{"class":5758},[127,41286,725],{"class":290},[127,41288,867],{"class":154},[127,41290,687],{"class":147},[127,41292,41293,41295],{"class":129,"line":2236},[127,41294,4632],{"class":290},[127,41296,34618],{"class":147},[127,41298,41299],{"class":129,"line":2241},[127,41300,2942],{"emptyLinePlaceholder":606},[127,41302,41303],{"class":129,"line":2270},[127,41304,34627],{"class":133},[127,41306,41307,41309,41311],{"class":129,"line":2275},[127,41308,32487],{"class":290},[127,41310,34634],{"class":143},[127,41312,34637],{"class":147},[127,41314,41315],{"class":129,"line":2292},[127,41316,34642],{"class":133},[127,41318,41319,41321,41323,41325,41327,41329,41331],{"class":129,"line":2297},[127,41320,31777],{"class":147},[127,41322,725],{"class":290},[127,41324,31784],{"class":781},[127,41326,2247],{"class":290},[127,41328,31789],{"class":147},[127,41330,2244],{"class":290},[127,41332,34659],{"class":781},[127,41334,41335,41337,41339],{"class":129,"line":2302},[127,41336,31829],{"class":147},[127,41338,725],{"class":290},[127,41340,32829],{"class":147},[127,41342,41343],{"class":129,"line":2307},[127,41344,2942],{"emptyLinePlaceholder":606},[127,41346,41347],{"class":129,"line":2321},[127,41348,34676],{"class":133},[127,41350,41351,41353,41355],{"class":129,"line":2326},[127,41352,34681],{"class":147},[127,41354,725],{"class":290},[127,41356,32882],{"class":154},[127,41358,41359,41361,41363],{"class":129,"line":3119},[127,41360,34690],{"class":147},[127,41362,725],{"class":290},[127,41364,3627],{"class":154},[127,41366,41367],{"class":129,"line":3133},[127,41368,2942],{"emptyLinePlaceholder":606},[127,41370,41371],{"class":129,"line":3141},[127,41372,34703],{"class":133},[127,41374,41375],{"class":129,"line":3146},[127,41376,34708],{"class":133},[127,41378,41379],{"class":129,"line":3152},[127,41380,34713],{"class":133},[127,41382,41383,41385],{"class":129,"line":3158},[127,41384,34718],{"class":290},[127,41386,33424],{"class":147},[127,41388,41389],{"class":129,"line":3163},[127,41390,34725],{"class":133},[127,41392,41393,41395,41397,41399],{"class":129,"line":8490},[127,41394,3945],{"class":290},[127,41396,34732],{"class":147},[127,41398,26584],{"class":290},[127,41400,34737],{"class":147},[127,41402,41403,41405,41407],{"class":129,"line":8514},[127,41404,34742],{"class":147},[127,41406,725],{"class":290},[127,41408,34747],{"class":147},[127,41410,41411,41413,41415],{"class":129,"line":8519},[127,41412,34752],{"class":147},[127,41414,725],{"class":290},[127,41416,34757],{"class":147},[127,41418,41419],{"class":129,"line":8525},[127,41420,34762],{"class":133},[127,41422,41423],{"class":129,"line":8552},[127,41424,33415],{"class":147},[127,41426,41427],{"class":129,"line":8557},[127,41428,34771],{"class":133},[127,41430,41431,41433,41435],{"class":129,"line":8563},[127,41432,33200],{"class":147},[127,41434,725],{"class":290},[127,41436,34780],{"class":147},[127,41438,41439],{"class":129,"line":8575},[127,41440,34785],{"class":133},[127,41442,41443,41445,41447,41449,41451,41453,41455],{"class":129,"line":8587},[127,41444,33217],{"class":147},[127,41446,725],{"class":290},[127,41448,33222],{"class":147},[127,41450,33225],{"class":5758},[127,41452,725],{"class":290},[127,41454,893],{"class":154},[127,41456,687],{"class":147},[127,41458,41459],{"class":129,"line":8599},[127,41460,34806],{"class":133},[127,41462,41463],{"class":129,"line":10258},[127,41464,34811],{"class":133},[127,41466,41467],{"class":129,"line":10283},[127,41468,34816],{"class":133},[127,41470,41471,41473,41475,41477,41479],{"class":129,"line":10306},[127,41472,34821],{"class":147},[127,41474,10019],{"class":290},[127,41476,33327],{"class":147},[127,41478,3491],{"class":290},[127,41480,34830],{"class":147},[127,41482,41483],{"class":129,"line":10330},[127,41484,34835],{"class":133},[127,41486,41487,41489,41491,41493,41495],{"class":129,"line":10335},[127,41488,34840],{"class":147},[127,41490,10019],{"class":290},[127,41492,34845],{"class":147},[127,41494,867],{"class":154},[127,41496,687],{"class":147},[127,41498,41499],{"class":129,"line":10340},[127,41500,2942],{"emptyLinePlaceholder":606},[127,41502,41503],{"class":129,"line":10345},[127,41504,34858],{"class":133},[127,41506,41507,41509,41511,41513,41515],{"class":129,"line":10354},[127,41508,34863],{"class":147},[127,41510,725],{"class":290},[127,41512,34868],{"class":147},[127,41514,1259],{"class":290},[127,41516,34873],{"class":147},[127,41518,41519],{"class":129,"line":10359},[127,41520,34878],{"class":133},[127,41522,41523,41525,41527,41529],{"class":129,"line":10365},[127,41524,32991],{"class":154},[127,41526,681],{"class":147},[127,41528,34887],{"class":781},[127,41530,34890],{"class":147},[127,41532,41533],{"class":129,"line":10386},[127,41534,2942],{"emptyLinePlaceholder":606},[127,41536,41537],{"class":129,"line":10392},[127,41538,34899],{"class":133},[127,41540,41541,41543,41545,41547,41549],{"class":129,"line":10406},[127,41542,2075],{"class":290},[127,41544,31760],{"class":154},[127,41546,3491],{"class":290},[127,41548,31765],{"class":781},[127,41550,4281],{"class":147},[127,41552,41553],{"class":129,"line":10412},[127,41554,34916],{"class":133},[127,41556,41557,41559,41561],{"class":129,"line":10439},[127,41558,31829],{"class":147},[127,41560,725],{"class":290},[127,41562,41563],{"class":147},"VGG16()\n",[127,41565,41566],{"class":129,"line":10448},[127,41567,34929],{"class":133},[127,41569,41570],{"class":129,"line":10454},[127,41571,34934],{"class":133},[127,41573,41574,41576,41578],{"class":129,"line":10462},[127,41575,34939],{"class":147},[127,41577,34942],{"class":781},[127,41579,31037],{"class":147},[127,41581,41582],{"class":129,"line":10467},[127,41583,34949],{"class":133},[127,41585,41586,41588,41590],{"class":129,"line":17145},[127,41587,34562],{"class":147},[127,41589,725],{"class":290},[127,41591,34958],{"class":147},[127,41593,41594],{"class":129,"line":17151},[127,41595,34963],{"class":133},[127,41597,41598],{"class":129,"line":17174},[127,41599,34968],{"class":147},[127,41601,41602],{"class":129,"line":17180},[127,41603,2942],{"emptyLinePlaceholder":606},[127,41605,41606],{"class":129,"line":17203},[127,41607,34977],{"class":133},[127,41609,41610],{"class":129,"line":17217},[127,41611,34982],{"class":133},[127,41613,41614,41616,41618,41620,41622,41624,41626],{"class":129,"line":17237},[127,41615,31777],{"class":147},[127,41617,725],{"class":290},[127,41619,31784],{"class":781},[127,41621,2247],{"class":290},[127,41623,31789],{"class":147},[127,41625,2244],{"class":290},[127,41627,34659],{"class":781},[127,41629,41630,41632,41634],{"class":129,"line":17243},[127,41631,31829],{"class":147},[127,41633,725],{"class":290},[127,41635,32829],{"class":147},[127,41637,41638],{"class":129,"line":17254},[127,41639,35011],{"class":133},[127,41641,41642],{"class":129,"line":17277},[127,41643,35016],{"class":133},[127,41645,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676,41678,41680,41682,41684,41686,41688,41690],{"class":129,"line":17299},[127,41647,35021],{"class":147},[127,41649,725],{"class":290},[127,41651,1564],{"class":147},[127,41653,35028],{"class":781},[127,41655,1053],{"class":147},[127,41657,35033],{"class":781},[127,41659,1053],{"class":147},[127,41661,35038],{"class":781},[127,41663,1053],{"class":147},[127,41665,35043],{"class":781},[127,41667,1053],{"class":147},[127,41669,35048],{"class":781},[127,41671,1053],{"class":147},[127,41673,35053],{"class":781},[127,41675,1053],{"class":147},[127,41677,35058],{"class":781},[127,41679,1053],{"class":147},[127,41681,35063],{"class":781},[127,41683,1053],{"class":147},[127,41685,35068],{"class":781},[127,41687,1053],{"class":147},[127,41689,35073],{"class":781},[127,41691,33786],{"class":147},[127,41693,41694,41696],{"class":129,"line":17304},[127,41695,34718],{"class":290},[127,41697,33424],{"class":147},[127,41699,41700],{"class":129,"line":17310},[127,41701,35086],{"class":133},[127,41703,41704,41706,41708,41710],{"class":129,"line":17324},[127,41705,3945],{"class":290},[127,41707,35093],{"class":147},[127,41709,26584],{"class":290},[127,41711,34737],{"class":147},[127,41713,41714,41716,41718],{"class":129,"line":17337},[127,41715,33150],{"class":147},[127,41717,725],{"class":290},[127,41719,33155],{"class":147},[127,41721,41722,41724,41726],{"class":129,"line":17342},[127,41723,33165],{"class":147},[127,41725,725],{"class":290},[127,41727,33170],{"class":147},[127,41729,41730],{"class":129,"line":17356},[127,41731,2942],{"emptyLinePlaceholder":606},[127,41733,41734],{"class":129,"line":17361},[127,41735,35122],{"class":133},[127,41737,41738],{"class":129,"line":17367},[127,41739,33415],{"class":147},[127,41741,41742],{"class":129,"line":17372},[127,41743,35131],{"class":133},[127,41745,41746,41748,41750],{"class":129,"line":17386},[127,41747,33200],{"class":147},[127,41749,725],{"class":290},[127,41751,33205],{"class":147},[127,41753,41754],{"class":129,"line":17391},[127,41755,35144],{"class":133},[127,41757,41758,41760,41762,41764,41766,41768,41770],{"class":129,"line":17396},[127,41759,33217],{"class":147},[127,41761,725],{"class":290},[127,41763,33222],{"class":147},[127,41765,33225],{"class":5758},[127,41767,725],{"class":290},[127,41769,893],{"class":154},[127,41771,687],{"class":147},[127,41773,41774],{"class":129,"line":17410},[127,41775,35165],{"class":133},[127,41777,41778,41780,41782],{"class":129,"line":17422},[127,41779,35170],{"class":147},[127,41781,725],{"class":290},[127,41783,35175],{"class":147},[127,41785,41786,41788,41790],{"class":129,"line":17427},[127,41787,35180],{"class":147},[127,41789,725],{"class":290},[127,41791,35185],{"class":147},[127,41793,41794,41796,41798,41800,41802,41804,41806,41808],{"class":129,"line":17440},[127,41795,35190],{"class":154},[127,41797,681],{"class":147},[127,41799,35195],{"class":781},[127,41801,35198],{"class":147},[127,41803,35201],{"class":781},[127,41805,1053],{"class":147},[127,41807,35206],{"class":781},[127,41809,35209],{"class":147},[62,41811,41813],{"id":41812},"_23googlenet","2.3.GoogLeNet",[22539,41815,41817],{"id":41816},"_231原理","2.3.1.原理",[632,41819,41820],{},[635,41821,41822],{},"网络结构",[19,41824,41825],{},[23,41826],{"alt":122,"src":41827},"\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",[19,41829,41830],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41832,41833],{},[23,41834],{"alt":122,"src":41835},"\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",[19,41837,41838],{},[23,41839],{"alt":122,"src":41840},"\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",[19,41842,41843],{},[23,41844],{"alt":122,"src":41845},"\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",[632,41847,41848],{"start":137},[635,41849,41850],{},"1x1卷积的优点",[19,41852,41853],{},[23,41854],{"alt":122,"src":41855},"\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",[632,41857,41858],{"start":151},[635,41859,41860],{},"全局平均池化层优点",[19,41862,41863],{},[23,41864],{"alt":122,"src":41865},"\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",[19,41867,41868],{},[23,41869],{"alt":122,"src":41870},"\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",[632,41872,41873],{"start":167},[635,41874,41875],{},"参数详细描述",[19,41877,41878],{},[23,41879],{"alt":122,"src":41880},"\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",[19,41882,41883],{},[23,41884],{"alt":122,"src":41885},"\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",[19,41887,41888],{},[23,41889],{"alt":122,"src":41890},"\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",[19,41892,41893],{},[23,41894],{"alt":122,"src":41895},"\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",[19,41897,41898],{},[23,41899],{"alt":122,"src":41900},"\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",[19,41902,41903],{},[23,41904],{"alt":122,"src":41905},"\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",[19,41907,41908],{},[23,41909],{"alt":122,"src":41910},"\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",[19,41912,41913],{},[23,41914],{"alt":122,"src":41915},"\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",[19,41917,41918],{},[23,41919],{"alt":122,"src":41920},"\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",[19,41922,41923],{},[23,41924],{"alt":122,"src":41925},"\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",[19,41927,41928],{},[23,41929],{"alt":122,"src":41930},"\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",[19,41932,41933],{},[23,41934],{"alt":122,"src":41935},"\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",[19,41937,41938],{},[23,41939],{"alt":122,"src":41940},"\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",[19,41942,41943],{},[23,41944],{"alt":122,"src":41945},"\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",[19,41947,41948],{},[23,41949],{"alt":122,"src":41950},"\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",[19,41952,41953],{},[23,41954],{"alt":122,"src":41955},"\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",[19,41957,41958],{},[23,41959],{"alt":122,"src":41960},"\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",[19,41962,41963],{},[23,41964],{"alt":122,"src":41965},"\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",[19,41967,41968],{},[23,41969],{"alt":122,"src":41970},"\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",[19,41972,41973],{},[23,41974],{"alt":122,"src":41975},"\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",[19,41977,41978],{},[23,41979],{"alt":122,"src":41980},"\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",[22539,41982,41984],{"id":41983},"_232代码实现","2.3.2.代码实现",[632,41986,41987],{},[635,41988,31251],{},[19,41990,41991],{},"根据原理一步一步搭建即可",[117,41993,41995],{"className":30918,"code":41994,"language":30920,"meta":122,"style":122},"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",[124,41996,41997,42003,42013,42023,42027,42044,42053,42068,42078,42083,42116,42121,42158,42205,42210,42246,42293,42298,42303,42338,42370,42374,42382,42398,42422,42447,42468,42473,42488,42492,42496,42501,42518,42523,42532,42547,42558,42602,42606,42634,42638,42649,42677,42681,42718,42722,42750,42754,42765,42801,42833,42861,42865,42876,42910,42942,42974,43007,43041,43069,43073,43084,43117,43149,43163,43167,43180,43184,43189,43201,43209,43231,43236,43241,43246,43251,43256,43261,43275,43283,43292,43305,43320,43329,43333,43341,43352,43363,43374,43385,43396,43402,43406,43411,43423,43443,43452],{"__ignoreMap":122},[127,41998,41999,42001],{"class":129,"line":130},[127,42000,30932],{"class":290},[127,42002,30935],{"class":147},[127,42004,42005,42007,42009,42011],{"class":129,"line":137},[127,42006,31277],{"class":290},[127,42008,31280],{"class":147},[127,42010,30932],{"class":290},[127,42012,31285],{"class":147},[127,42014,42015,42017,42019,42021],{"class":129,"line":151},[127,42016,31277],{"class":290},[127,42018,31297],{"class":147},[127,42020,30932],{"class":290},[127,42022,31302],{"class":147},[127,42024,42025],{"class":129,"line":167},[127,42026,2942],{"emptyLinePlaceholder":606},[127,42028,42029,42031,42034,42036,42038,42040,42042],{"class":129,"line":415},[127,42030,15236],{"class":290},[127,42032,42033],{"class":143}," Inception",[127,42035,681],{"class":147},[127,42037,31318],{"class":143},[127,42039,1233],{"class":147},[127,42041,31323],{"class":143},[127,42043,31326],{"class":147},[127,42045,42046,42048,42050],{"class":129,"line":421},[127,42047,31341],{"class":290},[127,42049,31344],{"class":154},[127,42051,42052],{"class":147},"(self,in_channels,c1,c2,c3,c4):\n",[127,42054,42055,42057,42060,42062,42064,42066],{"class":129,"line":1766},[127,42056,31357],{"class":154},[127,42058,42059],{"class":147},"(Inception,",[127,42061,31363],{"class":154},[127,42063,31366],{"class":147},[127,42065,31369],{"class":154},[127,42067,2518],{"class":147},[127,42069,42070,42072,42074,42076],{"class":129,"line":1856},[127,42071,31385],{"class":154},[127,42073,35311],{"class":147},[127,42075,725],{"class":290},[127,42077,35316],{"class":147},[127,42079,42080],{"class":129,"line":1862},[127,42081,42082],{"class":133},"        # 路线1：定义1*1卷积\n",[127,42084,42085,42087,42090,42092,42094,42096,42098,42101,42103,42105,42108,42110,42112,42114],{"class":129,"line":1874},[127,42086,31385],{"class":154},[127,42088,42089],{"class":147},".p1_1",[127,42091,725],{"class":290},[127,42093,31393],{"class":147},[127,42095,31396],{"class":5758},[127,42097,725],{"class":290},[127,42099,42100],{"class":147},"in_channels,",[127,42102,31405],{"class":5758},[127,42104,725],{"class":290},[127,42106,42107],{"class":147},"c1,",[127,42109,31414],{"class":5758},[127,42111,725],{"class":290},[127,42113,893],{"class":154},[127,42115,687],{"class":147},[127,42117,42118],{"class":129,"line":2155},[127,42119,42120],{"class":133},"        # 路线2：定义1*1卷积和3*3\n",[127,42122,42123,42125,42128,42130,42132,42134,42136,42138,42140,42142,42145,42147,42150,42152,42154,42156],{"class":129,"line":2160},[127,42124,31385],{"class":154},[127,42126,42127],{"class":147},".p2_1",[127,42129,725],{"class":290},[127,42131,31393],{"class":147},[127,42133,31396],{"class":5758},[127,42135,725],{"class":290},[127,42137,42100],{"class":147},[127,42139,31405],{"class":5758},[127,42141,725],{"class":290},[127,42143,42144],{"class":147},"c2[",[127,42146,867],{"class":154},[127,42148,42149],{"class":147},"],",[127,42151,31414],{"class":5758},[127,42153,725],{"class":290},[127,42155,893],{"class":154},[127,42157,687],{"class":147},[127,42159,42160,42162,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203],{"class":129,"line":2166},[127,42161,31385],{"class":154},[127,42163,42164],{"class":147},".p2_2",[127,42166,725],{"class":290},[127,42168,31393],{"class":147},[127,42170,31396],{"class":5758},[127,42172,725],{"class":290},[127,42174,42144],{"class":147},[127,42176,867],{"class":154},[127,42178,42149],{"class":147},[127,42180,31405],{"class":5758},[127,42182,725],{"class":290},[127,42184,42144],{"class":147},[127,42186,893],{"class":154},[127,42188,42149],{"class":147},[127,42190,31414],{"class":5758},[127,42192,725],{"class":290},[127,42194,749],{"class":154},[127,42196,1053],{"class":147},[127,42198,31423],{"class":5758},[127,42200,725],{"class":290},[127,42202,893],{"class":154},[127,42204,687],{"class":147},[127,42206,42207],{"class":129,"line":2171},[127,42208,42209],{"class":133},"        # 路线3：定义1*1卷积和5*5\n",[127,42211,42212,42214,42217,42219,42221,42223,42225,42227,42229,42231,42234,42236,42238,42240,42242,42244],{"class":129,"line":2185},[127,42213,31385],{"class":154},[127,42215,42216],{"class":147},".p3_1",[127,42218,725],{"class":290},[127,42220,31393],{"class":147},[127,42222,31396],{"class":5758},[127,42224,725],{"class":290},[127,42226,42100],{"class":147},[127,42228,31405],{"class":5758},[127,42230,725],{"class":290},[127,42232,42233],{"class":147},"c3[",[127,42235,867],{"class":154},[127,42237,42149],{"class":147},[127,42239,31414],{"class":5758},[127,42241,725],{"class":290},[127,42243,893],{"class":154},[127,42245,687],{"class":147},[127,42247,42248,42250,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289,42291],{"class":129,"line":2190},[127,42249,31385],{"class":154},[127,42251,42252],{"class":147},".p3_2",[127,42254,725],{"class":290},[127,42256,31393],{"class":147},[127,42258,31396],{"class":5758},[127,42260,725],{"class":290},[127,42262,42233],{"class":147},[127,42264,867],{"class":154},[127,42266,42149],{"class":147},[127,42268,31405],{"class":5758},[127,42270,725],{"class":290},[127,42272,42233],{"class":147},[127,42274,893],{"class":154},[127,42276,42149],{"class":147},[127,42278,31414],{"class":5758},[127,42280,725],{"class":290},[127,42282,994],{"class":154},[127,42284,1053],{"class":147},[127,42286,31423],{"class":5758},[127,42288,725],{"class":290},[127,42290,530],{"class":154},[127,42292,687],{"class":147},[127,42294,42295],{"class":129,"line":2196},[127,42296,42297],{"class":133},"        # 路线4：定义3*3最大池化和1*1卷积\n",[127,42299,42300],{"class":129,"line":2217},[127,42301,42302],{"class":133},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[127,42304,42305,42307,42310,42312,42314,42316,42318,42320,42322,42324,42326,42328,42330,42332,42334,42336],{"class":129,"line":2222},[127,42306,31385],{"class":154},[127,42308,42309],{"class":147},".p4_1",[127,42311,725],{"class":290},[127,42313,35369],{"class":147},[127,42315,31414],{"class":5758},[127,42317,725],{"class":290},[127,42319,749],{"class":154},[127,42321,1053],{"class":147},[127,42323,31469],{"class":5758},[127,42325,725],{"class":290},[127,42327,893],{"class":154},[127,42329,1053],{"class":147},[127,42331,31423],{"class":5758},[127,42333,725],{"class":290},[127,42335,893],{"class":154},[127,42337,687],{"class":147},[127,42339,42340,42342,42345,42347,42349,42351,42353,42355,42357,42359,42362,42364,42366,42368],{"class":129,"line":2236},[127,42341,31385],{"class":154},[127,42343,42344],{"class":147},".p4_2",[127,42346,725],{"class":290},[127,42348,31393],{"class":147},[127,42350,31396],{"class":5758},[127,42352,725],{"class":290},[127,42354,42100],{"class":147},[127,42356,31405],{"class":5758},[127,42358,725],{"class":290},[127,42360,42361],{"class":147},"c4,",[127,42363,31414],{"class":5758},[127,42365,725],{"class":290},[127,42367,893],{"class":154},[127,42369,687],{"class":147},[127,42371,42372],{"class":129,"line":2241},[127,42373,2942],{"emptyLinePlaceholder":606},[127,42375,42376,42378,42380],{"class":129,"line":2270},[127,42377,31341],{"class":290},[127,42379,31633],{"class":143},[127,42381,31636],{"class":147},[127,42383,42384,42387,42389,42391,42393,42395],{"class":129,"line":2275},[127,42385,42386],{"class":147},"        p1",[127,42388,725],{"class":290},[127,42390,31363],{"class":154},[127,42392,35724],{"class":147},[127,42394,31363],{"class":154},[127,42396,42397],{"class":147},".p1_1(x))\n",[127,42399,42400,42402,42404,42406,42408,42410,42413,42415,42417,42419],{"class":129,"line":2292},[127,42401,7627],{"class":147},[127,42403,725],{"class":290},[127,42405,31363],{"class":154},[127,42407,35724],{"class":147},[127,42409,31363],{"class":154},[127,42411,42412],{"class":147},".p2_2(",[127,42414,31363],{"class":154},[127,42416,35724],{"class":147},[127,42418,31363],{"class":154},[127,42420,42421],{"class":147},".p2_1(x))))\n",[127,42423,42424,42427,42429,42431,42433,42435,42438,42440,42442,42444],{"class":129,"line":2297},[127,42425,42426],{"class":147},"        p3",[127,42428,725],{"class":290},[127,42430,31363],{"class":154},[127,42432,35724],{"class":147},[127,42434,31363],{"class":154},[127,42436,42437],{"class":147},".p3_2(",[127,42439,31363],{"class":154},[127,42441,35724],{"class":147},[127,42443,31363],{"class":154},[127,42445,42446],{"class":147},".p3_1(x))))\n",[127,42448,42449,42452,42454,42456,42458,42460,42463,42465],{"class":129,"line":2302},[127,42450,42451],{"class":147},"        p4",[127,42453,725],{"class":290},[127,42455,31363],{"class":154},[127,42457,35724],{"class":147},[127,42459,31363],{"class":154},[127,42461,42462],{"class":147},".p4_2(",[127,42464,31363],{"class":154},[127,42466,42467],{"class":147},".p4_1(x)))\n",[127,42469,42470],{"class":129,"line":2307},[127,42471,42472],{"class":133},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[127,42474,42475,42477,42480,42482,42484,42486],{"class":129,"line":2321},[127,42476,15294],{"class":290},[127,42478,42479],{"class":147}," torch.cat((p1,p2,p3,p4),",[127,42481,33225],{"class":5758},[127,42483,725],{"class":290},[127,42485,893],{"class":154},[127,42487,687],{"class":147},[127,42489,42490],{"class":129,"line":2326},[127,42491,2942],{"emptyLinePlaceholder":606},[127,42493,42494],{"class":129,"line":3119},[127,42495,2942],{"emptyLinePlaceholder":606},[127,42497,42498],{"class":129,"line":3133},[127,42499,42500],{"class":133},"# 搭建GoogLeNet网络\n",[127,42502,42503,42505,42508,42510,42512,42514,42516],{"class":129,"line":3141},[127,42504,15236],{"class":290},[127,42506,42507],{"class":143}," GoogLeNet",[127,42509,681],{"class":147},[127,42511,31318],{"class":143},[127,42513,1233],{"class":147},[127,42515,31323],{"class":143},[127,42517,31326],{"class":147},[127,42519,42520],{"class":129,"line":3146},[127,42521,42522],{"class":133},"    # 必须把Inception导入到里边\n",[127,42524,42525,42527,42529],{"class":129,"line":3152},[127,42526,31341],{"class":290},[127,42528,31344],{"class":154},[127,42530,42531],{"class":147},"(self,Inception):\n",[127,42533,42534,42536,42539,42541,42543,42545],{"class":129,"line":3158},[127,42535,31357],{"class":154},[127,42537,42538],{"class":147},"(GoogLeNet,",[127,42540,31363],{"class":154},[127,42542,31366],{"class":147},[127,42544,31369],{"class":154},[127,42546,2518],{"class":147},[127,42548,42549,42551,42554,42556],{"class":129,"line":3163},[127,42550,31385],{"class":154},[127,42552,42553],{"class":147},".b1",[127,42555,725],{"class":290},[127,42557,38549],{"class":147},[127,42559,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600],{"class":129,"line":8490},[127,42561,38554],{"class":147},[127,42563,31396],{"class":5758},[127,42565,725],{"class":290},[127,42567,893],{"class":154},[127,42569,1053],{"class":147},[127,42571,31405],{"class":5758},[127,42573,725],{"class":290},[127,42575,879],{"class":154},[127,42577,1053],{"class":147},[127,42579,31414],{"class":5758},[127,42581,725],{"class":290},[127,42583,1044],{"class":154},[127,42585,1053],{"class":147},[127,42587,31469],{"class":5758},[127,42589,725],{"class":290},[127,42591,530],{"class":154},[127,42593,1053],{"class":147},[127,42595,31423],{"class":5758},[127,42597,725],{"class":290},[127,42599,749],{"class":154},[127,42601,38587],{"class":147},[127,42603,42604],{"class":129,"line":8514},[127,42605,38592],{"class":147},[127,42607,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626,42628,42630,42632],{"class":129,"line":8519},[127,42609,38637],{"class":147},[127,42611,31414],{"class":5758},[127,42613,725],{"class":290},[127,42615,749],{"class":154},[127,42617,1053],{"class":147},[127,42619,31469],{"class":5758},[127,42621,725],{"class":290},[127,42623,530],{"class":154},[127,42625,1053],{"class":147},[127,42627,31423],{"class":5758},[127,42629,725],{"class":290},[127,42631,893],{"class":154},[127,42633,687],{"class":147},[127,42635,42636],{"class":129,"line":8525},[127,42637,38666],{"class":147},[127,42639,42640,42642,42645,42647],{"class":129,"line":8552},[127,42641,31385],{"class":154},[127,42643,42644],{"class":147},".b2",[127,42646,725],{"class":290},[127,42648,38549],{"class":147},[127,42650,42651,42653,42655,42657,42659,42661,42663,42665,42667,42669,42671,42673,42675],{"class":129,"line":8557},[127,42652,38554],{"class":147},[127,42654,31396],{"class":5758},[127,42656,725],{"class":290},[127,42658,879],{"class":154},[127,42660,1053],{"class":147},[127,42662,31405],{"class":5758},[127,42664,725],{"class":290},[127,42666,879],{"class":154},[127,42668,1053],{"class":147},[127,42670,31414],{"class":5758},[127,42672,725],{"class":290},[127,42674,893],{"class":154},[127,42676,38587],{"class":147},[127,42678,42679],{"class":129,"line":8563},[127,42680,38592],{"class":147},[127,42682,42683,42685,42687,42689,42691,42693,42695,42697,42700,42702,42704,42706,42708,42710,42712,42714,42716],{"class":129,"line":8575},[127,42684,38554],{"class":147},[127,42686,31396],{"class":5758},[127,42688,725],{"class":290},[127,42690,879],{"class":154},[127,42692,1053],{"class":147},[127,42694,31405],{"class":5758},[127,42696,725],{"class":290},[127,42698,42699],{"class":154},"192",[127,42701,1053],{"class":147},[127,42703,31414],{"class":5758},[127,42705,725],{"class":290},[127,42707,749],{"class":154},[127,42709,1053],{"class":147},[127,42711,31423],{"class":5758},[127,42713,725],{"class":290},[127,42715,893],{"class":154},[127,42717,38587],{"class":147},[127,42719,42720],{"class":129,"line":8587},[127,42721,38592],{"class":147},[127,42723,42724,42726,42728,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748],{"class":129,"line":8599},[127,42725,38637],{"class":147},[127,42727,31414],{"class":5758},[127,42729,725],{"class":290},[127,42731,749],{"class":154},[127,42733,1053],{"class":147},[127,42735,31469],{"class":5758},[127,42737,725],{"class":290},[127,42739,530],{"class":154},[127,42741,1053],{"class":147},[127,42743,31423],{"class":5758},[127,42745,725],{"class":290},[127,42747,893],{"class":154},[127,42749,687],{"class":147},[127,42751,42752],{"class":129,"line":10258},[127,42753,38666],{"class":147},[127,42755,42756,42758,42761,42763],{"class":129,"line":10283},[127,42757,31385],{"class":154},[127,42759,42760],{"class":147},".b3",[127,42762,725],{"class":290},[127,42764,38549],{"class":147},[127,42766,42767,42770,42772,42774,42776,42779,42781,42783,42785,42788,42790,42792,42794,42797,42799],{"class":129,"line":10306},[127,42768,42769],{"class":147},"            Inception(",[127,42771,42699],{"class":154},[127,42773,1053],{"class":147},[127,42775,879],{"class":154},[127,42777,42778],{"class":147},",(",[127,42780,885],{"class":154},[127,42782,1053],{"class":147},[127,42784,32610],{"class":154},[127,42786,42787],{"class":147},"),(",[127,42789,287],{"class":154},[127,42791,1053],{"class":147},[127,42793,873],{"class":154},[127,42795,42796],{"class":147},"),",[127,42798,873],{"class":154},[127,42800,38587],{"class":147},[127,42802,42803,42805,42807,42809,42811,42813,42815,42817,42819,42821,42823,42825,42827,42829,42831],{"class":129,"line":10330},[127,42804,42769],{"class":147},[127,42806,35410],{"class":154},[127,42808,1053],{"class":147},[127,42810,32610],{"class":154},[127,42812,42778],{"class":147},[127,42814,32610],{"class":154},[127,42816,1053],{"class":147},[127,42818,42699],{"class":154},[127,42820,42787],{"class":147},[127,42822,873],{"class":154},[127,42824,1053],{"class":147},[127,42826,885],{"class":154},[127,42828,42796],{"class":147},[127,42830,879],{"class":154},[127,42832,38587],{"class":147},[127,42834,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859],{"class":129,"line":10335},[127,42836,38637],{"class":147},[127,42838,31414],{"class":5758},[127,42840,725],{"class":290},[127,42842,749],{"class":154},[127,42844,1053],{"class":147},[127,42846,31469],{"class":5758},[127,42848,725],{"class":290},[127,42850,530],{"class":154},[127,42852,1053],{"class":147},[127,42854,31423],{"class":5758},[127,42856,725],{"class":290},[127,42858,893],{"class":154},[127,42860,687],{"class":147},[127,42862,42863],{"class":129,"line":10340},[127,42864,38666],{"class":147},[127,42866,42867,42869,42872,42874],{"class":129,"line":10345},[127,42868,31385],{"class":154},[127,42870,42871],{"class":147},".b4",[127,42873,725],{"class":290},[127,42875,38549],{"class":147},[127,42877,42878,42880,42883,42885,42887,42889,42891,42893,42896,42898,42900,42902,42904,42906,42908],{"class":129,"line":10354},[127,42879,42769],{"class":147},[127,42881,42882],{"class":154},"480",[127,42884,1053],{"class":147},[127,42886,42699],{"class":154},[127,42888,42778],{"class":147},[127,42890,885],{"class":154},[127,42892,1053],{"class":147},[127,42894,42895],{"class":154},"208",[127,42897,42787],{"class":147},[127,42899,287],{"class":154},[127,42901,1053],{"class":147},[127,42903,1281],{"class":154},[127,42905,42796],{"class":147},[127,42907,879],{"class":154},[127,42909,38587],{"class":147},[127,42911,42912,42914,42916,42918,42920,42922,42924,42926,42928,42930,42932,42934,42936,42938,42940],{"class":129,"line":10359},[127,42913,42769],{"class":147},[127,42915,38997],{"class":154},[127,42917,1053],{"class":147},[127,42919,21589],{"class":154},[127,42921,42778],{"class":147},[127,42923,1292],{"class":154},[127,42925,1053],{"class":147},[127,42927,32041],{"class":154},[127,42929,42787],{"class":147},[127,42931,1474],{"class":154},[127,42933,1053],{"class":147},[127,42935,879],{"class":154},[127,42937,42796],{"class":147},[127,42939,879],{"class":154},[127,42941,38587],{"class":147},[127,42943,42944,42946,42948,42950,42952,42954,42956,42958,42960,42962,42964,42966,42968,42970,42972],{"class":129,"line":10365},[127,42945,42769],{"class":147},[127,42947,38997],{"class":154},[127,42949,1053],{"class":147},[127,42951,32610],{"class":154},[127,42953,42778],{"class":147},[127,42955,32610],{"class":154},[127,42957,1053],{"class":147},[127,42959,35410],{"class":154},[127,42961,42787],{"class":147},[127,42963,1474],{"class":154},[127,42965,1053],{"class":147},[127,42967,879],{"class":154},[127,42969,42796],{"class":147},[127,42971,879],{"class":154},[127,42973,38587],{"class":147},[127,42975,42976,42978,42980,42982,42984,42986,42988,42990,42993,42995,42997,42999,43001,43003,43005],{"class":129,"line":10386},[127,42977,42769],{"class":147},[127,42979,38997],{"class":154},[127,42981,1053],{"class":147},[127,42983,1292],{"class":154},[127,42985,42778],{"class":147},[127,42987,32610],{"class":154},[127,42989,1053],{"class":147},[127,42991,42992],{"class":154},"288",[127,42994,42787],{"class":147},[127,42996,873],{"class":154},[127,42998,1053],{"class":147},[127,43000,879],{"class":154},[127,43002,42796],{"class":147},[127,43004,879],{"class":154},[127,43006,38587],{"class":147},[127,43008,43009,43011,43014,43016,43018,43020,43022,43024,43027,43029,43031,43033,43035,43037,43039],{"class":129,"line":10392},[127,43010,42769],{"class":147},[127,43012,43013],{"class":154},"528",[127,43015,1053],{"class":147},[127,43017,35410],{"class":154},[127,43019,42778],{"class":147},[127,43021,21589],{"class":154},[127,43023,1053],{"class":147},[127,43025,43026],{"class":154},"320",[127,43028,42787],{"class":147},[127,43030,873],{"class":154},[127,43032,1053],{"class":147},[127,43034,32610],{"class":154},[127,43036,42796],{"class":147},[127,43038,32610],{"class":154},[127,43040,38587],{"class":147},[127,43042,43043,43045,43047,43049,43051,43053,43055,43057,43059,43061,43063,43065,43067],{"class":129,"line":10406},[127,43044,38637],{"class":147},[127,43046,31414],{"class":5758},[127,43048,725],{"class":290},[127,43050,749],{"class":154},[127,43052,1053],{"class":147},[127,43054,31469],{"class":5758},[127,43056,725],{"class":290},[127,43058,530],{"class":154},[127,43060,1053],{"class":147},[127,43062,31423],{"class":5758},[127,43064,725],{"class":290},[127,43066,893],{"class":154},[127,43068,687],{"class":147},[127,43070,43071],{"class":129,"line":10412},[127,43072,38666],{"class":147},[127,43074,43075,43077,43080,43082],{"class":129,"line":10439},[127,43076,31385],{"class":154},[127,43078,43079],{"class":147},".b5",[127,43081,725],{"class":290},[127,43083,38549],{"class":147},[127,43085,43086,43088,43091,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115],{"class":129,"line":10448},[127,43087,42769],{"class":147},[127,43089,43090],{"class":154},"832",[127,43092,1053],{"class":147},[127,43094,35410],{"class":154},[127,43096,42778],{"class":147},[127,43098,21589],{"class":154},[127,43100,1053],{"class":147},[127,43102,43026],{"class":154},[127,43104,42787],{"class":147},[127,43106,873],{"class":154},[127,43108,1053],{"class":147},[127,43110,32610],{"class":154},[127,43112,42796],{"class":147},[127,43114,32610],{"class":154},[127,43116,38587],{"class":147},[127,43118,43119,43121,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147],{"class":129,"line":10454},[127,43120,42769],{"class":147},[127,43122,43090],{"class":154},[127,43124,1053],{"class":147},[127,43126,35480],{"class":154},[127,43128,42778],{"class":147},[127,43130,42699],{"class":154},[127,43132,1053],{"class":147},[127,43134,35480],{"class":154},[127,43136,42787],{"class":147},[127,43138,1281],{"class":154},[127,43140,1053],{"class":147},[127,43142,32610],{"class":154},[127,43144,42796],{"class":147},[127,43146,32610],{"class":154},[127,43148,38587],{"class":147},[127,43150,43151,43154,43156,43158,43160],{"class":129,"line":10462},[127,43152,43153],{"class":147},"            nn.AdaptiveAvgPool2d((",[127,43155,893],{"class":154},[127,43157,1053],{"class":147},[127,43159,893],{"class":154},[127,43161,43162],{"class":147},")),\n",[127,43164,43165],{"class":129,"line":10467},[127,43166,39330],{"class":147},[127,43168,43169,43171,43174,43176,43178],{"class":129,"line":17145},[127,43170,39335],{"class":147},[127,43172,43173],{"class":154},"1024",[127,43175,1053],{"class":147},[127,43177,1121],{"class":154},[127,43179,687],{"class":147},[127,43181,43182],{"class":129,"line":17151},[127,43183,38666],{"class":147},[127,43185,43186],{"class":129,"line":17174},[127,43187,43188],{"class":133},"        # 对模型参数初始化\n",[127,43190,43191,43193,43195,43197,43199],{"class":129,"line":17180},[127,43192,3945],{"class":290},[127,43194,39408],{"class":147},[127,43196,26584],{"class":290},[127,43198,39413],{"class":154},[127,43200,39416],{"class":147},[127,43202,43203,43205,43207],{"class":129,"line":17203},[127,43204,5184],{"class":290},[127,43206,39428],{"class":154},[127,43208,39431],{"class":147},[127,43210,43211,43213,43216,43218,43221,43223,43225,43227,43229],{"class":129,"line":17217},[127,43212,39441],{"class":147},[127,43214,43215],{"class":5758},"mode",[127,43217,725],{"class":290},[127,43219,43220],{"class":781},"'fan_out'",[127,43222,1053],{"class":147},[127,43224,39444],{"class":5758},[127,43226,725],{"class":290},[127,43228,39449],{"class":781},[127,43230,687],{"class":147},[127,43232,43233],{"class":129,"line":17237},[127,43234,43235],{"class":133},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[127,43237,43238],{"class":129,"line":17243},[127,43239,43240],{"class":133},"                # ② mode = 'fan_out'决定使用的fan值：\n",[127,43242,43243],{"class":129,"line":17254},[127,43244,43245],{"class":133},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[127,43247,43248],{"class":129,"line":17277},[127,43249,43250],{"class":133},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[127,43252,43253],{"class":129,"line":17299},[127,43254,43255],{"class":133},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[127,43257,43258],{"class":129,"line":17304},[127,43259,43260],{"class":133},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[127,43262,43263,43265,43267,43269,43271,43273],{"class":129,"line":17310},[127,43264,39461],{"class":290},[127,43266,39464],{"class":147},[127,43268,39467],{"class":290},[127,43270,39470],{"class":290},[127,43272,39473],{"class":154},[127,43274,4281],{"class":147},[127,43276,43277,43279,43281],{"class":129,"line":17324},[127,43278,39485],{"class":147},[127,43280,867],{"class":154},[127,43282,687],{"class":147},[127,43284,43285,43288,43290],{"class":129,"line":17337},[127,43286,43287],{"class":290},"                elif",[127,43289,39428],{"class":154},[127,43291,39504],{"class":147},[127,43293,43294,43297,43299,43301,43303],{"class":129,"line":17342},[127,43295,43296],{"class":147},"                    nn.init.normal_(m.weight,",[127,43298,867],{"class":154},[127,43300,1053],{"class":147},[127,43302,39526],{"class":154},[127,43304,687],{"class":147},[127,43306,43307,43310,43312,43314,43316,43318],{"class":129,"line":17356},[127,43308,43309],{"class":290},"                    if",[127,43311,39464],{"class":147},[127,43313,39467],{"class":290},[127,43315,39470],{"class":290},[127,43317,39473],{"class":154},[127,43319,4281],{"class":147},[127,43321,43322,43325,43327],{"class":129,"line":17361},[127,43323,43324],{"class":147},"                        nn.init.constant_(m.bias,",[127,43326,867],{"class":154},[127,43328,687],{"class":147},[127,43330,43331],{"class":129,"line":17367},[127,43332,35705],{"class":133},[127,43334,43335,43337,43339],{"class":129,"line":17372},[127,43336,31341],{"class":290},[127,43338,31633],{"class":143},[127,43340,31636],{"class":147},[127,43342,43343,43345,43347,43349],{"class":129,"line":17386},[127,43344,31641],{"class":147},[127,43346,725],{"class":290},[127,43348,31363],{"class":154},[127,43350,43351],{"class":147},".b1(x)\n",[127,43353,43354,43356,43358,43360],{"class":129,"line":17391},[127,43355,31641],{"class":147},[127,43357,725],{"class":290},[127,43359,31363],{"class":154},[127,43361,43362],{"class":147},".b2(x)\n",[127,43364,43365,43367,43369,43371],{"class":129,"line":17396},[127,43366,31641],{"class":147},[127,43368,725],{"class":290},[127,43370,31363],{"class":154},[127,43372,43373],{"class":147},".b3(x)\n",[127,43375,43376,43378,43380,43382],{"class":129,"line":17410},[127,43377,31641],{"class":147},[127,43379,725],{"class":290},[127,43381,31363],{"class":154},[127,43383,43384],{"class":147},".b4(x)\n",[127,43386,43387,43389,43391,43393],{"class":129,"line":17422},[127,43388,31641],{"class":147},[127,43390,725],{"class":290},[127,43392,31363],{"class":154},[127,43394,43395],{"class":147},".b5(x)\n",[127,43397,43398,43400],{"class":129,"line":17427},[127,43399,15294],{"class":290},[127,43401,31749],{"class":147},[127,43403,43404],{"class":129,"line":17440},[127,43405,2942],{"emptyLinePlaceholder":606},[127,43407,43408],{"class":129,"line":17445},[127,43409,43410],{"class":133},"# 模型展示\n",[127,43412,43413,43415,43417,43419,43421],{"class":129,"line":17450},[127,43414,2075],{"class":290},[127,43416,31760],{"class":154},[127,43418,3491],{"class":290},[127,43420,31765],{"class":781},[127,43422,4281],{"class":147},[127,43424,43425,43427,43429,43431,43433,43435,43437,43439,43441],{"class":129,"line":17455},[127,43426,31777],{"class":147},[127,43428,725],{"class":290},[127,43430,30991],{"class":147},[127,43432,31784],{"class":781},[127,43434,2247],{"class":290},[127,43436,31789],{"class":147},[127,43438,2244],{"class":290},[127,43440,31016],{"class":781},[127,43442,687],{"class":147},[127,43444,43445,43447,43449],{"class":129,"line":17468},[127,43446,31829],{"class":147},[127,43448,725],{"class":290},[127,43450,43451],{"class":147},"GoogLeNet(Inception).to(device)\n",[127,43453,43454,43456,43458,43460,43462,43464,43466,43468],{"class":129,"line":17473},[127,43455,31839],{"class":154},[127,43457,31842],{"class":147},[127,43459,893],{"class":154},[127,43461,1053],{"class":147},[127,43463,32041],{"class":154},[127,43465,1053],{"class":147},[127,43467,32041],{"class":154},[127,43469,31855],{"class":147},[632,43471,43472],{"start":137},[635,43473,39723],{},[117,43475,43477],{"className":30918,"code":43476,"language":30920,"meta":122,"style":122},"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",[124,43478,43479,43485,43491,43501,43507,43517,43527,43537,43547,43557,43561,43572,43582,43586,43590,43594,43602,43614,43624,43640,43650,43682,43696,43706,43716,43720,43730,43744,43754,43764,43774,43780,43784,43788,43792,43796,43800,43808,43828,43832,43836,43840,43844,43848,43864,43868,43872,43880,43884,43888,43896,43900,43904,43908,43916,43920,43924,43928,43932,43940,43944,43952,43956,43964,43968,43976,43980,43988,43992,43996,44004,44008,44012,44016,44028,44052,44066,44070,44074,44078,44086,44090,44098,44102,44110,44114,44122,44126,44134,44138,44146,44150,44162,44166,44174,44178,44186,44190,44194,44198,44202,44210,44214,44230,44234,44242,44246,44250,44254,44258,44262,44266,44270,44286,44290,44302,44306,44318,44322,44334,44338,44346,44350,44358,44362,44366,44370,44376,44380,44388,44392,44408,44412,44420,44424,44440,44452,44456,44468,44472,44476,44484,44488,44492,44500,44504,44512,44516,44524,44528,44532,44574,44616,44620,44624,44640,44644,44660,44664,44668,44676,44680,44684,44696,44734,44738,44742,44750,44754,44768,44778,44784,44790,44796,44802,44806,44810,44816,44820,44824,44832,44836,44854,44858,44862,44866,44882,44886,44890,44894,44898,44902,44922,44942,44946,44950,44954,44962,44970,44974,44990,45010,45030,45034,45038,45046,45054,45058,45062,45066,45078,45082,45092,45100,45117],{"__ignoreMap":122},[127,43480,43481,43483],{"class":129,"line":130},[127,43482,30932],{"class":290},[127,43484,32362],{"class":147},[127,43486,43487,43489],{"class":129,"line":137},[127,43488,30932],{"class":290},[127,43490,32369],{"class":147},[127,43492,43493,43495,43497,43499],{"class":129,"line":151},[127,43494,30932],{"class":290},[127,43496,32380],{"class":147},[127,43498,31923],{"class":290},[127,43500,32385],{"class":147},[127,43502,43503,43505],{"class":129,"line":167},[127,43504,30932],{"class":290},[127,43506,30935],{"class":147},[127,43508,43509,43511,43513,43515],{"class":129,"line":415},[127,43510,31277],{"class":290},[127,43512,31955],{"class":147},[127,43514,30932],{"class":290},[127,43516,32402],{"class":147},[127,43518,43519,43521,43523,43525],{"class":129,"line":421},[127,43520,31277],{"class":290},[127,43522,31908],{"class":147},[127,43524,30932],{"class":290},[127,43526,31913],{"class":147},[127,43528,43529,43531,43533,43535],{"class":129,"line":1766},[127,43530,31277],{"class":290},[127,43532,31938],{"class":147},[127,43534,30932],{"class":290},[127,43536,31943],{"class":147},[127,43538,43539,43541,43543,43545],{"class":129,"line":1856},[127,43540,30932],{"class":290},[127,43542,31955],{"class":147},[127,43544,31923],{"class":290},[127,43546,31960],{"class":147},[127,43548,43549,43551,43553,43555],{"class":129,"line":1862},[127,43550,30932],{"class":290},[127,43552,31972],{"class":147},[127,43554,31923],{"class":290},[127,43556,31977],{"class":147},[127,43558,43559],{"class":129,"line":1874},[127,43560,32447],{"class":133},[127,43562,43563,43565,43567,43569],{"class":129,"line":2155},[127,43564,31277],{"class":290},[127,43566,32454],{"class":147},[127,43568,30932],{"class":290},[127,43570,43571],{"class":147}," GoogLeNet, Inception\n",[127,43573,43574,43576,43578,43580],{"class":129,"line":2160},[127,43575,31277],{"class":290},[127,43577,31280],{"class":147},[127,43579,30932],{"class":290},[127,43581,31285],{"class":147},[127,43583,43584],{"class":129,"line":2166},[127,43585,2942],{"emptyLinePlaceholder":606},[127,43587,43588],{"class":129,"line":2171},[127,43589,2942],{"emptyLinePlaceholder":606},[127,43591,43592],{"class":129,"line":2185},[127,43593,32482],{"class":133},[127,43595,43596,43598,43600],{"class":129,"line":2190},[127,43597,32487],{"class":290},[127,43599,32490],{"class":143},[127,43601,32493],{"class":147},[127,43603,43604,43606,43608,43610,43612],{"class":129,"line":2196},[127,43605,32498],{"class":147},[127,43607,725],{"class":290},[127,43609,31995],{"class":147},[127,43611,32003],{"class":781},[127,43613,32006],{"class":147},[127,43615,43616,43618,43620,43622],{"class":129,"line":2217},[127,43617,32511],{"class":5758},[127,43619,725],{"class":290},[127,43621,32016],{"class":154},[127,43623,32006],{"class":147},[127,43625,43626,43628,43630,43632,43634,43636,43638],{"class":129,"line":2222},[127,43627,32522],{"class":5758},[127,43629,725],{"class":290},[127,43631,32033],{"class":147},[127,43633,32036],{"class":5758},[127,43635,725],{"class":290},[127,43637,35989],{"class":154},[127,43639,32044],{"class":147},[127,43641,43642,43644,43646,43648],{"class":129,"line":2236},[127,43643,32539],{"class":5758},[127,43645,725],{"class":290},[127,43647,32016],{"class":154},[127,43649,687],{"class":147},[127,43651,43652,43654,43656,43658,43660,43662,43664,43666,43668,43670,43672,43674,43676,43678,43680],{"class":129,"line":2241},[127,43653,32550],{"class":147},[127,43655,725],{"class":290},[127,43657,32555],{"class":147},[127,43659,32558],{"class":154},[127,43661,681],{"class":147},[127,43663,32563],{"class":154},[127,43665,1130],{"class":290},[127,43667,7900],{"class":154},[127,43669,32570],{"class":147},[127,43671,32558],{"class":154},[127,43673,681],{"class":147},[127,43675,32577],{"class":154},[127,43677,1130],{"class":290},[127,43679,7900],{"class":154},[127,43681,32584],{"class":147},[127,43683,43684,43686,43688,43690,43692,43694],{"class":129,"line":2270},[127,43685,32589],{"class":147},[127,43687,725],{"class":290},[127,43689,32594],{"class":147},[127,43691,32077],{"class":5758},[127,43693,725],{"class":290},[127,43695,32082],{"class":147},[127,43697,43698,43700,43702,43704],{"class":129,"line":2275},[127,43699,32605],{"class":5758},[127,43701,725],{"class":290},[127,43703,873],{"class":154},[127,43705,32006],{"class":147},[127,43707,43708,43710,43712,43714],{"class":129,"line":2292},[127,43709,32617],{"class":5758},[127,43711,725],{"class":290},[127,43713,32016],{"class":154},[127,43715,32006],{"class":147},[127,43717,43718],{"class":129,"line":2297},[127,43719,32628],{"class":133},[127,43721,43722,43724,43726,43728],{"class":129,"line":2302},[127,43723,32633],{"class":5758},[127,43725,725],{"class":290},[127,43727,1070],{"class":154},[127,43729,687],{"class":147},[127,43731,43732,43734,43736,43738,43740,43742],{"class":129,"line":2307},[127,43733,32644],{"class":147},[127,43735,725],{"class":290},[127,43737,32074],{"class":147},[127,43739,32077],{"class":5758},[127,43741,725],{"class":290},[127,43743,32655],{"class":147},[127,43745,43746,43748,43750,43752],{"class":129,"line":2321},[127,43747,32660],{"class":5758},[127,43749,725],{"class":290},[127,43751,873],{"class":154},[127,43753,32006],{"class":147},[127,43755,43756,43758,43760,43762],{"class":129,"line":2326},[127,43757,32671],{"class":5758},[127,43759,725],{"class":290},[127,43761,32016],{"class":154},[127,43763,32006],{"class":147},[127,43765,43766,43768,43770,43772],{"class":129,"line":3119},[127,43767,32682],{"class":5758},[127,43769,725],{"class":290},[127,43771,1070],{"class":154},[127,43773,687],{"class":147},[127,43775,43776,43778],{"class":129,"line":3133},[127,43777,4632],{"class":290},[127,43779,32695],{"class":147},[127,43781,43782],{"class":129,"line":3141},[127,43783,2942],{"emptyLinePlaceholder":606},[127,43785,43786],{"class":129,"line":3146},[127,43787,32704],{"class":133},[127,43789,43790],{"class":129,"line":3152},[127,43791,32709],{"class":133},[127,43793,43794],{"class":129,"line":3158},[127,43795,2942],{"emptyLinePlaceholder":606},[127,43797,43798],{"class":129,"line":3163},[127,43799,32718],{"class":133},[127,43801,43802,43804,43806],{"class":129,"line":8490},[127,43803,32487],{"class":290},[127,43805,32725],{"class":143},[127,43807,32728],{"class":147},[127,43809,43810,43812,43814,43816,43818,43820,43822,43824,43826],{"class":129,"line":8514},[127,43811,31777],{"class":147},[127,43813,725],{"class":290},[127,43815,30991],{"class":147},[127,43817,31784],{"class":781},[127,43819,2247],{"class":290},[127,43821,31789],{"class":147},[127,43823,2244],{"class":290},[127,43825,32747],{"class":781},[127,43827,687],{"class":147},[127,43829,43830],{"class":129,"line":8519},[127,43831,2942],{"emptyLinePlaceholder":606},[127,43833,43834],{"class":129,"line":8525},[127,43835,2942],{"emptyLinePlaceholder":606},[127,43837,43838],{"class":129,"line":8552},[127,43839,32762],{"class":133},[127,43841,43842],{"class":129,"line":8557},[127,43843,32767],{"class":133},[127,43845,43846],{"class":129,"line":8563},[127,43847,32772],{"class":133},[127,43849,43850,43852,43854,43856,43858,43860,43862],{"class":129,"line":8575},[127,43851,32777],{"class":147},[127,43853,725],{"class":290},[127,43855,32782],{"class":147},[127,43857,32785],{"class":5758},[127,43859,725],{"class":290},[127,43861,32790],{"class":154},[127,43863,687],{"class":147},[127,43865,43866],{"class":129,"line":8587},[127,43867,2942],{"emptyLinePlaceholder":606},[127,43869,43870],{"class":129,"line":8599},[127,43871,32801],{"class":133},[127,43873,43874,43876,43878],{"class":129,"line":10258},[127,43875,32806],{"class":147},[127,43877,725],{"class":290},[127,43879,32811],{"class":147},[127,43881,43882],{"class":129,"line":10283},[127,43883,2942],{"emptyLinePlaceholder":606},[127,43885,43886],{"class":129,"line":10306},[127,43887,32820],{"class":133},[127,43889,43890,43892,43894],{"class":129,"line":10330},[127,43891,31829],{"class":147},[127,43893,725],{"class":290},[127,43895,32829],{"class":147},[127,43897,43898],{"class":129,"line":10335},[127,43899,32834],{"class":133},[127,43901,43902],{"class":129,"line":10340},[127,43903,32839],{"class":133},[127,43905,43906],{"class":129,"line":10345},[127,43907,32844],{"class":133},[127,43909,43910,43912,43914],{"class":129,"line":10354},[127,43911,32849],{"class":147},[127,43913,725],{"class":290},[127,43915,32854],{"class":147},[127,43917,43918],{"class":129,"line":10359},[127,43919,2942],{"emptyLinePlaceholder":606},[127,43921,43922],{"class":129,"line":10365},[127,43923,2942],{"emptyLinePlaceholder":606},[127,43925,43926],{"class":129,"line":10386},[127,43927,32867],{"class":133},[127,43929,43930],{"class":129,"line":10392},[127,43931,32872],{"class":133},[127,43933,43934,43936,43938],{"class":129,"line":10406},[127,43935,32877],{"class":147},[127,43937,725],{"class":290},[127,43939,32882],{"class":154},[127,43941,43942],{"class":129,"line":10412},[127,43943,32887],{"class":133},[127,43945,43946,43948,43950],{"class":129,"line":10439},[127,43947,32892],{"class":147},[127,43949,725],{"class":290},[127,43951,32897],{"class":147},[127,43953,43954],{"class":129,"line":10448},[127,43955,32902],{"class":133},[127,43957,43958,43960,43962],{"class":129,"line":10454},[127,43959,32907],{"class":147},[127,43961,725],{"class":290},[127,43963,32897],{"class":147},[127,43965,43966],{"class":129,"line":10462},[127,43967,32916],{"class":133},[127,43969,43970,43972,43974],{"class":129,"line":10467},[127,43971,32921],{"class":147},[127,43973,725],{"class":290},[127,43975,32897],{"class":147},[127,43977,43978],{"class":129,"line":17145},[127,43979,32930],{"class":133},[127,43981,43982,43984,43986],{"class":129,"line":17151},[127,43983,32935],{"class":147},[127,43985,725],{"class":290},[127,43987,32897],{"class":147},[127,43989,43990],{"class":129,"line":17174},[127,43991,2942],{"emptyLinePlaceholder":606},[127,43993,43994],{"class":129,"line":17180},[127,43995,32948],{"class":133},[127,43997,43998,44000,44002],{"class":129,"line":17203},[127,43999,32953],{"class":147},[127,44001,725],{"class":290},[127,44003,32958],{"class":147},[127,44005,44006],{"class":129,"line":17217},[127,44007,2942],{"emptyLinePlaceholder":606},[127,44009,44010],{"class":129,"line":17237},[127,44011,2942],{"emptyLinePlaceholder":606},[127,44013,44014],{"class":129,"line":17243},[127,44015,32971],{"class":133},[127,44017,44018,44020,44022,44024,44026],{"class":129,"line":17254},[127,44019,3743],{"class":290},[127,44021,32978],{"class":147},[127,44023,26584],{"class":290},[127,44025,32983],{"class":154},[127,44027,32986],{"class":147},[127,44029,44030,44032,44034,44036,44038,44040,44042,44044,44046,44048,44050],{"class":129,"line":17277},[127,44031,32991],{"class":154},[127,44033,681],{"class":147},[127,44035,32996],{"class":781},[127,44037,32999],{"class":154},[127,44039,1259],{"class":781},[127,44041,32999],{"class":154},[127,44043,926],{"class":781},[127,44045,33008],{"class":147},[127,44047,1207],{"class":290},[127,44049,893],{"class":154},[127,44051,31037],{"class":147},[127,44053,44054,44056,44058,44060,44062,44064],{"class":129,"line":17299},[127,44055,32991],{"class":154},[127,44057,681],{"class":147},[127,44059,33023],{"class":781},[127,44061,1130],{"class":290},[127,44063,1121],{"class":154},[127,44065,687],{"class":147},[127,44067,44068],{"class":129,"line":17304},[127,44069,2942],{"emptyLinePlaceholder":606},[127,44071,44072],{"class":129,"line":17310},[127,44073,33038],{"class":133},[127,44075,44076],{"class":129,"line":17324},[127,44077,33043],{"class":133},[127,44079,44080,44082,44084],{"class":129,"line":17337},[127,44081,33048],{"class":147},[127,44083,725],{"class":290},[127,44085,32882],{"class":154},[127,44087,44088],{"class":129,"line":17342},[127,44089,33057],{"class":133},[127,44091,44092,44094,44096],{"class":129,"line":17356},[127,44093,33062],{"class":147},[127,44095,725],{"class":290},[127,44097,3627],{"class":154},[127,44099,44100],{"class":129,"line":17361},[127,44101,33071],{"class":133},[127,44103,44104,44106,44108],{"class":129,"line":17367},[127,44105,33076],{"class":147},[127,44107,725],{"class":290},[127,44109,32882],{"class":154},[127,44111,44112],{"class":129,"line":17372},[127,44113,33085],{"class":133},[127,44115,44116,44118,44120],{"class":129,"line":17386},[127,44117,33090],{"class":147},[127,44119,725],{"class":290},[127,44121,3627],{"class":154},[127,44123,44124],{"class":129,"line":17391},[127,44125,33099],{"class":133},[127,44127,44128,44130,44132],{"class":129,"line":17396},[127,44129,33104],{"class":147},[127,44131,725],{"class":290},[127,44133,3627],{"class":154},[127,44135,44136],{"class":129,"line":17410},[127,44137,33113],{"class":133},[127,44139,44140,44142,44144],{"class":129,"line":17422},[127,44141,33118],{"class":147},[127,44143,725],{"class":290},[127,44145,3627],{"class":154},[127,44147,44148],{"class":129,"line":17427},[127,44149,33127],{"class":133},[127,44151,44152,44154,44156,44158,44160],{"class":129,"line":17440},[127,44153,3945],{"class":290},[127,44155,32141],{"class":147},[127,44157,26584],{"class":290},[127,44159,32146],{"class":154},[127,44161,33140],{"class":147},[127,44163,44164],{"class":129,"line":17445},[127,44165,33145],{"class":133},[127,44167,44168,44170,44172],{"class":129,"line":17450},[127,44169,33150],{"class":147},[127,44171,725],{"class":290},[127,44173,33155],{"class":147},[127,44175,44176],{"class":129,"line":17455},[127,44177,33160],{"class":133},[127,44179,44180,44182,44184],{"class":129,"line":17468},[127,44181,33165],{"class":147},[127,44183,725],{"class":290},[127,44185,33170],{"class":147},[127,44187,44188],{"class":129,"line":17473},[127,44189,33176],{"class":133},[127,44191,44192],{"class":129,"line":33173},[127,44193,33182],{"class":147},[127,44195,44196],{"class":129,"line":33179},[127,44197,33188],{"class":133},[127,44199,44200],{"class":129,"line":33185},[127,44201,33194],{"class":133},[127,44203,44204,44206,44208],{"class":129,"line":33191},[127,44205,33200],{"class":147},[127,44207,725],{"class":290},[127,44209,33205],{"class":147},[127,44211,44212],{"class":129,"line":33197},[127,44213,33211],{"class":133},[127,44215,44216,44218,44220,44222,44224,44226,44228],{"class":129,"line":33208},[127,44217,33217],{"class":147},[127,44219,725],{"class":290},[127,44221,33222],{"class":147},[127,44223,33225],{"class":5758},[127,44225,725],{"class":290},[127,44227,893],{"class":154},[127,44229,687],{"class":147},[127,44231,44232],{"class":129,"line":33214},[127,44233,33237],{"class":133},[127,44235,44236,44238,44240],{"class":129,"line":33234},[127,44237,33243],{"class":147},[127,44239,725],{"class":290},[127,44241,33248],{"class":147},[127,44243,44244],{"class":129,"line":33240},[127,44245,33254],{"class":133},[127,44247,44248],{"class":129,"line":33251},[127,44249,33260],{"class":147},[127,44251,44252],{"class":129,"line":33257},[127,44253,33266],{"class":133},[127,44255,44256],{"class":129,"line":33263},[127,44257,33272],{"class":147},[127,44259,44260],{"class":129,"line":33269},[127,44261,33278],{"class":133},[127,44263,44264],{"class":129,"line":33275},[127,44265,33284],{"class":147},[127,44267,44268],{"class":129,"line":33281},[127,44269,33290],{"class":133},[127,44271,44272,44274,44276,44278,44280,44282,44284],{"class":129,"line":33287},[127,44273,33296],{"class":147},[127,44275,10019],{"class":290},[127,44277,33301],{"class":147},[127,44279,1130],{"class":290},[127,44281,33306],{"class":147},[127,44283,867],{"class":154},[127,44285,687],{"class":147},[127,44287,44288],{"class":129,"line":33293},[127,44289,33316],{"class":133},[127,44291,44292,44294,44296,44298,44300],{"class":129,"line":33313},[127,44293,33322],{"class":147},[127,44295,10019],{"class":290},[127,44297,33327],{"class":147},[127,44299,3491],{"class":290},[127,44301,33332],{"class":147},[127,44303,44304],{"class":129,"line":33319},[127,44305,33338],{"class":133},[127,44307,44308,44310,44312,44314,44316],{"class":129,"line":33335},[127,44309,33344],{"class":147},[127,44311,10019],{"class":290},[127,44313,33306],{"class":147},[127,44315,867],{"class":154},[127,44317,687],{"class":147},[127,44319,44320],{"class":129,"line":33341},[127,44321,33358],{"class":133},[127,44323,44324,44326,44328,44330,44332],{"class":129,"line":33355},[127,44325,3945],{"class":290},[127,44327,33366],{"class":147},[127,44329,26584],{"class":290},[127,44331,32146],{"class":154},[127,44333,33373],{"class":147},[127,44335,44336],{"class":129,"line":33361},[127,44337,33379],{"class":133},[127,44339,44340,44342,44344],{"class":129,"line":33376},[127,44341,33150],{"class":147},[127,44343,725],{"class":290},[127,44345,33155],{"class":147},[127,44347,44348],{"class":129,"line":33382},[127,44349,33394],{"class":133},[127,44351,44352,44354,44356],{"class":129,"line":33391},[127,44353,33165],{"class":147},[127,44355,725],{"class":290},[127,44357,33170],{"class":147},[127,44359,44360],{"class":129,"line":33397},[127,44361,33409],{"class":133},[127,44363,44364],{"class":129,"line":33406},[127,44365,33415],{"class":147},[127,44367,44368],{"class":129,"line":33412},[127,44369,36896],{"class":133},[127,44371,44372,44374],{"class":129,"line":33418},[127,44373,33421],{"class":290},[127,44375,33424],{"class":147},[127,44377,44378],{"class":129,"line":33427},[127,44379,33430],{"class":133},[127,44381,44382,44384,44386],{"class":129,"line":33433},[127,44383,36911],{"class":147},[127,44385,725],{"class":290},[127,44387,33205],{"class":147},[127,44389,44390],{"class":129,"line":33444},[127,44391,33447],{"class":133},[127,44393,44394,44396,44398,44400,44402,44404,44406],{"class":129,"line":33450},[127,44395,36924],{"class":147},[127,44397,725],{"class":290},[127,44399,33222],{"class":147},[127,44401,33225],{"class":5758},[127,44403,725],{"class":290},[127,44405,893],{"class":154},[127,44407,687],{"class":147},[127,44409,44410],{"class":129,"line":33469},[127,44411,33472],{"class":133},[127,44413,44414,44416,44418],{"class":129,"line":33475},[127,44415,36945],{"class":147},[127,44417,725],{"class":290},[127,44419,33248],{"class":147},[127,44421,44422],{"class":129,"line":33486},[127,44423,33489],{"class":133},[127,44425,44426,44428,44430,44432,44434,44436,44438],{"class":129,"line":33492},[127,44427,36958],{"class":147},[127,44429,10019],{"class":290},[127,44431,36963],{"class":147},[127,44433,1130],{"class":290},[127,44435,33306],{"class":147},[127,44437,867],{"class":154},[127,44439,687],{"class":147},[127,44441,44442,44444,44446,44448,44450],{"class":129,"line":33512},[127,44443,36976],{"class":147},[127,44445,10019],{"class":290},[127,44447,33327],{"class":147},[127,44449,3491],{"class":290},[127,44451,33332],{"class":147},[127,44453,44454],{"class":129,"line":33528},[127,44455,36989],{"class":133},[127,44457,44458,44460,44462,44464,44466],{"class":129,"line":33534},[127,44459,36994],{"class":147},[127,44461,10019],{"class":290},[127,44463,33306],{"class":147},[127,44465,867],{"class":154},[127,44467,687],{"class":147},[127,44469,44470],{"class":129,"line":33548},[127,44471,33551],{"class":133},[127,44473,44474],{"class":129,"line":33554},[127,44475,33557],{"class":133},[127,44477,44478,44480,44482],{"class":129,"line":33560},[127,44479,33563],{"class":147},[127,44481,1259],{"class":290},[127,44483,33568],{"class":147},[127,44485,44486],{"class":129,"line":33571},[127,44487,33574],{"class":133},[127,44489,44490],{"class":129,"line":33577},[127,44491,33580],{"class":133},[127,44493,44494,44496,44498],{"class":129,"line":33583},[127,44495,33586],{"class":147},[127,44497,1259],{"class":290},[127,44499,33568],{"class":147},[127,44501,44502],{"class":129,"line":33593},[127,44503,33596],{"class":133},[127,44505,44506,44508,44510],{"class":129,"line":33599},[127,44507,33602],{"class":147},[127,44509,1259],{"class":290},[127,44511,33607],{"class":147},[127,44513,44514],{"class":129,"line":33610},[127,44515,33613],{"class":133},[127,44517,44518,44520,44522],{"class":129,"line":33616},[127,44519,33619],{"class":147},[127,44521,1259],{"class":290},[127,44523,33607],{"class":147},[127,44525,44526],{"class":129,"line":33626},[127,44527,2942],{"emptyLinePlaceholder":606},[127,44529,44530],{"class":129,"line":33631},[127,44531,33634],{"class":133},[127,44533,44534,44536,44538,44540,44542,44544,44546,44548,44550,44552,44554,44556,44558,44560,44562,44564,44566,44568,44570,44572],{"class":129,"line":33637},[127,44535,32991],{"class":154},[127,44537,681],{"class":147},[127,44539,4134],{"class":781},[127,44541,32999],{"class":154},[127,44543,33648],{"class":781},[127,44545,1570],{"class":154},[127,44547,33653],{"class":290},[127,44549,1620],{"class":154},[127,44551,33658],{"class":781},[127,44553,1570],{"class":154},[127,44555,33653],{"class":290},[127,44557,1620],{"class":154},[127,44559,4134],{"class":781},[127,44561,33669],{"class":147},[127,44563,1207],{"class":290},[127,44565,893],{"class":154},[127,44567,33676],{"class":147},[127,44569,1207],{"class":290},[127,44571,893],{"class":154},[127,44573,33683],{"class":147},[127,44575,44576,44578,44580,44582,44584,44586,44588,44590,44592,44594,44596,44598,44600,44602,44604,44606,44608,44610,44612,44614],{"class":129,"line":33686},[127,44577,32991],{"class":154},[127,44579,681],{"class":147},[127,44581,4134],{"class":781},[127,44583,32999],{"class":154},[127,44585,33697],{"class":781},[127,44587,1570],{"class":154},[127,44589,33653],{"class":290},[127,44591,1620],{"class":154},[127,44593,33706],{"class":781},[127,44595,1570],{"class":154},[127,44597,33653],{"class":290},[127,44599,1620],{"class":154},[127,44601,4134],{"class":781},[127,44603,33717],{"class":147},[127,44605,1207],{"class":290},[127,44607,893],{"class":154},[127,44609,33724],{"class":147},[127,44611,1207],{"class":290},[127,44613,893],{"class":154},[127,44615,33683],{"class":147},[127,44617,44618],{"class":129,"line":33733},[127,44619,2942],{"emptyLinePlaceholder":606},[127,44621,44622],{"class":129,"line":33738},[127,44623,33741],{"class":133},[127,44625,44626,44628,44630,44632,44634,44636,44638],{"class":129,"line":33744},[127,44627,3039],{"class":290},[127,44629,33749],{"class":147},[127,44631,1207],{"class":290},[127,44633,893],{"class":154},[127,44635,1614],{"class":147},[127,44637,1634],{"class":290},[127,44639,33760],{"class":147},[127,44641,44642],{"class":129,"line":33763},[127,44643,33766],{"class":133},[127,44645,44646,44648,44650,44652,44654,44656,44658],{"class":129,"line":33769},[127,44647,33772],{"class":147},[127,44649,719],{"class":154},[127,44651,725],{"class":290},[127,44653,33779],{"class":147},[127,44655,1207],{"class":290},[127,44657,893],{"class":154},[127,44659,33786],{"class":147},[127,44661,44662],{"class":129,"line":33789},[127,44663,33792],{"class":133},[127,44665,44666],{"class":129,"line":33795},[127,44667,33798],{"class":133},[127,44669,44670,44672,44674],{"class":129,"line":33801},[127,44671,33804],{"class":147},[127,44673,725],{"class":290},[127,44675,32854],{"class":147},[127,44677,44678],{"class":129,"line":33811},[127,44679,2942],{"emptyLinePlaceholder":606},[127,44681,44682],{"class":129,"line":33816},[127,44683,33819],{"class":133},[127,44685,44686,44688,44690,44692,44694],{"class":129,"line":33822},[127,44687,33825],{"class":147},[127,44689,725],{"class":290},[127,44691,33830],{"class":147},[127,44693,1207],{"class":290},[127,44695,33835],{"class":147},[127,44697,44698,44700,44702,44704,44706,44708,44710,44712,44714,44716,44718,44720,44722,44724,44726,44728,44730,44732],{"class":129,"line":33838},[127,44699,32991],{"class":154},[127,44701,681],{"class":147},[127,44703,33845],{"class":781},[127,44705,1570],{"class":154},[127,44707,33850],{"class":290},[127,44709,1620],{"class":154},[127,44711,1219],{"class":781},[127,44713,1570],{"class":154},[127,44715,33850],{"class":290},[127,44717,1620],{"class":154},[127,44719,33863],{"class":781},[127,44721,33866],{"class":147},[127,44723,33869],{"class":290},[127,44725,1581],{"class":154},[127,44727,33874],{"class":147},[127,44729,1003],{"class":290},[127,44731,1581],{"class":154},[127,44733,31037],{"class":147},[127,44735,44736],{"class":129,"line":33883},[127,44737,37273],{"class":133},[127,44739,44740],{"class":129,"line":33889},[127,44741,37278],{"class":133},[127,44743,44744,44746,44748],{"class":129,"line":33895},[127,44745,37283],{"class":147},[127,44747,33907],{"class":781},[127,44749,687],{"class":147},[127,44751,44752],{"class":129,"line":33901},[127,44753,33927],{"class":133},[127,44755,44756,44758,44760,44762,44764,44766],{"class":129,"line":33912},[127,44757,33933],{"class":147},[127,44759,725],{"class":290},[127,44761,33938],{"class":147},[127,44763,33941],{"class":5758},[127,44765,725],{"class":290},[127,44767,2090],{"class":147},[127,44769,44770,44772,44774,44776],{"class":129,"line":33918},[127,44771,33951],{"class":781},[127,44773,1533],{"class":147},[127,44775,33956],{"class":154},[127,44777,33959],{"class":147},[127,44779,44780,44782],{"class":129,"line":33924},[127,44781,33965],{"class":781},[127,44783,33968],{"class":147},[127,44785,44786,44788],{"class":129,"line":33930},[127,44787,33974],{"class":781},[127,44789,33977],{"class":147},[127,44791,44792,44794],{"class":129,"line":33948},[127,44793,33983],{"class":781},[127,44795,33986],{"class":147},[127,44797,44798,44800],{"class":129,"line":33962},[127,44799,33992],{"class":781},[127,44801,33995],{"class":147},[127,44803,44804],{"class":129,"line":33971},[127,44805,34001],{"class":147},[127,44807,44808],{"class":129,"line":33980},[127,44809,34007],{"class":133},[127,44811,44812,44814],{"class":129,"line":33989},[127,44813,4632],{"class":290},[127,44815,34015],{"class":147},[127,44817,44818],{"class":129,"line":33998},[127,44819,2942],{"emptyLinePlaceholder":606},[127,44821,44822],{"class":129,"line":34004},[127,44823,34026],{"class":133},[127,44825,44826,44828,44830],{"class":129,"line":34010},[127,44827,32487],{"class":290},[127,44829,34034],{"class":143},[127,44831,34037],{"class":147},[127,44833,44834],{"class":129,"line":34018},[127,44835,34043],{"class":133},[127,44837,44838,44840,44842,44844,44846,44848,44850,44852],{"class":129,"line":34023},[127,44839,34049],{"class":147},[127,44841,32233],{"class":5758},[127,44843,725],{"class":290},[127,44845,681],{"class":147},[127,44847,1173],{"class":154},[127,44849,1053],{"class":147},[127,44851,968],{"class":154},[127,44853,31037],{"class":147},[127,44855,44856],{"class":129,"line":34029},[127,44857,34069],{"class":133},[127,44859,44860],{"class":129,"line":34040},[127,44861,34075],{"class":133},[127,44863,44864],{"class":129,"line":34046},[127,44865,34081],{"class":133},[127,44867,44868,44870,44872,44874,44876,44878,44880],{"class":129,"line":34066},[127,44869,32267],{"class":147},[127,44871,893],{"class":154},[127,44873,1053],{"class":147},[127,44875,530],{"class":154},[127,44877,1053],{"class":147},[127,44879,893],{"class":154},[127,44881,687],{"class":147},[127,44883,44884],{"class":129,"line":34072},[127,44885,34104],{"class":133},[127,44887,44888],{"class":129,"line":34078},[127,44889,34110],{"class":133},[127,44891,44892],{"class":129,"line":34084},[127,44893,34116],{"class":133},[127,44895,44896],{"class":129,"line":34101},[127,44897,34122],{"class":133},[127,44899,44900],{"class":129,"line":34107},[127,44901,34128],{"class":133},[127,44903,44904,44906,44908,44910,44912,44914,44916,44918,44920],{"class":129,"line":34113},[127,44905,34134],{"class":147},[127,44907,34137],{"class":781},[127,44909,34140],{"class":147},[127,44911,34143],{"class":781},[127,44913,1053],{"class":147},[127,44915,34148],{"class":5758},[127,44917,725],{"class":290},[127,44919,34153],{"class":781},[127,44921,687],{"class":147},[127,44923,44924,44926,44928,44930,44932,44934,44936,44938,44940],{"class":129,"line":34119},[127,44925,34134],{"class":147},[127,44927,34137],{"class":781},[127,44929,34165],{"class":147},[127,44931,34168],{"class":781},[127,44933,1053],{"class":147},[127,44935,34148],{"class":5758},[127,44937,725],{"class":290},[127,44939,34177],{"class":781},[127,44941,687],{"class":147},[127,44943,44944],{"class":129,"line":34125},[127,44945,34185],{"class":133},[127,44947,44948],{"class":129,"line":34131},[127,44949,34191],{"class":147},[127,44951,44952],{"class":129,"line":34158},[127,44953,34197],{"class":133},[127,44955,44956,44958,44960],{"class":129,"line":34182},[127,44957,34203],{"class":147},[127,44959,34206],{"class":781},[127,44961,687],{"class":147},[127,44963,44964,44966,44968],{"class":129,"line":34188},[127,44965,34214],{"class":147},[127,44967,34217],{"class":781},[127,44969,687],{"class":147},[127,44971,44972],{"class":129,"line":34194},[127,44973,34225],{"class":133},[127,44975,44976,44978,44980,44982,44984,44986,44988],{"class":129,"line":34200},[127,44977,32267],{"class":147},[127,44979,893],{"class":154},[127,44981,1053],{"class":147},[127,44983,530],{"class":154},[127,44985,1053],{"class":147},[127,44987,530],{"class":154},[127,44989,687],{"class":147},[127,44991,44992,44994,44996,44998,45000,45002,45004,45006,45008],{"class":129,"line":34211},[127,44993,34134],{"class":147},[127,44995,34137],{"class":781},[127,44997,34252],{"class":147},[127,44999,34143],{"class":781},[127,45001,1053],{"class":147},[127,45003,34148],{"class":5758},[127,45005,725],{"class":290},[127,45007,34263],{"class":781},[127,45009,687],{"class":147},[127,45011,45012,45014,45016,45018,45020,45022,45024,45026,45028],{"class":129,"line":34222},[127,45013,34134],{"class":147},[127,45015,34137],{"class":781},[127,45017,34275],{"class":147},[127,45019,34168],{"class":781},[127,45021,1053],{"class":147},[127,45023,34148],{"class":5758},[127,45025,725],{"class":290},[127,45027,34286],{"class":781},[127,45029,687],{"class":147},[127,45031,45032],{"class":129,"line":34228},[127,45033,34294],{"class":133},[127,45035,45036],{"class":129,"line":34245},[127,45037,34191],{"class":147},[127,45039,45040,45042,45044],{"class":129,"line":34268},[127,45041,34203],{"class":147},[127,45043,34137],{"class":781},[127,45045,687],{"class":147},[127,45047,45048,45050,45052],{"class":129,"line":34291},[127,45049,34214],{"class":147},[127,45051,34316],{"class":781},[127,45053,687],{"class":147},[127,45055,45056],{"class":129,"line":34297},[127,45057,34324],{"class":147},[127,45059,45060],{"class":129,"line":34302},[127,45061,2942],{"emptyLinePlaceholder":606},[127,45063,45064],{"class":129,"line":34311},[127,45065,34335],{"class":133},[127,45067,45068,45070,45072,45074,45076],{"class":129,"line":34321},[127,45069,2075],{"class":290},[127,45071,31760],{"class":154},[127,45073,3491],{"class":290},[127,45075,31765],{"class":781},[127,45077,4281],{"class":147},[127,45079,45080],{"class":129,"line":34327},[127,45081,34354],{"class":133},[127,45083,45084,45087,45089],{"class":129,"line":34332},[127,45085,45086],{"class":147},"    GoogLeNet",[127,45088,725],{"class":290},[127,45090,45091],{"class":147},"GoogLeNet(Inception)\n",[127,45093,45094,45096,45098],{"class":129,"line":34338},[127,45095,34371],{"class":147},[127,45097,725],{"class":290},[127,45099,34376],{"class":147},[127,45101,45102,45104,45106,45109,45111,45113,45115],{"class":129,"line":34351},[127,45103,33933],{"class":147},[127,45105,725],{"class":290},[127,45107,45108],{"class":147},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[127,45110,34389],{"class":5758},[127,45112,725],{"class":290},[127,45114,1625],{"class":154},[127,45116,687],{"class":147},[127,45118,45119],{"class":129,"line":34357},[127,45120,34401],{"class":147},[632,45122,45123],{"start":151},[635,45124,41114],{},[117,45126,45128],{"className":30918,"code":45127,"language":30920,"meta":122,"style":122},"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",[124,45129,45130,45136,45146,45156,45160,45170,45181,45185,45189,45193,45201,45217,45227,45243,45253,45267,45271,45281,45291,45301,45307,45311,45315,45323,45327,45343,45351,45355,45359,45367,45375,45379,45383,45387,45391,45397,45401,45411,45419,45427,45431,45435,45439,45447,45451,45467,45471,45475,45479,45491,45495,45507,45511,45515,45527,45531,45541,45545,45549,45561,45565,45573,45577,45581,45589,45593,45601,45605,45609,45613,45617,45621,45637,45645,45649,45653,45701,45707,45711,45721,45729,45737,45741,45745,45749,45753,45761,45765,45781,45785,45793,45801],{"__ignoreMap":122},[127,45131,45132,45134],{"class":129,"line":130},[127,45133,30932],{"class":290},[127,45135,30935],{"class":147},[127,45137,45138,45140,45142,45144],{"class":129,"line":137},[127,45139,30932],{"class":290},[127,45141,31955],{"class":147},[127,45143,31923],{"class":290},[127,45145,31960],{"class":147},[127,45147,45148,45150,45152,45154],{"class":129,"line":151},[127,45149,31277],{"class":290},[127,45151,31938],{"class":147},[127,45153,30932],{"class":290},[127,45155,31943],{"class":147},[127,45157,45158],{"class":129,"line":167},[127,45159,34462],{"class":133},[127,45161,45162,45164,45166,45168],{"class":129,"line":415},[127,45163,31277],{"class":290},[127,45165,31908],{"class":147},[127,45167,30932],{"class":290},[127,45169,31913],{"class":147},[127,45171,45172,45174,45176,45178],{"class":129,"line":421},[127,45173,31277],{"class":290},[127,45175,32454],{"class":147},[127,45177,30932],{"class":290},[127,45179,45180],{"class":147}," GoogLeNet,Inception\n",[127,45182,45183],{"class":129,"line":1766},[127,45184,2942],{"emptyLinePlaceholder":606},[127,45186,45187],{"class":129,"line":1856},[127,45188,2942],{"emptyLinePlaceholder":606},[127,45190,45191],{"class":129,"line":1862},[127,45192,34491],{"class":133},[127,45194,45195,45197,45199],{"class":129,"line":1874},[127,45196,32487],{"class":290},[127,45198,34498],{"class":143},[127,45200,32493],{"class":147},[127,45202,45203,45205,45207,45209,45211,45213,45215],{"class":129,"line":2155},[127,45204,34505],{"class":147},[127,45206,725],{"class":290},[127,45208,31995],{"class":147},[127,45210,31998],{"class":5758},[127,45212,725],{"class":290},[127,45214,32003],{"class":781},[127,45216,32006],{"class":147},[127,45218,45219,45221,45223,45225],{"class":129,"line":2160},[127,45220,34522],{"class":5758},[127,45222,725],{"class":290},[127,45224,34527],{"class":154},[127,45226,32006],{"class":147},[127,45228,45229,45231,45233,45235,45237,45239,45241],{"class":129,"line":2166},[127,45230,34534],{"class":5758},[127,45232,725],{"class":290},[127,45234,32033],{"class":147},[127,45236,32036],{"class":5758},[127,45238,725],{"class":290},[127,45240,35989],{"class":154},[127,45242,32044],{"class":147},[127,45244,45245,45247,45249,45251],{"class":129,"line":2171},[127,45246,34551],{"class":5758},[127,45248,725],{"class":290},[127,45250,32016],{"class":154},[127,45252,687],{"class":147},[127,45254,45255,45257,45259,45261,45263,45265],{"class":129,"line":2185},[127,45256,34562],{"class":147},[127,45258,725],{"class":290},[127,45260,32074],{"class":147},[127,45262,32077],{"class":5758},[127,45264,725],{"class":290},[127,45266,34573],{"class":147},[127,45268,45269],{"class":129,"line":2190},[127,45270,34578],{"class":133},[127,45272,45273,45275,45277,45279],{"class":129,"line":2196},[127,45274,34583],{"class":5758},[127,45276,725],{"class":290},[127,45278,893],{"class":154},[127,45280,32006],{"class":147},[127,45282,45283,45285,45287,45289],{"class":129,"line":2217},[127,45284,34594],{"class":5758},[127,45286,725],{"class":290},[127,45288,32016],{"class":154},[127,45290,32006],{"class":147},[127,45292,45293,45295,45297,45299],{"class":129,"line":2222},[127,45294,34605],{"class":5758},[127,45296,725],{"class":290},[127,45298,867],{"class":154},[127,45300,687],{"class":147},[127,45302,45303,45305],{"class":129,"line":2236},[127,45304,4632],{"class":290},[127,45306,34618],{"class":147},[127,45308,45309],{"class":129,"line":2241},[127,45310,2942],{"emptyLinePlaceholder":606},[127,45312,45313],{"class":129,"line":2270},[127,45314,34627],{"class":133},[127,45316,45317,45319,45321],{"class":129,"line":2275},[127,45318,32487],{"class":290},[127,45320,34634],{"class":143},[127,45322,34637],{"class":147},[127,45324,45325],{"class":129,"line":2292},[127,45326,34642],{"class":133},[127,45328,45329,45331,45333,45335,45337,45339,45341],{"class":129,"line":2297},[127,45330,31777],{"class":147},[127,45332,725],{"class":290},[127,45334,31784],{"class":781},[127,45336,2247],{"class":290},[127,45338,31789],{"class":147},[127,45340,2244],{"class":290},[127,45342,34659],{"class":781},[127,45344,45345,45347,45349],{"class":129,"line":2302},[127,45346,31829],{"class":147},[127,45348,725],{"class":290},[127,45350,32829],{"class":147},[127,45352,45353],{"class":129,"line":2307},[127,45354,2942],{"emptyLinePlaceholder":606},[127,45356,45357],{"class":129,"line":2321},[127,45358,34676],{"class":133},[127,45360,45361,45363,45365],{"class":129,"line":2326},[127,45362,34681],{"class":147},[127,45364,725],{"class":290},[127,45366,32882],{"class":154},[127,45368,45369,45371,45373],{"class":129,"line":3119},[127,45370,34690],{"class":147},[127,45372,725],{"class":290},[127,45374,3627],{"class":154},[127,45376,45377],{"class":129,"line":3133},[127,45378,2942],{"emptyLinePlaceholder":606},[127,45380,45381],{"class":129,"line":3141},[127,45382,34703],{"class":133},[127,45384,45385],{"class":129,"line":3146},[127,45386,34708],{"class":133},[127,45388,45389],{"class":129,"line":3152},[127,45390,34713],{"class":133},[127,45392,45393,45395],{"class":129,"line":3158},[127,45394,34718],{"class":290},[127,45396,33424],{"class":147},[127,45398,45399],{"class":129,"line":3163},[127,45400,34725],{"class":133},[127,45402,45403,45405,45407,45409],{"class":129,"line":8490},[127,45404,3945],{"class":290},[127,45406,34732],{"class":147},[127,45408,26584],{"class":290},[127,45410,34737],{"class":147},[127,45412,45413,45415,45417],{"class":129,"line":8514},[127,45414,34742],{"class":147},[127,45416,725],{"class":290},[127,45418,34747],{"class":147},[127,45420,45421,45423,45425],{"class":129,"line":8519},[127,45422,34752],{"class":147},[127,45424,725],{"class":290},[127,45426,34757],{"class":147},[127,45428,45429],{"class":129,"line":8525},[127,45430,34762],{"class":133},[127,45432,45433],{"class":129,"line":8552},[127,45434,33415],{"class":147},[127,45436,45437],{"class":129,"line":8557},[127,45438,34771],{"class":133},[127,45440,45441,45443,45445],{"class":129,"line":8563},[127,45442,33200],{"class":147},[127,45444,725],{"class":290},[127,45446,34780],{"class":147},[127,45448,45449],{"class":129,"line":8575},[127,45450,34785],{"class":133},[127,45452,45453,45455,45457,45459,45461,45463,45465],{"class":129,"line":8587},[127,45454,33217],{"class":147},[127,45456,725],{"class":290},[127,45458,33222],{"class":147},[127,45460,33225],{"class":5758},[127,45462,725],{"class":290},[127,45464,893],{"class":154},[127,45466,687],{"class":147},[127,45468,45469],{"class":129,"line":8599},[127,45470,34806],{"class":133},[127,45472,45473],{"class":129,"line":10258},[127,45474,34811],{"class":133},[127,45476,45477],{"class":129,"line":10283},[127,45478,34816],{"class":133},[127,45480,45481,45483,45485,45487,45489],{"class":129,"line":10306},[127,45482,34821],{"class":147},[127,45484,10019],{"class":290},[127,45486,33327],{"class":147},[127,45488,3491],{"class":290},[127,45490,34830],{"class":147},[127,45492,45493],{"class":129,"line":10330},[127,45494,34835],{"class":133},[127,45496,45497,45499,45501,45503,45505],{"class":129,"line":10335},[127,45498,34840],{"class":147},[127,45500,10019],{"class":290},[127,45502,34845],{"class":147},[127,45504,867],{"class":154},[127,45506,687],{"class":147},[127,45508,45509],{"class":129,"line":10340},[127,45510,2942],{"emptyLinePlaceholder":606},[127,45512,45513],{"class":129,"line":10345},[127,45514,34858],{"class":133},[127,45516,45517,45519,45521,45523,45525],{"class":129,"line":10354},[127,45518,34863],{"class":147},[127,45520,725],{"class":290},[127,45522,34868],{"class":147},[127,45524,1259],{"class":290},[127,45526,34873],{"class":147},[127,45528,45529],{"class":129,"line":10359},[127,45530,34878],{"class":133},[127,45532,45533,45535,45537,45539],{"class":129,"line":10365},[127,45534,32991],{"class":154},[127,45536,681],{"class":147},[127,45538,34887],{"class":781},[127,45540,34890],{"class":147},[127,45542,45543],{"class":129,"line":10386},[127,45544,2942],{"emptyLinePlaceholder":606},[127,45546,45547],{"class":129,"line":10392},[127,45548,34899],{"class":133},[127,45550,45551,45553,45555,45557,45559],{"class":129,"line":10406},[127,45552,2075],{"class":290},[127,45554,31760],{"class":154},[127,45556,3491],{"class":290},[127,45558,31765],{"class":781},[127,45560,4281],{"class":147},[127,45562,45563],{"class":129,"line":10412},[127,45564,34916],{"class":133},[127,45566,45567,45569,45571],{"class":129,"line":10439},[127,45568,31829],{"class":147},[127,45570,725],{"class":290},[127,45572,45091],{"class":147},[127,45574,45575],{"class":129,"line":10448},[127,45576,34929],{"class":133},[127,45578,45579],{"class":129,"line":10454},[127,45580,34934],{"class":133},[127,45582,45583,45585,45587],{"class":129,"line":10462},[127,45584,34939],{"class":147},[127,45586,34942],{"class":781},[127,45588,31037],{"class":147},[127,45590,45591],{"class":129,"line":10467},[127,45592,34949],{"class":133},[127,45594,45595,45597,45599],{"class":129,"line":17145},[127,45596,34562],{"class":147},[127,45598,725],{"class":290},[127,45600,34958],{"class":147},[127,45602,45603],{"class":129,"line":17151},[127,45604,34963],{"class":133},[127,45606,45607],{"class":129,"line":17174},[127,45608,34968],{"class":147},[127,45610,45611],{"class":129,"line":17180},[127,45612,2942],{"emptyLinePlaceholder":606},[127,45614,45615],{"class":129,"line":17203},[127,45616,34977],{"class":133},[127,45618,45619],{"class":129,"line":17217},[127,45620,34982],{"class":133},[127,45622,45623,45625,45627,45629,45631,45633,45635],{"class":129,"line":17237},[127,45624,31777],{"class":147},[127,45626,725],{"class":290},[127,45628,31784],{"class":781},[127,45630,2247],{"class":290},[127,45632,31789],{"class":147},[127,45634,2244],{"class":290},[127,45636,34659],{"class":781},[127,45638,45639,45641,45643],{"class":129,"line":17243},[127,45640,31829],{"class":147},[127,45642,725],{"class":290},[127,45644,32829],{"class":147},[127,45646,45647],{"class":129,"line":17254},[127,45648,35011],{"class":133},[127,45650,45651],{"class":129,"line":17277},[127,45652,35016],{"class":133},[127,45654,45655,45657,45659,45661,45663,45665,45667,45669,45671,45673,45675,45677,45679,45681,45683,45685,45687,45689,45691,45693,45695,45697,45699],{"class":129,"line":17299},[127,45656,35021],{"class":147},[127,45658,725],{"class":290},[127,45660,1564],{"class":147},[127,45662,35028],{"class":781},[127,45664,1053],{"class":147},[127,45666,35033],{"class":781},[127,45668,1053],{"class":147},[127,45670,35038],{"class":781},[127,45672,1053],{"class":147},[127,45674,35043],{"class":781},[127,45676,1053],{"class":147},[127,45678,35048],{"class":781},[127,45680,1053],{"class":147},[127,45682,35053],{"class":781},[127,45684,1053],{"class":147},[127,45686,35058],{"class":781},[127,45688,1053],{"class":147},[127,45690,35063],{"class":781},[127,45692,1053],{"class":147},[127,45694,35068],{"class":781},[127,45696,1053],{"class":147},[127,45698,35073],{"class":781},[127,45700,33786],{"class":147},[127,45702,45703,45705],{"class":129,"line":17304},[127,45704,34718],{"class":290},[127,45706,33424],{"class":147},[127,45708,45709],{"class":129,"line":17310},[127,45710,35086],{"class":133},[127,45712,45713,45715,45717,45719],{"class":129,"line":17324},[127,45714,3945],{"class":290},[127,45716,35093],{"class":147},[127,45718,26584],{"class":290},[127,45720,34737],{"class":147},[127,45722,45723,45725,45727],{"class":129,"line":17337},[127,45724,33150],{"class":147},[127,45726,725],{"class":290},[127,45728,33155],{"class":147},[127,45730,45731,45733,45735],{"class":129,"line":17342},[127,45732,33165],{"class":147},[127,45734,725],{"class":290},[127,45736,33170],{"class":147},[127,45738,45739],{"class":129,"line":17356},[127,45740,2942],{"emptyLinePlaceholder":606},[127,45742,45743],{"class":129,"line":17361},[127,45744,35122],{"class":133},[127,45746,45747],{"class":129,"line":17367},[127,45748,33415],{"class":147},[127,45750,45751],{"class":129,"line":17372},[127,45752,35131],{"class":133},[127,45754,45755,45757,45759],{"class":129,"line":17386},[127,45756,33200],{"class":147},[127,45758,725],{"class":290},[127,45760,33205],{"class":147},[127,45762,45763],{"class":129,"line":17391},[127,45764,35144],{"class":133},[127,45766,45767,45769,45771,45773,45775,45777,45779],{"class":129,"line":17396},[127,45768,33217],{"class":147},[127,45770,725],{"class":290},[127,45772,33222],{"class":147},[127,45774,33225],{"class":5758},[127,45776,725],{"class":290},[127,45778,893],{"class":154},[127,45780,687],{"class":147},[127,45782,45783],{"class":129,"line":17410},[127,45784,35165],{"class":133},[127,45786,45787,45789,45791],{"class":129,"line":17422},[127,45788,35170],{"class":147},[127,45790,725],{"class":290},[127,45792,35175],{"class":147},[127,45794,45795,45797,45799],{"class":129,"line":17427},[127,45796,35180],{"class":147},[127,45798,725],{"class":290},[127,45800,35185],{"class":147},[127,45802,45803,45805,45807,45809,45811,45813,45815,45817],{"class":129,"line":17440},[127,45804,35190],{"class":154},[127,45806,681],{"class":147},[127,45808,35195],{"class":781},[127,45810,35198],{"class":147},[127,45812,35201],{"class":781},[127,45814,1053],{"class":147},[127,45816,35206],{"class":781},[127,45818,35209],{"class":147},[62,45820,45822],{"id":45821},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45824,45825],{},"猫狗分类任务",[19,45827,45828],{},"划分数据集和验证集",[117,45830,45832],{"className":30918,"code":45831,"language":30920,"meta":122,"style":122},"# 创建脚本，用于划分数据集和验证集\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",[124,45833,45834,45839,45846,45851,45862,45869,45873,45883,45897,45906,45910,45915,45925,45945,45949,45954,45964,45975,45988,45992,45997,46006,46016,46027,46031,46036,46046,46050,46055,46060,46065,46070,46075,46079,46089,46116,46129,46141,46168,46173,46178,46192,46197,46209,46224,46239,46247,46251,46256,46262,46274,46287,46292,46297,46302,46352,46358,46362],{"__ignoreMap":122},[127,45835,45836],{"class":129,"line":130},[127,45837,45838],{"class":133},"# 创建脚本，用于划分数据集和验证集\n",[127,45840,45841,45843],{"class":129,"line":137},[127,45842,30932],{"class":290},[127,45844,45845],{"class":147}," os\n",[127,45847,45848],{"class":129,"line":151},[127,45849,45850],{"class":133},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[127,45852,45853,45855,45858,45860],{"class":129,"line":167},[127,45854,31277],{"class":290},[127,45856,45857],{"class":147}," shutil ",[127,45859,30932],{"class":290},[127,45861,32362],{"class":147},[127,45863,45864,45866],{"class":129,"line":415},[127,45865,30932],{"class":290},[127,45867,45868],{"class":147}," random\n",[127,45870,45871],{"class":129,"line":421},[127,45872,2942],{"emptyLinePlaceholder":606},[127,45874,45875,45877,45880],{"class":129,"line":1766},[127,45876,32487],{"class":290},[127,45878,45879],{"class":143}," mkfile",[127,45881,45882],{"class":147},"(file):\n",[127,45884,45885,45887,45889,45892,45895],{"class":129,"line":1856},[127,45886,3643],{"class":290},[127,45888,39470],{"class":290},[127,45890,45891],{"class":147}," os.path.exists(",[127,45893,45894],{"class":5758},"file",[127,45896,31326],{"class":147},[127,45898,45899,45902,45904],{"class":129,"line":1862},[127,45900,45901],{"class":147},"        os.makedirs(",[127,45903,45894],{"class":5758},[127,45905,687],{"class":147},[127,45907,45908],{"class":129,"line":1874},[127,45909,2942],{"emptyLinePlaceholder":606},[127,45911,45912],{"class":129,"line":2155},[127,45913,45914],{"class":133},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[127,45916,45917,45920,45922],{"class":129,"line":2160},[127,45918,45919],{"class":147},"file_path",[127,45921,725],{"class":290},[127,45923,45924],{"class":781},"'data_cat_dog'\n",[127,45926,45927,45930,45932,45935,45937,45940,45942],{"class":129,"line":2166},[127,45928,45929],{"class":147},"flower_class",[127,45931,725],{"class":290},[127,45933,45934],{"class":147},"[cla ",[127,45936,3567],{"class":290},[127,45938,45939],{"class":147}," cla ",[127,45941,26584],{"class":290},[127,45943,45944],{"class":147}," os.listdir(file_path)]\n",[127,45946,45947],{"class":129,"line":2171},[127,45948,2942],{"emptyLinePlaceholder":606},[127,45950,45951],{"class":129,"line":2185},[127,45952,45953],{"class":133},"# 创建训练集train文件夹\n",[127,45955,45956,45959,45962],{"class":129,"line":2190},[127,45957,45958],{"class":147},"mkfile(",[127,45960,45961],{"class":781},"'data\u002Ftrain'",[127,45963,687],{"class":147},[127,45965,45966,45968,45970,45972],{"class":129,"line":2196},[127,45967,3567],{"class":290},[127,45969,45939],{"class":147},[127,45971,26584],{"class":290},[127,45973,45974],{"class":147}," flower_class:\n",[127,45976,45977,45980,45983,45985],{"class":129,"line":2217},[127,45978,45979],{"class":147},"    mkfile(",[127,45981,45982],{"class":781},"'data\u002Ftrain\u002F'",[127,45984,1156],{"class":290},[127,45986,45987],{"class":147},"cla)\n",[127,45989,45990],{"class":129,"line":2222},[127,45991,2942],{"emptyLinePlaceholder":606},[127,45993,45994],{"class":129,"line":2236},[127,45995,45996],{"class":133},"# 创建验证集val文件夹\n",[127,45998,45999,46001,46004],{"class":129,"line":2241},[127,46000,45958],{"class":147},[127,46002,46003],{"class":781},"'data\u002Ftest'",[127,46005,687],{"class":147},[127,46007,46008,46010,46012,46014],{"class":129,"line":2270},[127,46009,3567],{"class":290},[127,46011,45939],{"class":147},[127,46013,26584],{"class":290},[127,46015,45974],{"class":147},[127,46017,46018,46020,46023,46025],{"class":129,"line":2275},[127,46019,45979],{"class":147},[127,46021,46022],{"class":781},"'data\u002Ftest\u002F'",[127,46024,1156],{"class":290},[127,46026,45987],{"class":147},[127,46028,46029],{"class":129,"line":2292},[127,46030,2942],{"emptyLinePlaceholder":606},[127,46032,46033],{"class":129,"line":2297},[127,46034,46035],{"class":133},"# 划分比例，训练集：测试集=9：1\n",[127,46037,46038,46041,46043],{"class":129,"line":2302},[127,46039,46040],{"class":147},"split_rate",[127,46042,725],{"class":290},[127,46044,46045],{"class":154},"0.1\n",[127,46047,46048],{"class":129,"line":2307},[127,46049,2942],{"emptyLinePlaceholder":606},[127,46051,46052],{"class":129,"line":2321},[127,46053,46054],{"class":133},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[127,46056,46057],{"class":129,"line":2326},[127,46058,46059],{"class":133},"# cla_path：当前类别的原始图片路径\n",[127,46061,46062],{"class":129,"line":3119},[127,46063,46064],{"class":133},"# images：当前类别下所有图片的文件名列表\n",[127,46066,46067],{"class":129,"line":3133},[127,46068,46069],{"class":133},"# num：该类别图片总数\n",[127,46071,46072],{"class":129,"line":3141},[127,46073,46074],{"class":133},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[127,46076,46077],{"class":129,"line":3146},[127,46078,2942],{"emptyLinePlaceholder":606},[127,46080,46081,46083,46085,46087],{"class":129,"line":3152},[127,46082,3567],{"class":290},[127,46084,45939],{"class":147},[127,46086,26584],{"class":290},[127,46088,45974],{"class":147},[127,46090,46091,46094,46096,46099,46101,46104,46107,46109,46111,46113],{"class":129,"line":3158},[127,46092,46093],{"class":147},"    cla_path ",[127,46095,725],{"class":290},[127,46097,46098],{"class":147}," file_path ",[127,46100,1156],{"class":290},[127,46102,46103],{"class":781}," '\u002F'",[127,46105,46106],{"class":290}," +",[127,46108,45939],{"class":147},[127,46110,1156],{"class":290},[127,46112,46103],{"class":781},[127,46114,46115],{"class":133},"  # 某一类别的子目录\n",[127,46117,46118,46121,46123,46126],{"class":129,"line":3163},[127,46119,46120],{"class":147},"    images ",[127,46122,725],{"class":290},[127,46124,46125],{"class":147}," os.listdir(cla_path)  ",[127,46127,46128],{"class":133},"# iamges 列表存储了该目录下所有图像的名称\n",[127,46130,46131,46134,46136,46138],{"class":129,"line":8490},[127,46132,46133],{"class":147},"    num ",[127,46135,725],{"class":290},[127,46137,7873],{"class":154},[127,46139,46140],{"class":147},"(images)\n",[127,46142,46143,46146,46148,46151,46153,46155,46157,46160,46162,46165],{"class":129,"line":8514},[127,46144,46145],{"class":147},"    eval_index ",[127,46147,725],{"class":290},[127,46149,46150],{"class":147}," random.sample(images, ",[127,46152,1168],{"class":5758},[127,46154,725],{"class":290},[127,46156,684],{"class":154},[127,46158,46159],{"class":147},"(num ",[127,46161,1130],{"class":290},[127,46163,46164],{"class":147}," split_rate))  ",[127,46166,46167],{"class":133},"# 从images列表中随机抽取 k 个图像名称\n",[127,46169,46170],{"class":129,"line":8519},[127,46171,46172],{"class":133},"    # 遍历该类别下的所有图片\n",[127,46174,46175],{"class":129,"line":8525},[127,46176,46177],{"class":133},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[127,46179,46180,46182,46185,46187,46189],{"class":129,"line":8552},[127,46181,3743],{"class":290},[127,46183,46184],{"class":147}," index, image ",[127,46186,26584],{"class":290},[127,46188,32146],{"class":154},[127,46190,46191],{"class":147},"(images):\n",[127,46193,46194],{"class":129,"line":8557},[127,46195,46196],{"class":133},"        # eval_index 中保存验证集val的图像名称\n",[127,46198,46199,46201,46204,46206],{"class":129,"line":8563},[127,46200,3039],{"class":290},[127,46202,46203],{"class":147}," image ",[127,46205,26584],{"class":290},[127,46207,46208],{"class":147}," eval_index:\n",[127,46210,46211,46214,46216,46219,46221],{"class":129,"line":8575},[127,46212,46213],{"class":147},"            image_path ",[127,46215,725],{"class":290},[127,46217,46218],{"class":147}," cla_path ",[127,46220,1156],{"class":290},[127,46222,46223],{"class":147}," image\n",[127,46225,46226,46229,46231,46234,46236],{"class":129,"line":8587},[127,46227,46228],{"class":147},"            new_path ",[127,46230,725],{"class":290},[127,46232,46233],{"class":781}," 'data\u002Ftest\u002F'",[127,46235,46106],{"class":290},[127,46237,46238],{"class":147}," cla\n",[127,46240,46241,46244],{"class":129,"line":8599},[127,46242,46243],{"class":147},"            copy(image_path, new_path)  ",[127,46245,46246],{"class":133},"# 将选中的图像复制到新路径\n",[127,46248,46249],{"class":129,"line":10258},[127,46250,2942],{"emptyLinePlaceholder":606},[127,46252,46253],{"class":129,"line":10283},[127,46254,46255],{"class":133},"        # 其余的图像保存在训练集train中\n",[127,46257,46258,46260],{"class":129,"line":10306},[127,46259,3076],{"class":290},[127,46261,4281],{"class":147},[127,46263,46264,46266,46268,46270,46272],{"class":129,"line":10330},[127,46265,46213],{"class":147},[127,46267,725],{"class":290},[127,46269,46218],{"class":147},[127,46271,1156],{"class":290},[127,46273,46223],{"class":147},[127,46275,46276,46278,46280,46283,46285],{"class":129,"line":10335},[127,46277,46228],{"class":147},[127,46279,725],{"class":290},[127,46281,46282],{"class":781}," 'data\u002Ftrain\u002F'",[127,46284,46106],{"class":290},[127,46286,46238],{"class":147},[127,46288,46289],{"class":129,"line":10340},[127,46290,46291],{"class":147},"            copy(image_path, new_path)\n",[127,46293,46294],{"class":129,"line":10345},[127,46295,46296],{"class":133},"            # 打印进度条信息\n",[127,46298,46299],{"class":129,"line":10354},[127,46300,46301],{"class":133},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[127,46303,46304,46306,46308,46310,46313,46315,46317,46320,46322,46324,46326,46329,46332,46334,46336,46339,46342,46344,46346,46349],{"class":129,"line":10359},[127,46305,32991],{"class":154},[127,46307,681],{"class":147},[127,46309,926],{"class":781},[127,46311,46312],{"class":154},"\\r",[127,46314,1564],{"class":781},[127,46316,32999],{"class":154},[127,46318,46319],{"class":781},"] processing [",[127,46321,32999],{"class":154},[127,46323,1259],{"class":781},[127,46325,32999],{"class":154},[127,46327,46328],{"class":781},"]\"",[127,46330,46331],{"class":147},".format(cla, index ",[127,46333,1156],{"class":290},[127,46335,25659],{"class":154},[127,46337,46338],{"class":147},", num), ",[127,46340,46341],{"class":5758},"end",[127,46343,725],{"class":290},[127,46345,8194],{"class":781},[127,46347,46348],{"class":147},")  ",[127,46350,46351],{"class":133},"# processing bar\n",[127,46353,46354,46356],{"class":129,"line":10365},[127,46355,31839],{"class":154},[127,46357,2518],{"class":147},[127,46359,46360],{"class":129,"line":10386},[127,46361,2942],{"emptyLinePlaceholder":606},[127,46363,46364,46366,46368,46371],{"class":129,"line":10392},[127,46365,30955],{"class":154},[127,46367,681],{"class":147},[127,46369,46370],{"class":781},"\"processing done!\"",[127,46372,687],{"class":147},[19,46374,46375],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22539,46377,46379],{"id":46378},"_242模型代码","2.4.2.模型代码",[19,46381,46382],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[117,46384,46386],{"className":30918,"code":46385,"language":30920,"meta":122,"style":122},"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",[124,46387,46388,46394,46404,46414,46418,46434,46442,46456,46466,46470,46500,46504,46538,46584,46588,46622,46668,46672,46676,46710,46740,46744,46752,46766,46788,46810,46828,46832,46846,46850,46854,46870,46874,46882,46896,46906,46950,46954,46982,46986,46996,47024,47028,47064,47068,47096,47100,47110,47142,47174,47202,47206,47216,47248,47280,47312,47344,47376,47404,47408,47418,47450,47482,47494,47498,47510,47514,47518,47530,47538,47558,47562,47566,47570,47574,47578,47582,47596,47604,47612,47624,47638,47646,47650,47658,47668,47678,47688,47698,47708,47714,47718,47722,47734,47754,47762],{"__ignoreMap":122},[127,46389,46390,46392],{"class":129,"line":130},[127,46391,30932],{"class":290},[127,46393,30935],{"class":147},[127,46395,46396,46398,46400,46402],{"class":129,"line":137},[127,46397,31277],{"class":290},[127,46399,31280],{"class":147},[127,46401,30932],{"class":290},[127,46403,31285],{"class":147},[127,46405,46406,46408,46410,46412],{"class":129,"line":151},[127,46407,31277],{"class":290},[127,46409,31297],{"class":147},[127,46411,30932],{"class":290},[127,46413,31302],{"class":147},[127,46415,46416],{"class":129,"line":167},[127,46417,2942],{"emptyLinePlaceholder":606},[127,46419,46420,46422,46424,46426,46428,46430,46432],{"class":129,"line":415},[127,46421,15236],{"class":290},[127,46423,42033],{"class":143},[127,46425,681],{"class":147},[127,46427,31318],{"class":143},[127,46429,1233],{"class":147},[127,46431,31323],{"class":143},[127,46433,31326],{"class":147},[127,46435,46436,46438,46440],{"class":129,"line":421},[127,46437,31341],{"class":290},[127,46439,31344],{"class":154},[127,46441,42052],{"class":147},[127,46443,46444,46446,46448,46450,46452,46454],{"class":129,"line":1766},[127,46445,31357],{"class":154},[127,46447,42059],{"class":147},[127,46449,31363],{"class":154},[127,46451,31366],{"class":147},[127,46453,31369],{"class":154},[127,46455,2518],{"class":147},[127,46457,46458,46460,46462,46464],{"class":129,"line":1856},[127,46459,31385],{"class":154},[127,46461,35311],{"class":147},[127,46463,725],{"class":290},[127,46465,35316],{"class":147},[127,46467,46468],{"class":129,"line":1862},[127,46469,42082],{"class":133},[127,46471,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498],{"class":129,"line":1874},[127,46473,31385],{"class":154},[127,46475,42089],{"class":147},[127,46477,725],{"class":290},[127,46479,31393],{"class":147},[127,46481,31396],{"class":5758},[127,46483,725],{"class":290},[127,46485,42100],{"class":147},[127,46487,31405],{"class":5758},[127,46489,725],{"class":290},[127,46491,42107],{"class":147},[127,46493,31414],{"class":5758},[127,46495,725],{"class":290},[127,46497,893],{"class":154},[127,46499,687],{"class":147},[127,46501,46502],{"class":129,"line":2155},[127,46503,42120],{"class":133},[127,46505,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536],{"class":129,"line":2160},[127,46507,31385],{"class":154},[127,46509,42127],{"class":147},[127,46511,725],{"class":290},[127,46513,31393],{"class":147},[127,46515,31396],{"class":5758},[127,46517,725],{"class":290},[127,46519,42100],{"class":147},[127,46521,31405],{"class":5758},[127,46523,725],{"class":290},[127,46525,42144],{"class":147},[127,46527,867],{"class":154},[127,46529,42149],{"class":147},[127,46531,31414],{"class":5758},[127,46533,725],{"class":290},[127,46535,893],{"class":154},[127,46537,687],{"class":147},[127,46539,46540,46542,46544,46546,46548,46550,46552,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582],{"class":129,"line":2166},[127,46541,31385],{"class":154},[127,46543,42164],{"class":147},[127,46545,725],{"class":290},[127,46547,31393],{"class":147},[127,46549,31396],{"class":5758},[127,46551,725],{"class":290},[127,46553,42144],{"class":147},[127,46555,867],{"class":154},[127,46557,42149],{"class":147},[127,46559,31405],{"class":5758},[127,46561,725],{"class":290},[127,46563,42144],{"class":147},[127,46565,893],{"class":154},[127,46567,42149],{"class":147},[127,46569,31414],{"class":5758},[127,46571,725],{"class":290},[127,46573,749],{"class":154},[127,46575,1053],{"class":147},[127,46577,31423],{"class":5758},[127,46579,725],{"class":290},[127,46581,893],{"class":154},[127,46583,687],{"class":147},[127,46585,46586],{"class":129,"line":2171},[127,46587,42209],{"class":133},[127,46589,46590,46592,46594,46596,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620],{"class":129,"line":2185},[127,46591,31385],{"class":154},[127,46593,42216],{"class":147},[127,46595,725],{"class":290},[127,46597,31393],{"class":147},[127,46599,31396],{"class":5758},[127,46601,725],{"class":290},[127,46603,42100],{"class":147},[127,46605,31405],{"class":5758},[127,46607,725],{"class":290},[127,46609,42233],{"class":147},[127,46611,867],{"class":154},[127,46613,42149],{"class":147},[127,46615,31414],{"class":5758},[127,46617,725],{"class":290},[127,46619,893],{"class":154},[127,46621,687],{"class":147},[127,46623,46624,46626,46628,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666],{"class":129,"line":2190},[127,46625,31385],{"class":154},[127,46627,42252],{"class":147},[127,46629,725],{"class":290},[127,46631,31393],{"class":147},[127,46633,31396],{"class":5758},[127,46635,725],{"class":290},[127,46637,42233],{"class":147},[127,46639,867],{"class":154},[127,46641,42149],{"class":147},[127,46643,31405],{"class":5758},[127,46645,725],{"class":290},[127,46647,42233],{"class":147},[127,46649,893],{"class":154},[127,46651,42149],{"class":147},[127,46653,31414],{"class":5758},[127,46655,725],{"class":290},[127,46657,994],{"class":154},[127,46659,1053],{"class":147},[127,46661,31423],{"class":5758},[127,46663,725],{"class":290},[127,46665,530],{"class":154},[127,46667,687],{"class":147},[127,46669,46670],{"class":129,"line":2196},[127,46671,42297],{"class":133},[127,46673,46674],{"class":129,"line":2217},[127,46675,42302],{"class":133},[127,46677,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708],{"class":129,"line":2222},[127,46679,31385],{"class":154},[127,46681,42309],{"class":147},[127,46683,725],{"class":290},[127,46685,35369],{"class":147},[127,46687,31414],{"class":5758},[127,46689,725],{"class":290},[127,46691,749],{"class":154},[127,46693,1053],{"class":147},[127,46695,31469],{"class":5758},[127,46697,725],{"class":290},[127,46699,893],{"class":154},[127,46701,1053],{"class":147},[127,46703,31423],{"class":5758},[127,46705,725],{"class":290},[127,46707,893],{"class":154},[127,46709,687],{"class":147},[127,46711,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734,46736,46738],{"class":129,"line":2236},[127,46713,31385],{"class":154},[127,46715,42344],{"class":147},[127,46717,725],{"class":290},[127,46719,31393],{"class":147},[127,46721,31396],{"class":5758},[127,46723,725],{"class":290},[127,46725,42100],{"class":147},[127,46727,31405],{"class":5758},[127,46729,725],{"class":290},[127,46731,42361],{"class":147},[127,46733,31414],{"class":5758},[127,46735,725],{"class":290},[127,46737,893],{"class":154},[127,46739,687],{"class":147},[127,46741,46742],{"class":129,"line":2241},[127,46743,2942],{"emptyLinePlaceholder":606},[127,46745,46746,46748,46750],{"class":129,"line":2270},[127,46747,31341],{"class":290},[127,46749,31633],{"class":143},[127,46751,31636],{"class":147},[127,46753,46754,46756,46758,46760,46762,46764],{"class":129,"line":2275},[127,46755,42386],{"class":147},[127,46757,725],{"class":290},[127,46759,31363],{"class":154},[127,46761,35724],{"class":147},[127,46763,31363],{"class":154},[127,46765,42397],{"class":147},[127,46767,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786],{"class":129,"line":2292},[127,46769,7627],{"class":147},[127,46771,725],{"class":290},[127,46773,31363],{"class":154},[127,46775,35724],{"class":147},[127,46777,31363],{"class":154},[127,46779,42412],{"class":147},[127,46781,31363],{"class":154},[127,46783,35724],{"class":147},[127,46785,31363],{"class":154},[127,46787,42421],{"class":147},[127,46789,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808],{"class":129,"line":2297},[127,46791,42426],{"class":147},[127,46793,725],{"class":290},[127,46795,31363],{"class":154},[127,46797,35724],{"class":147},[127,46799,31363],{"class":154},[127,46801,42437],{"class":147},[127,46803,31363],{"class":154},[127,46805,35724],{"class":147},[127,46807,31363],{"class":154},[127,46809,42446],{"class":147},[127,46811,46812,46814,46816,46818,46820,46822,46824,46826],{"class":129,"line":2302},[127,46813,42451],{"class":147},[127,46815,725],{"class":290},[127,46817,31363],{"class":154},[127,46819,35724],{"class":147},[127,46821,31363],{"class":154},[127,46823,42462],{"class":147},[127,46825,31363],{"class":154},[127,46827,42467],{"class":147},[127,46829,46830],{"class":129,"line":2307},[127,46831,42472],{"class":133},[127,46833,46834,46836,46838,46840,46842,46844],{"class":129,"line":2321},[127,46835,15294],{"class":290},[127,46837,42479],{"class":147},[127,46839,33225],{"class":5758},[127,46841,725],{"class":290},[127,46843,893],{"class":154},[127,46845,687],{"class":147},[127,46847,46848],{"class":129,"line":2326},[127,46849,2942],{"emptyLinePlaceholder":606},[127,46851,46852],{"class":129,"line":3119},[127,46853,42500],{"class":133},[127,46855,46856,46858,46860,46862,46864,46866,46868],{"class":129,"line":3133},[127,46857,15236],{"class":290},[127,46859,42507],{"class":143},[127,46861,681],{"class":147},[127,46863,31318],{"class":143},[127,46865,1233],{"class":147},[127,46867,31323],{"class":143},[127,46869,31326],{"class":147},[127,46871,46872],{"class":129,"line":3141},[127,46873,42522],{"class":133},[127,46875,46876,46878,46880],{"class":129,"line":3146},[127,46877,31341],{"class":290},[127,46879,31344],{"class":154},[127,46881,42531],{"class":147},[127,46883,46884,46886,46888,46890,46892,46894],{"class":129,"line":3152},[127,46885,31357],{"class":154},[127,46887,42538],{"class":147},[127,46889,31363],{"class":154},[127,46891,31366],{"class":147},[127,46893,31369],{"class":154},[127,46895,2518],{"class":147},[127,46897,46898,46900,46902,46904],{"class":129,"line":3158},[127,46899,31385],{"class":154},[127,46901,42553],{"class":147},[127,46903,725],{"class":290},[127,46905,38549],{"class":147},[127,46907,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940,46942,46944,46946,46948],{"class":129,"line":3163},[127,46909,38554],{"class":147},[127,46911,31396],{"class":5758},[127,46913,725],{"class":290},[127,46915,749],{"class":154},[127,46917,1053],{"class":147},[127,46919,31405],{"class":5758},[127,46921,725],{"class":290},[127,46923,879],{"class":154},[127,46925,1053],{"class":147},[127,46927,31414],{"class":5758},[127,46929,725],{"class":290},[127,46931,1044],{"class":154},[127,46933,1053],{"class":147},[127,46935,31469],{"class":5758},[127,46937,725],{"class":290},[127,46939,530],{"class":154},[127,46941,1053],{"class":147},[127,46943,31423],{"class":5758},[127,46945,725],{"class":290},[127,46947,749],{"class":154},[127,46949,38587],{"class":147},[127,46951,46952],{"class":129,"line":8490},[127,46953,38592],{"class":147},[127,46955,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974,46976,46978,46980],{"class":129,"line":8514},[127,46957,38637],{"class":147},[127,46959,31414],{"class":5758},[127,46961,725],{"class":290},[127,46963,749],{"class":154},[127,46965,1053],{"class":147},[127,46967,31469],{"class":5758},[127,46969,725],{"class":290},[127,46971,530],{"class":154},[127,46973,1053],{"class":147},[127,46975,31423],{"class":5758},[127,46977,725],{"class":290},[127,46979,893],{"class":154},[127,46981,687],{"class":147},[127,46983,46984],{"class":129,"line":8519},[127,46985,38666],{"class":147},[127,46987,46988,46990,46992,46994],{"class":129,"line":8525},[127,46989,31385],{"class":154},[127,46991,42644],{"class":147},[127,46993,725],{"class":290},[127,46995,38549],{"class":147},[127,46997,46998,47000,47002,47004,47006,47008,47010,47012,47014,47016,47018,47020,47022],{"class":129,"line":8552},[127,46999,38554],{"class":147},[127,47001,31396],{"class":5758},[127,47003,725],{"class":290},[127,47005,879],{"class":154},[127,47007,1053],{"class":147},[127,47009,31405],{"class":5758},[127,47011,725],{"class":290},[127,47013,879],{"class":154},[127,47015,1053],{"class":147},[127,47017,31414],{"class":5758},[127,47019,725],{"class":290},[127,47021,893],{"class":154},[127,47023,38587],{"class":147},[127,47025,47026],{"class":129,"line":8557},[127,47027,38592],{"class":147},[127,47029,47030,47032,47034,47036,47038,47040,47042,47044,47046,47048,47050,47052,47054,47056,47058,47060,47062],{"class":129,"line":8563},[127,47031,38554],{"class":147},[127,47033,31396],{"class":5758},[127,47035,725],{"class":290},[127,47037,879],{"class":154},[127,47039,1053],{"class":147},[127,47041,31405],{"class":5758},[127,47043,725],{"class":290},[127,47045,42699],{"class":154},[127,47047,1053],{"class":147},[127,47049,31414],{"class":5758},[127,47051,725],{"class":290},[127,47053,749],{"class":154},[127,47055,1053],{"class":147},[127,47057,31423],{"class":5758},[127,47059,725],{"class":290},[127,47061,893],{"class":154},[127,47063,38587],{"class":147},[127,47065,47066],{"class":129,"line":8575},[127,47067,38592],{"class":147},[127,47069,47070,47072,47074,47076,47078,47080,47082,47084,47086,47088,47090,47092,47094],{"class":129,"line":8587},[127,47071,38637],{"class":147},[127,47073,31414],{"class":5758},[127,47075,725],{"class":290},[127,47077,749],{"class":154},[127,47079,1053],{"class":147},[127,47081,31469],{"class":5758},[127,47083,725],{"class":290},[127,47085,530],{"class":154},[127,47087,1053],{"class":147},[127,47089,31423],{"class":5758},[127,47091,725],{"class":290},[127,47093,893],{"class":154},[127,47095,687],{"class":147},[127,47097,47098],{"class":129,"line":8599},[127,47099,38666],{"class":147},[127,47101,47102,47104,47106,47108],{"class":129,"line":10258},[127,47103,31385],{"class":154},[127,47105,42760],{"class":147},[127,47107,725],{"class":290},[127,47109,38549],{"class":147},[127,47111,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130,47132,47134,47136,47138,47140],{"class":129,"line":10283},[127,47113,42769],{"class":147},[127,47115,42699],{"class":154},[127,47117,1053],{"class":147},[127,47119,879],{"class":154},[127,47121,42778],{"class":147},[127,47123,885],{"class":154},[127,47125,1053],{"class":147},[127,47127,32610],{"class":154},[127,47129,42787],{"class":147},[127,47131,287],{"class":154},[127,47133,1053],{"class":147},[127,47135,873],{"class":154},[127,47137,42796],{"class":147},[127,47139,873],{"class":154},[127,47141,38587],{"class":147},[127,47143,47144,47146,47148,47150,47152,47154,47156,47158,47160,47162,47164,47166,47168,47170,47172],{"class":129,"line":10306},[127,47145,42769],{"class":147},[127,47147,35410],{"class":154},[127,47149,1053],{"class":147},[127,47151,32610],{"class":154},[127,47153,42778],{"class":147},[127,47155,32610],{"class":154},[127,47157,1053],{"class":147},[127,47159,42699],{"class":154},[127,47161,42787],{"class":147},[127,47163,873],{"class":154},[127,47165,1053],{"class":147},[127,47167,885],{"class":154},[127,47169,42796],{"class":147},[127,47171,879],{"class":154},[127,47173,38587],{"class":147},[127,47175,47176,47178,47180,47182,47184,47186,47188,47190,47192,47194,47196,47198,47200],{"class":129,"line":10330},[127,47177,38637],{"class":147},[127,47179,31414],{"class":5758},[127,47181,725],{"class":290},[127,47183,749],{"class":154},[127,47185,1053],{"class":147},[127,47187,31469],{"class":5758},[127,47189,725],{"class":290},[127,47191,530],{"class":154},[127,47193,1053],{"class":147},[127,47195,31423],{"class":5758},[127,47197,725],{"class":290},[127,47199,893],{"class":154},[127,47201,687],{"class":147},[127,47203,47204],{"class":129,"line":10335},[127,47205,38666],{"class":147},[127,47207,47208,47210,47212,47214],{"class":129,"line":10340},[127,47209,31385],{"class":154},[127,47211,42871],{"class":147},[127,47213,725],{"class":290},[127,47215,38549],{"class":147},[127,47217,47218,47220,47222,47224,47226,47228,47230,47232,47234,47236,47238,47240,47242,47244,47246],{"class":129,"line":10345},[127,47219,42769],{"class":147},[127,47221,42882],{"class":154},[127,47223,1053],{"class":147},[127,47225,42699],{"class":154},[127,47227,42778],{"class":147},[127,47229,885],{"class":154},[127,47231,1053],{"class":147},[127,47233,42895],{"class":154},[127,47235,42787],{"class":147},[127,47237,287],{"class":154},[127,47239,1053],{"class":147},[127,47241,1281],{"class":154},[127,47243,42796],{"class":147},[127,47245,879],{"class":154},[127,47247,38587],{"class":147},[127,47249,47250,47252,47254,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276,47278],{"class":129,"line":10354},[127,47251,42769],{"class":147},[127,47253,38997],{"class":154},[127,47255,1053],{"class":147},[127,47257,21589],{"class":154},[127,47259,42778],{"class":147},[127,47261,1292],{"class":154},[127,47263,1053],{"class":147},[127,47265,32041],{"class":154},[127,47267,42787],{"class":147},[127,47269,1474],{"class":154},[127,47271,1053],{"class":147},[127,47273,879],{"class":154},[127,47275,42796],{"class":147},[127,47277,879],{"class":154},[127,47279,38587],{"class":147},[127,47281,47282,47284,47286,47288,47290,47292,47294,47296,47298,47300,47302,47304,47306,47308,47310],{"class":129,"line":10359},[127,47283,42769],{"class":147},[127,47285,38997],{"class":154},[127,47287,1053],{"class":147},[127,47289,32610],{"class":154},[127,47291,42778],{"class":147},[127,47293,32610],{"class":154},[127,47295,1053],{"class":147},[127,47297,35410],{"class":154},[127,47299,42787],{"class":147},[127,47301,1474],{"class":154},[127,47303,1053],{"class":147},[127,47305,879],{"class":154},[127,47307,42796],{"class":147},[127,47309,879],{"class":154},[127,47311,38587],{"class":147},[127,47313,47314,47316,47318,47320,47322,47324,47326,47328,47330,47332,47334,47336,47338,47340,47342],{"class":129,"line":10365},[127,47315,42769],{"class":147},[127,47317,38997],{"class":154},[127,47319,1053],{"class":147},[127,47321,1292],{"class":154},[127,47323,42778],{"class":147},[127,47325,32610],{"class":154},[127,47327,1053],{"class":147},[127,47329,42992],{"class":154},[127,47331,42787],{"class":147},[127,47333,873],{"class":154},[127,47335,1053],{"class":147},[127,47337,879],{"class":154},[127,47339,42796],{"class":147},[127,47341,879],{"class":154},[127,47343,38587],{"class":147},[127,47345,47346,47348,47350,47352,47354,47356,47358,47360,47362,47364,47366,47368,47370,47372,47374],{"class":129,"line":10386},[127,47347,42769],{"class":147},[127,47349,43013],{"class":154},[127,47351,1053],{"class":147},[127,47353,35410],{"class":154},[127,47355,42778],{"class":147},[127,47357,21589],{"class":154},[127,47359,1053],{"class":147},[127,47361,43026],{"class":154},[127,47363,42787],{"class":147},[127,47365,873],{"class":154},[127,47367,1053],{"class":147},[127,47369,32610],{"class":154},[127,47371,42796],{"class":147},[127,47373,32610],{"class":154},[127,47375,38587],{"class":147},[127,47377,47378,47380,47382,47384,47386,47388,47390,47392,47394,47396,47398,47400,47402],{"class":129,"line":10392},[127,47379,38637],{"class":147},[127,47381,31414],{"class":5758},[127,47383,725],{"class":290},[127,47385,749],{"class":154},[127,47387,1053],{"class":147},[127,47389,31469],{"class":5758},[127,47391,725],{"class":290},[127,47393,530],{"class":154},[127,47395,1053],{"class":147},[127,47397,31423],{"class":5758},[127,47399,725],{"class":290},[127,47401,893],{"class":154},[127,47403,687],{"class":147},[127,47405,47406],{"class":129,"line":10406},[127,47407,38666],{"class":147},[127,47409,47410,47412,47414,47416],{"class":129,"line":10412},[127,47411,31385],{"class":154},[127,47413,43079],{"class":147},[127,47415,725],{"class":290},[127,47417,38549],{"class":147},[127,47419,47420,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446,47448],{"class":129,"line":10439},[127,47421,42769],{"class":147},[127,47423,43090],{"class":154},[127,47425,1053],{"class":147},[127,47427,35410],{"class":154},[127,47429,42778],{"class":147},[127,47431,21589],{"class":154},[127,47433,1053],{"class":147},[127,47435,43026],{"class":154},[127,47437,42787],{"class":147},[127,47439,873],{"class":154},[127,47441,1053],{"class":147},[127,47443,32610],{"class":154},[127,47445,42796],{"class":147},[127,47447,32610],{"class":154},[127,47449,38587],{"class":147},[127,47451,47452,47454,47456,47458,47460,47462,47464,47466,47468,47470,47472,47474,47476,47478,47480],{"class":129,"line":10448},[127,47453,42769],{"class":147},[127,47455,43090],{"class":154},[127,47457,1053],{"class":147},[127,47459,35480],{"class":154},[127,47461,42778],{"class":147},[127,47463,42699],{"class":154},[127,47465,1053],{"class":147},[127,47467,35480],{"class":154},[127,47469,42787],{"class":147},[127,47471,1281],{"class":154},[127,47473,1053],{"class":147},[127,47475,32610],{"class":154},[127,47477,42796],{"class":147},[127,47479,32610],{"class":154},[127,47481,38587],{"class":147},[127,47483,47484,47486,47488,47490,47492],{"class":129,"line":10454},[127,47485,43153],{"class":147},[127,47487,893],{"class":154},[127,47489,1053],{"class":147},[127,47491,893],{"class":154},[127,47493,43162],{"class":147},[127,47495,47496],{"class":129,"line":10462},[127,47497,39330],{"class":147},[127,47499,47500,47502,47504,47506,47508],{"class":129,"line":10467},[127,47501,39335],{"class":147},[127,47503,43173],{"class":154},[127,47505,1053],{"class":147},[127,47507,530],{"class":154},[127,47509,687],{"class":147},[127,47511,47512],{"class":129,"line":17145},[127,47513,38666],{"class":147},[127,47515,47516],{"class":129,"line":17151},[127,47517,43188],{"class":133},[127,47519,47520,47522,47524,47526,47528],{"class":129,"line":17174},[127,47521,3945],{"class":290},[127,47523,39408],{"class":147},[127,47525,26584],{"class":290},[127,47527,39413],{"class":154},[127,47529,39416],{"class":147},[127,47531,47532,47534,47536],{"class":129,"line":17180},[127,47533,5184],{"class":290},[127,47535,39428],{"class":154},[127,47537,39431],{"class":147},[127,47539,47540,47542,47544,47546,47548,47550,47552,47554,47556],{"class":129,"line":17203},[127,47541,39441],{"class":147},[127,47543,43215],{"class":5758},[127,47545,725],{"class":290},[127,47547,43220],{"class":781},[127,47549,1053],{"class":147},[127,47551,39444],{"class":5758},[127,47553,725],{"class":290},[127,47555,39449],{"class":781},[127,47557,687],{"class":147},[127,47559,47560],{"class":129,"line":17217},[127,47561,43235],{"class":133},[127,47563,47564],{"class":129,"line":17237},[127,47565,43240],{"class":133},[127,47567,47568],{"class":129,"line":17243},[127,47569,43245],{"class":133},[127,47571,47572],{"class":129,"line":17254},[127,47573,43250],{"class":133},[127,47575,47576],{"class":129,"line":17277},[127,47577,43255],{"class":133},[127,47579,47580],{"class":129,"line":17299},[127,47581,43260],{"class":133},[127,47583,47584,47586,47588,47590,47592,47594],{"class":129,"line":17304},[127,47585,39461],{"class":290},[127,47587,39464],{"class":147},[127,47589,39467],{"class":290},[127,47591,39470],{"class":290},[127,47593,39473],{"class":154},[127,47595,4281],{"class":147},[127,47597,47598,47600,47602],{"class":129,"line":17310},[127,47599,39485],{"class":147},[127,47601,867],{"class":154},[127,47603,687],{"class":147},[127,47605,47606,47608,47610],{"class":129,"line":17324},[127,47607,43287],{"class":290},[127,47609,39428],{"class":154},[127,47611,39504],{"class":147},[127,47613,47614,47616,47618,47620,47622],{"class":129,"line":17337},[127,47615,43296],{"class":147},[127,47617,867],{"class":154},[127,47619,1053],{"class":147},[127,47621,39526],{"class":154},[127,47623,687],{"class":147},[127,47625,47626,47628,47630,47632,47634,47636],{"class":129,"line":17342},[127,47627,43309],{"class":290},[127,47629,39464],{"class":147},[127,47631,39467],{"class":290},[127,47633,39470],{"class":290},[127,47635,39473],{"class":154},[127,47637,4281],{"class":147},[127,47639,47640,47642,47644],{"class":129,"line":17356},[127,47641,43324],{"class":147},[127,47643,867],{"class":154},[127,47645,687],{"class":147},[127,47647,47648],{"class":129,"line":17361},[127,47649,35705],{"class":133},[127,47651,47652,47654,47656],{"class":129,"line":17367},[127,47653,31341],{"class":290},[127,47655,31633],{"class":143},[127,47657,31636],{"class":147},[127,47659,47660,47662,47664,47666],{"class":129,"line":17372},[127,47661,31641],{"class":147},[127,47663,725],{"class":290},[127,47665,31363],{"class":154},[127,47667,43351],{"class":147},[127,47669,47670,47672,47674,47676],{"class":129,"line":17386},[127,47671,31641],{"class":147},[127,47673,725],{"class":290},[127,47675,31363],{"class":154},[127,47677,43362],{"class":147},[127,47679,47680,47682,47684,47686],{"class":129,"line":17391},[127,47681,31641],{"class":147},[127,47683,725],{"class":290},[127,47685,31363],{"class":154},[127,47687,43373],{"class":147},[127,47689,47690,47692,47694,47696],{"class":129,"line":17396},[127,47691,31641],{"class":147},[127,47693,725],{"class":290},[127,47695,31363],{"class":154},[127,47697,43384],{"class":147},[127,47699,47700,47702,47704,47706],{"class":129,"line":17410},[127,47701,31641],{"class":147},[127,47703,725],{"class":290},[127,47705,31363],{"class":154},[127,47707,43395],{"class":147},[127,47709,47710,47712],{"class":129,"line":17422},[127,47711,15294],{"class":290},[127,47713,31749],{"class":147},[127,47715,47716],{"class":129,"line":17427},[127,47717,2942],{"emptyLinePlaceholder":606},[127,47719,47720],{"class":129,"line":17440},[127,47721,43410],{"class":133},[127,47723,47724,47726,47728,47730,47732],{"class":129,"line":17445},[127,47725,2075],{"class":290},[127,47727,31760],{"class":154},[127,47729,3491],{"class":290},[127,47731,31765],{"class":781},[127,47733,4281],{"class":147},[127,47735,47736,47738,47740,47742,47744,47746,47748,47750,47752],{"class":129,"line":17450},[127,47737,31777],{"class":147},[127,47739,725],{"class":290},[127,47741,30991],{"class":147},[127,47743,31784],{"class":781},[127,47745,2247],{"class":290},[127,47747,31789],{"class":147},[127,47749,2244],{"class":290},[127,47751,31016],{"class":781},[127,47753,687],{"class":147},[127,47755,47756,47758,47760],{"class":129,"line":17455},[127,47757,31829],{"class":147},[127,47759,725],{"class":290},[127,47761,43451],{"class":147},[127,47763,47764,47766,47768,47770,47772,47774,47776,47778],{"class":129,"line":17468},[127,47765,31839],{"class":154},[127,47767,31842],{"class":147},[127,47769,893],{"class":154},[127,47771,1053],{"class":147},[127,47773,32041],{"class":154},[127,47775,1053],{"class":147},[127,47777,32041],{"class":154},[127,47779,31855],{"class":147},[22539,47781,47783],{"id":47782},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47785,47786],{},"计算图片的均值与方差，用于训练中归一化处理操作",[117,47788,47790],{"className":30918,"code":47789,"language":30920,"meta":122,"style":122},"# 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",[124,47791,47792,47797,47810,47815,47821,47826,47836,47840,47845,47855,47859,47864,47874,47891,47895,47900,47912,47924,47955,47964,47974,47984,47988,47993,48008,48012,48017,48022,48027,48037,48042,48067,48071,48076,48091,48095,48108,48112,48117,48122,48127,48132,48137,48147,48157,48180,48188,48196,48204,48208,48220,48224,48229,48233,48237,48244,48264,48288,48295,48309,48314,48319,48323,48337,48341,48353],{"__ignoreMap":122},[127,47793,47794],{"class":129,"line":130},[127,47795,47796],{"class":133},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[127,47798,47799,47801,47804,47807],{"class":129,"line":137},[127,47800,31277],{"class":290},[127,47802,47803],{"class":154}," PIL",[127,47805,47806],{"class":290}," import",[127,47808,47809],{"class":147}," Image\n",[127,47811,47812],{"class":129,"line":151},[127,47813,47814],{"class":133},"# os 用来处理文件夹和文件路径\n",[127,47816,47817,47819],{"class":129,"line":167},[127,47818,30932],{"class":290},[127,47820,45845],{"class":147},[127,47822,47823],{"class":129,"line":415},[127,47824,47825],{"class":133},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[127,47827,47828,47830,47832,47834],{"class":129,"line":421},[127,47829,30932],{"class":290},[127,47831,31920],{"class":147},[127,47833,31923],{"class":290},[127,47835,31926],{"class":147},[127,47837,47838],{"class":129,"line":1766},[127,47839,2942],{"emptyLinePlaceholder":606},[127,47841,47842],{"class":129,"line":1856},[127,47843,47844],{"class":133},"# 文件夹路径，包含所有图片文件\n",[127,47846,47847,47850,47852],{"class":129,"line":1862},[127,47848,47849],{"class":147},"folder_path ",[127,47851,725],{"class":290},[127,47853,47854],{"class":781}," 'data_cat_dog'\n",[127,47856,47857],{"class":129,"line":1874},[127,47858,2942],{"emptyLinePlaceholder":606},[127,47860,47861],{"class":129,"line":2155},[127,47862,47863],{"class":133},"# 初始化累积变量\n",[127,47865,47866,47869,47871],{"class":129,"line":2160},[127,47867,47868],{"class":147},"total_pixels ",[127,47870,725],{"class":290},[127,47872,47873],{"class":154}," 0\n",[127,47875,47876,47879,47881,47884,47886,47888],{"class":129,"line":2166},[127,47877,47878],{"class":147},"sum_normalized_pixel_values ",[127,47880,725],{"class":290},[127,47882,47883],{"class":147}," np.zeros(",[127,47885,749],{"class":154},[127,47887,46348],{"class":147},[127,47889,47890],{"class":133},"# 如果是RGB图像，需要三个通道的均值和方差\n",[127,47892,47893],{"class":129,"line":2171},[127,47894,2942],{"emptyLinePlaceholder":606},[127,47896,47897],{"class":129,"line":2185},[127,47898,47899],{"class":133},"# 遍历文件夹中的图片文件\n",[127,47901,47902,47904,47907,47909],{"class":129,"line":2190},[127,47903,3567],{"class":290},[127,47905,47906],{"class":147}," root, dirs, files ",[127,47908,26584],{"class":290},[127,47910,47911],{"class":147}," os.walk(folder_path):\n",[127,47913,47914,47916,47919,47921],{"class":129,"line":2196},[127,47915,3743],{"class":290},[127,47917,47918],{"class":147}," filename ",[127,47920,26584],{"class":290},[127,47922,47923],{"class":147}," files:\n",[127,47925,47926,47928,47931,47934,47936,47939,47941,47944,47946,47949,47952],{"class":129,"line":2217},[127,47927,3039],{"class":290},[127,47929,47930],{"class":147}," filename.endswith((",[127,47932,47933],{"class":781},"'.jpg'",[127,47935,12977],{"class":147},[127,47937,47938],{"class":781},"'.jpeg'",[127,47940,12977],{"class":147},[127,47942,47943],{"class":781},"'.png'",[127,47945,12977],{"class":147},[127,47947,47948],{"class":781},"'.bmp'",[127,47950,47951],{"class":147},")):  ",[127,47953,47954],{"class":133},"# 可根据实际情况添加其他格式\n",[127,47956,47957,47959,47961],{"class":129,"line":2222},[127,47958,46213],{"class":147},[127,47960,725],{"class":290},[127,47962,47963],{"class":147}," os.path.join(root, filename)\n",[127,47965,47966,47969,47971],{"class":129,"line":2236},[127,47967,47968],{"class":147},"            image ",[127,47970,725],{"class":290},[127,47972,47973],{"class":147}," Image.open(image_path)\n",[127,47975,47976,47979,47981],{"class":129,"line":2241},[127,47977,47978],{"class":147},"            image_array ",[127,47980,725],{"class":290},[127,47982,47983],{"class":147}," np.array(image)\n",[127,47985,47986],{"class":129,"line":2270},[127,47987,2942],{"emptyLinePlaceholder":606},[127,47989,47990],{"class":129,"line":2275},[127,47991,47992],{"class":133},"            # 归一化像素值到0-1之间\n",[127,47994,47995,47998,48000,48003,48005],{"class":129,"line":2292},[127,47996,47997],{"class":147},"            normalized_image_array ",[127,47999,725],{"class":290},[127,48001,48002],{"class":147}," image_array ",[127,48004,1259],{"class":290},[127,48006,48007],{"class":154}," 255.0\n",[127,48009,48010],{"class":129,"line":2297},[127,48011,2942],{"emptyLinePlaceholder":606},[127,48013,48014],{"class":129,"line":2302},[127,48015,48016],{"class":133},"            # print(image_path)\n",[127,48018,48019],{"class":129,"line":2307},[127,48020,48021],{"class":133},"            # print(normalized_image_array.shape)\n",[127,48023,48024],{"class":129,"line":2321},[127,48025,48026],{"class":133},"            # 累积归一化后的像素值和像素数量\n",[127,48028,48029,48032,48034],{"class":129,"line":2326},[127,48030,48031],{"class":147},"            total_pixels ",[127,48033,10019],{"class":290},[127,48035,48036],{"class":147}," normalized_image_array.size\n",[127,48038,48039],{"class":129,"line":3119},[127,48040,48041],{"class":133},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[127,48043,48044,48047,48049,48052,48055,48057,48059,48061,48063,48065],{"class":129,"line":3133},[127,48045,48046],{"class":147},"            sum_normalized_pixel_values ",[127,48048,10019],{"class":290},[127,48050,48051],{"class":147}," np.sum(normalized_image_array, ",[127,48053,48054],{"class":5758},"axis",[127,48056,725],{"class":290},[127,48058,681],{"class":147},[127,48060,867],{"class":154},[127,48062,12977],{"class":147},[127,48064,893],{"class":154},[127,48066,31037],{"class":147},[127,48068,48069],{"class":129,"line":3141},[127,48070,2942],{"emptyLinePlaceholder":606},[127,48072,48073],{"class":129,"line":3146},[127,48074,48075],{"class":133},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[127,48077,48078,48081,48083,48086,48088],{"class":129,"line":3152},[127,48079,48080],{"class":147},"mean ",[127,48082,725],{"class":290},[127,48084,48085],{"class":147}," sum_normalized_pixel_values ",[127,48087,1259],{"class":290},[127,48089,48090],{"class":147}," total_pixels\n",[127,48092,48093],{"class":129,"line":3158},[127,48094,2942],{"emptyLinePlaceholder":606},[127,48096,48097,48100,48102,48104,48106],{"class":129,"line":3163},[127,48098,48099],{"class":147},"sum_squared_diff ",[127,48101,725],{"class":290},[127,48103,47883],{"class":147},[127,48105,749],{"class":154},[127,48107,687],{"class":147},[127,48109,48110],{"class":129,"line":8490},[127,48111,2942],{"emptyLinePlaceholder":606},[127,48113,48114],{"class":129,"line":8514},[127,48115,48116],{"class":133},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[127,48118,48119],{"class":129,"line":8519},[127,48120,48121],{"class":133},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[127,48123,48124],{"class":129,"line":8525},[127,48125,48126],{"class":133},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[127,48128,48129],{"class":129,"line":8552},[127,48130,48131],{"class":133},"# Image.open(image_path)：打开图片\n",[127,48133,48134],{"class":129,"line":8557},[127,48135,48136],{"class":133},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[127,48138,48139,48141,48143,48145],{"class":129,"line":8563},[127,48140,3567],{"class":290},[127,48142,47906],{"class":147},[127,48144,26584],{"class":290},[127,48146,47911],{"class":147},[127,48148,48149,48151,48153,48155],{"class":129,"line":8575},[127,48150,3743],{"class":290},[127,48152,47918],{"class":147},[127,48154,26584],{"class":290},[127,48156,47923],{"class":147},[127,48158,48159,48161,48163,48165,48167,48169,48171,48173,48175,48177],{"class":129,"line":8587},[127,48160,3039],{"class":290},[127,48162,47930],{"class":147},[127,48164,47933],{"class":781},[127,48166,12977],{"class":147},[127,48168,47938],{"class":781},[127,48170,12977],{"class":147},[127,48172,47943],{"class":781},[127,48174,12977],{"class":147},[127,48176,47948],{"class":781},[127,48178,48179],{"class":147},")):\n",[127,48181,48182,48184,48186],{"class":129,"line":8599},[127,48183,46213],{"class":147},[127,48185,725],{"class":290},[127,48187,47963],{"class":147},[127,48189,48190,48192,48194],{"class":129,"line":10258},[127,48191,47968],{"class":147},[127,48193,725],{"class":290},[127,48195,47973],{"class":147},[127,48197,48198,48200,48202],{"class":129,"line":10283},[127,48199,47978],{"class":147},[127,48201,725],{"class":290},[127,48203,47983],{"class":147},[127,48205,48206],{"class":129,"line":10306},[127,48207,47992],{"class":133},[127,48209,48210,48212,48214,48216,48218],{"class":129,"line":10330},[127,48211,47997],{"class":147},[127,48213,725],{"class":290},[127,48215,48002],{"class":147},[127,48217,1259],{"class":290},[127,48219,48007],{"class":154},[127,48221,48222],{"class":129,"line":10335},[127,48223,48021],{"class":133},[127,48225,48226],{"class":129,"line":10340},[127,48227,48228],{"class":133},"            # print(mean.shape)\n",[127,48230,48231],{"class":129,"line":10345},[127,48232,48016],{"class":133},[127,48234,48235],{"class":129,"line":10354},[127,48236,2942],{"emptyLinePlaceholder":606},[127,48238,48239,48242],{"class":129,"line":10359},[127,48240,48241],{"class":290},"            try",[127,48243,4281],{"class":147},[127,48245,48246,48249,48251,48254,48256,48259,48261],{"class":129,"line":10365},[127,48247,48248],{"class":147},"                diff ",[127,48250,725],{"class":290},[127,48252,48253],{"class":147}," (normalized_image_array ",[127,48255,1207],{"class":290},[127,48257,48258],{"class":147}," mean) ",[127,48260,11203],{"class":290},[127,48262,48263],{"class":154}," 2\n",[127,48265,48266,48269,48271,48274,48276,48278,48280,48282,48284,48286],{"class":129,"line":10386},[127,48267,48268],{"class":147},"                sum_squared_diff ",[127,48270,10019],{"class":290},[127,48272,48273],{"class":147}," np.sum(diff, ",[127,48275,48054],{"class":5758},[127,48277,725],{"class":290},[127,48279,681],{"class":147},[127,48281,867],{"class":154},[127,48283,12977],{"class":147},[127,48285,893],{"class":154},[127,48287,31037],{"class":147},[127,48289,48290,48293],{"class":129,"line":10392},[127,48291,48292],{"class":290},"            except",[127,48294,4281],{"class":147},[127,48296,48297,48300,48302,48304,48307],{"class":129,"line":10406},[127,48298,48299],{"class":154},"                print",[127,48301,681],{"class":147},[127,48303,731],{"class":290},[127,48305,48306],{"class":781},"\"捕获到自定义异常\"",[127,48308,687],{"class":147},[127,48310,48311],{"class":129,"line":10412},[127,48312,48313],{"class":133},"            # diff = (normalized_image_array - mean) ** 2\n",[127,48315,48316],{"class":129,"line":10439},[127,48317,48318],{"class":133},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[127,48320,48321],{"class":129,"line":10448},[127,48322,2942],{"emptyLinePlaceholder":606},[127,48324,48325,48328,48330,48333,48335],{"class":129,"line":10454},[127,48326,48327],{"class":147},"variance ",[127,48329,725],{"class":290},[127,48331,48332],{"class":147}," sum_squared_diff ",[127,48334,1259],{"class":290},[127,48336,48090],{"class":147},[127,48338,48339],{"class":129,"line":10462},[127,48340,2942],{"emptyLinePlaceholder":606},[127,48342,48343,48345,48347,48350],{"class":129,"line":10467},[127,48344,30955],{"class":154},[127,48346,681],{"class":147},[127,48348,48349],{"class":781},"\"Mean:\"",[127,48351,48352],{"class":147},", mean)\n",[127,48354,48355,48357,48359,48362],{"class":129,"line":17145},[127,48356,30955],{"class":154},[127,48358,681],{"class":147},[127,48360,48361],{"class":781},"\"Variance:\"",[127,48363,48364],{"class":147},", variance)\n",[117,48366,48368],{"className":30918,"code":48367,"language":30920,"meta":122,"style":122},"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",[124,48369,48370,48376,48382,48392,48398,48408,48422,48432,48442,48452,48456,48466,48476,48480,48484,48492,48497,48502,48521,48525,48530,48535,48540,48545,48586,48591,48601,48606,48619,48624,48629,48634,48639,48644,48648,48653,48658,48680,48684,48716,48730,48740,48750,48754,48764,48778,48788,48798,48808,48814,48818,48822,48826,48830,48834,48842,48862,48866,48870,48874,48878,48894,48898,48902,48910,48914,48918,48926,48930,48934,48938,48946,48950,48954,48958,48966,48970,48978,48982,48990,48994,49002,49006,49014,49018,49022,49030,49034,49038,49050,49074,49088,49092,49096,49100,49108,49112,49120,49124,49132,49136,49144,49148,49156,49160,49168,49172,49184,49188,49196,49200,49208,49212,49216,49220,49224,49232,49236,49252,49256,49264,49268,49272,49276,49280,49284,49288,49292,49308,49312,49324,49328,49340,49344,49356,49360,49368,49372,49380,49384,49388,49392,49398,49402,49410,49414,49430,49434,49442,49446,49462,49474,49478,49490,49494,49498,49506,49510,49514,49522,49526,49534,49538,49546,49550,49554,49596,49638,49642,49646,49662,49666,49682,49686,49690,49698,49702,49706,49718,49756,49760,49764,49772,49776,49790,49800,49806,49812,49818,49824,49828,49832,49838,49842,49846,49854,49858,49876,49880,49884,49888,49904,49908,49912,49916,49920,49924,49944,49964,49968,49972,49976,49984,49992,49996,50012,50032,50052,50056,50061,50070,50079,50084,50089,50094,50107,50112,50121,50130,50147],{"__ignoreMap":122},[127,48371,48372,48374],{"class":129,"line":130},[127,48373,30932],{"class":290},[127,48375,32362],{"class":147},[127,48377,48378,48380],{"class":129,"line":137},[127,48379,30932],{"class":290},[127,48381,32369],{"class":147},[127,48383,48384,48386,48388,48390],{"class":129,"line":151},[127,48385,30932],{"class":290},[127,48387,32380],{"class":147},[127,48389,31923],{"class":290},[127,48391,32385],{"class":147},[127,48393,48394,48396],{"class":129,"line":167},[127,48395,30932],{"class":290},[127,48397,30935],{"class":147},[127,48399,48400,48402,48404,48406],{"class":129,"line":415},[127,48401,31277],{"class":290},[127,48403,31955],{"class":147},[127,48405,30932],{"class":290},[127,48407,32402],{"class":147},[127,48409,48410,48412,48414,48416,48419],{"class":129,"line":421},[127,48411,31277],{"class":290},[127,48413,31908],{"class":147},[127,48415,30932],{"class":290},[127,48417,48418],{"class":147}," ImageFolder ",[127,48420,48421],{"class":133},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[127,48423,48424,48426,48428,48430],{"class":129,"line":1766},[127,48425,31277],{"class":290},[127,48427,31938],{"class":147},[127,48429,30932],{"class":290},[127,48431,31943],{"class":147},[127,48433,48434,48436,48438,48440],{"class":129,"line":1856},[127,48435,30932],{"class":290},[127,48437,31955],{"class":147},[127,48439,31923],{"class":290},[127,48441,31960],{"class":147},[127,48443,48444,48446,48448,48450],{"class":129,"line":1862},[127,48445,30932],{"class":290},[127,48447,31972],{"class":147},[127,48449,31923],{"class":290},[127,48451,31977],{"class":147},[127,48453,48454],{"class":129,"line":1874},[127,48455,32447],{"class":133},[127,48457,48458,48460,48462,48464],{"class":129,"line":2155},[127,48459,31277],{"class":290},[127,48461,32454],{"class":147},[127,48463,30932],{"class":290},[127,48465,43571],{"class":147},[127,48467,48468,48470,48472,48474],{"class":129,"line":2160},[127,48469,31277],{"class":290},[127,48471,31280],{"class":147},[127,48473,30932],{"class":290},[127,48475,31285],{"class":147},[127,48477,48478],{"class":129,"line":2166},[127,48479,2942],{"emptyLinePlaceholder":606},[127,48481,48482],{"class":129,"line":2171},[127,48483,32482],{"class":133},[127,48485,48486,48488,48490],{"class":129,"line":2185},[127,48487,32487],{"class":290},[127,48489,32490],{"class":143},[127,48491,32493],{"class":147},[127,48493,48494],{"class":129,"line":2190},[127,48495,48496],{"class":133},"    # 导入自己的数据集，并进行数据处理\n",[127,48498,48499],{"class":129,"line":2196},[127,48500,48501],{"class":133},"    # 定义数据集的路径\n",[127,48503,48504,48507,48509,48511,48513,48515,48519],{"class":129,"line":2217},[127,48505,48506],{"class":154},"    ROOT_PATH",[127,48508,725],{"class":290},[127,48510,1344],{"class":290},[127,48512,926],{"class":781},[127,48514,1233],{"class":154},[127,48516,48518],{"class":48517},"sA_wV","\u002Fdata\u002Ftrain",[127,48520,25674],{"class":781},[127,48522,48523],{"class":129,"line":2222},[127,48524,2942],{"emptyLinePlaceholder":606},[127,48526,48527],{"class":129,"line":2236},[127,48528,48529],{"class":133},"    # 定义归一化方法\n",[127,48531,48532],{"class":129,"line":2241},[127,48533,48534],{"class":133},"    # 这里需要先计算一下数据集的均值和方差\n",[127,48536,48537],{"class":129,"line":2270},[127,48538,48539],{"class":133},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[127,48541,48542],{"class":129,"line":2275},[127,48543,48544],{"class":133},"    # 第一个参数是均值，第二个参数是方差\n",[127,48546,48547,48550,48552,48555,48558,48560,48563,48565,48568,48571,48574,48576,48579,48581,48584],{"class":129,"line":2292},[127,48548,48549],{"class":147},"    normalize",[127,48551,725],{"class":290},[127,48553,48554],{"class":147},"transforms.Normalize([",[127,48556,48557],{"class":154},"0.162",[127,48559,1053],{"class":147},[127,48561,48562],{"class":154},"0.151",[127,48564,1053],{"class":147},[127,48566,48567],{"class":154},"0.138",[127,48569,48570],{"class":147},"],[",[127,48572,48573],{"class":154},"0.058",[127,48575,1053],{"class":147},[127,48577,48578],{"class":154},"0.052",[127,48580,1053],{"class":147},[127,48582,48583],{"class":154},"0.048",[127,48585,5199],{"class":147},[127,48587,48588],{"class":129,"line":2297},[127,48589,48590],{"class":133},"    # 定义数据集处理方法变量\n",[127,48592,48593,48596,48598],{"class":129,"line":2302},[127,48594,48595],{"class":147},"    train_transform",[127,48597,725],{"class":290},[127,48599,48600],{"class":147},"transforms.Compose([\n",[127,48602,48603],{"class":129,"line":2307},[127,48604,48605],{"class":133},"        # 调整图像大小为224*224\n",[127,48607,48608,48611,48613,48615,48617],{"class":129,"line":2321},[127,48609,48610],{"class":147},"        transforms.Resize((",[127,48612,32041],{"class":154},[127,48614,1053],{"class":147},[127,48616,32041],{"class":154},[127,48618,43162],{"class":147},[127,48620,48621],{"class":129,"line":2326},[127,48622,48623],{"class":133},"        # 将图像转换为张量\n",[127,48625,48626],{"class":129,"line":3119},[127,48627,48628],{"class":147},"        transforms.ToTensor(),\n",[127,48630,48631],{"class":129,"line":3133},[127,48632,48633],{"class":147},"        normalize])\n",[127,48635,48636],{"class":129,"line":3141},[127,48637,48638],{"class":133},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[127,48640,48641],{"class":129,"line":3146},[127,48642,48643],{"class":133},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[127,48645,48646],{"class":129,"line":3152},[127,48647,2942],{"emptyLinePlaceholder":606},[127,48649,48650],{"class":129,"line":3158},[127,48651,48652],{"class":133},"    # 加载数据集\n",[127,48654,48655],{"class":129,"line":3163},[127,48656,48657],{"class":133},"    # 传入数据集路径与处理方法\n",[127,48659,48660,48662,48664,48667,48670,48672,48675,48677],{"class":129,"line":8490},[127,48661,32498],{"class":147},[127,48663,725],{"class":290},[127,48665,48666],{"class":147},"ImageFolder(",[127,48668,48669],{"class":154},"ROOT_PATH",[127,48671,1053],{"class":147},[127,48673,48674],{"class":5758},"transform",[127,48676,725],{"class":290},[127,48678,48679],{"class":147},"train_transform)\n",[127,48681,48682],{"class":129,"line":8514},[127,48683,2942],{"emptyLinePlaceholder":606},[127,48685,48686,48688,48690,48692,48694,48696,48698,48700,48702,48704,48706,48708,48710,48712,48714],{"class":129,"line":8519},[127,48687,32550],{"class":147},[127,48689,725],{"class":290},[127,48691,32555],{"class":147},[127,48693,32558],{"class":154},[127,48695,681],{"class":147},[127,48697,32563],{"class":154},[127,48699,1130],{"class":290},[127,48701,7900],{"class":154},[127,48703,32570],{"class":147},[127,48705,32558],{"class":154},[127,48707,681],{"class":147},[127,48709,32577],{"class":154},[127,48711,1130],{"class":290},[127,48713,7900],{"class":154},[127,48715,32584],{"class":147},[127,48717,48718,48720,48722,48724,48726,48728],{"class":129,"line":8525},[127,48719,32589],{"class":147},[127,48721,725],{"class":290},[127,48723,32594],{"class":147},[127,48725,32077],{"class":5758},[127,48727,725],{"class":290},[127,48729,32082],{"class":147},[127,48731,48732,48734,48736,48738],{"class":129,"line":8552},[127,48733,32605],{"class":5758},[127,48735,725],{"class":290},[127,48737,873],{"class":154},[127,48739,32006],{"class":147},[127,48741,48742,48744,48746,48748],{"class":129,"line":8557},[127,48743,32617],{"class":5758},[127,48745,725],{"class":290},[127,48747,32016],{"class":154},[127,48749,32006],{"class":147},[127,48751,48752],{"class":129,"line":8563},[127,48753,32628],{"class":133},[127,48755,48756,48758,48760,48762],{"class":129,"line":8575},[127,48757,32633],{"class":5758},[127,48759,725],{"class":290},[127,48761,1070],{"class":154},[127,48763,687],{"class":147},[127,48765,48766,48768,48770,48772,48774,48776],{"class":129,"line":8587},[127,48767,32644],{"class":147},[127,48769,725],{"class":290},[127,48771,32074],{"class":147},[127,48773,32077],{"class":5758},[127,48775,725],{"class":290},[127,48777,32655],{"class":147},[127,48779,48780,48782,48784,48786],{"class":129,"line":8599},[127,48781,32660],{"class":5758},[127,48783,725],{"class":290},[127,48785,873],{"class":154},[127,48787,32006],{"class":147},[127,48789,48790,48792,48794,48796],{"class":129,"line":10258},[127,48791,32671],{"class":5758},[127,48793,725],{"class":290},[127,48795,32016],{"class":154},[127,48797,32006],{"class":147},[127,48799,48800,48802,48804,48806],{"class":129,"line":10283},[127,48801,32682],{"class":5758},[127,48803,725],{"class":290},[127,48805,1070],{"class":154},[127,48807,687],{"class":147},[127,48809,48810,48812],{"class":129,"line":10306},[127,48811,4632],{"class":290},[127,48813,32695],{"class":147},[127,48815,48816],{"class":129,"line":10330},[127,48817,2942],{"emptyLinePlaceholder":606},[127,48819,48820],{"class":129,"line":10335},[127,48821,32704],{"class":133},[127,48823,48824],{"class":129,"line":10340},[127,48825,32709],{"class":133},[127,48827,48828],{"class":129,"line":10345},[127,48829,2942],{"emptyLinePlaceholder":606},[127,48831,48832],{"class":129,"line":10354},[127,48833,32718],{"class":133},[127,48835,48836,48838,48840],{"class":129,"line":10359},[127,48837,32487],{"class":290},[127,48839,32725],{"class":143},[127,48841,32728],{"class":147},[127,48843,48844,48846,48848,48850,48852,48854,48856,48858,48860],{"class":129,"line":10365},[127,48845,31777],{"class":147},[127,48847,725],{"class":290},[127,48849,30991],{"class":147},[127,48851,31784],{"class":781},[127,48853,2247],{"class":290},[127,48855,31789],{"class":147},[127,48857,2244],{"class":290},[127,48859,32747],{"class":781},[127,48861,687],{"class":147},[127,48863,48864],{"class":129,"line":10386},[127,48865,2942],{"emptyLinePlaceholder":606},[127,48867,48868],{"class":129,"line":10392},[127,48869,32762],{"class":133},[127,48871,48872],{"class":129,"line":10406},[127,48873,32767],{"class":133},[127,48875,48876],{"class":129,"line":10412},[127,48877,32772],{"class":133},[127,48879,48880,48882,48884,48886,48888,48890,48892],{"class":129,"line":10439},[127,48881,32777],{"class":147},[127,48883,725],{"class":290},[127,48885,32782],{"class":147},[127,48887,32785],{"class":5758},[127,48889,725],{"class":290},[127,48891,32790],{"class":154},[127,48893,687],{"class":147},[127,48895,48896],{"class":129,"line":10448},[127,48897,2942],{"emptyLinePlaceholder":606},[127,48899,48900],{"class":129,"line":10454},[127,48901,32801],{"class":133},[127,48903,48904,48906,48908],{"class":129,"line":10462},[127,48905,32806],{"class":147},[127,48907,725],{"class":290},[127,48909,32811],{"class":147},[127,48911,48912],{"class":129,"line":10467},[127,48913,2942],{"emptyLinePlaceholder":606},[127,48915,48916],{"class":129,"line":17145},[127,48917,32820],{"class":133},[127,48919,48920,48922,48924],{"class":129,"line":17151},[127,48921,31829],{"class":147},[127,48923,725],{"class":290},[127,48925,32829],{"class":147},[127,48927,48928],{"class":129,"line":17174},[127,48929,32834],{"class":133},[127,48931,48932],{"class":129,"line":17180},[127,48933,32839],{"class":133},[127,48935,48936],{"class":129,"line":17203},[127,48937,32844],{"class":133},[127,48939,48940,48942,48944],{"class":129,"line":17217},[127,48941,32849],{"class":147},[127,48943,725],{"class":290},[127,48945,32854],{"class":147},[127,48947,48948],{"class":129,"line":17237},[127,48949,2942],{"emptyLinePlaceholder":606},[127,48951,48952],{"class":129,"line":17243},[127,48953,32867],{"class":133},[127,48955,48956],{"class":129,"line":17254},[127,48957,32872],{"class":133},[127,48959,48960,48962,48964],{"class":129,"line":17277},[127,48961,32877],{"class":147},[127,48963,725],{"class":290},[127,48965,32882],{"class":154},[127,48967,48968],{"class":129,"line":17299},[127,48969,32887],{"class":133},[127,48971,48972,48974,48976],{"class":129,"line":17304},[127,48973,32892],{"class":147},[127,48975,725],{"class":290},[127,48977,32897],{"class":147},[127,48979,48980],{"class":129,"line":17310},[127,48981,32902],{"class":133},[127,48983,48984,48986,48988],{"class":129,"line":17324},[127,48985,32907],{"class":147},[127,48987,725],{"class":290},[127,48989,32897],{"class":147},[127,48991,48992],{"class":129,"line":17337},[127,48993,32916],{"class":133},[127,48995,48996,48998,49000],{"class":129,"line":17342},[127,48997,32921],{"class":147},[127,48999,725],{"class":290},[127,49001,32897],{"class":147},[127,49003,49004],{"class":129,"line":17356},[127,49005,32930],{"class":133},[127,49007,49008,49010,49012],{"class":129,"line":17361},[127,49009,32935],{"class":147},[127,49011,725],{"class":290},[127,49013,32897],{"class":147},[127,49015,49016],{"class":129,"line":17367},[127,49017,2942],{"emptyLinePlaceholder":606},[127,49019,49020],{"class":129,"line":17372},[127,49021,32948],{"class":133},[127,49023,49024,49026,49028],{"class":129,"line":17386},[127,49025,32953],{"class":147},[127,49027,725],{"class":290},[127,49029,32958],{"class":147},[127,49031,49032],{"class":129,"line":17391},[127,49033,2942],{"emptyLinePlaceholder":606},[127,49035,49036],{"class":129,"line":17396},[127,49037,32971],{"class":133},[127,49039,49040,49042,49044,49046,49048],{"class":129,"line":17410},[127,49041,3743],{"class":290},[127,49043,32978],{"class":147},[127,49045,26584],{"class":290},[127,49047,32983],{"class":154},[127,49049,32986],{"class":147},[127,49051,49052,49054,49056,49058,49060,49062,49064,49066,49068,49070,49072],{"class":129,"line":17422},[127,49053,32991],{"class":154},[127,49055,681],{"class":147},[127,49057,32996],{"class":781},[127,49059,32999],{"class":154},[127,49061,1259],{"class":781},[127,49063,32999],{"class":154},[127,49065,926],{"class":781},[127,49067,33008],{"class":147},[127,49069,1207],{"class":290},[127,49071,893],{"class":154},[127,49073,31037],{"class":147},[127,49075,49076,49078,49080,49082,49084,49086],{"class":129,"line":17427},[127,49077,32991],{"class":154},[127,49079,681],{"class":147},[127,49081,33023],{"class":781},[127,49083,1130],{"class":290},[127,49085,1121],{"class":154},[127,49087,687],{"class":147},[127,49089,49090],{"class":129,"line":17440},[127,49091,2942],{"emptyLinePlaceholder":606},[127,49093,49094],{"class":129,"line":17445},[127,49095,33038],{"class":133},[127,49097,49098],{"class":129,"line":17450},[127,49099,33043],{"class":133},[127,49101,49102,49104,49106],{"class":129,"line":17455},[127,49103,33048],{"class":147},[127,49105,725],{"class":290},[127,49107,32882],{"class":154},[127,49109,49110],{"class":129,"line":17468},[127,49111,33057],{"class":133},[127,49113,49114,49116,49118],{"class":129,"line":17473},[127,49115,33062],{"class":147},[127,49117,725],{"class":290},[127,49119,3627],{"class":154},[127,49121,49122],{"class":129,"line":33173},[127,49123,33071],{"class":133},[127,49125,49126,49128,49130],{"class":129,"line":33179},[127,49127,33076],{"class":147},[127,49129,725],{"class":290},[127,49131,32882],{"class":154},[127,49133,49134],{"class":129,"line":33185},[127,49135,33085],{"class":133},[127,49137,49138,49140,49142],{"class":129,"line":33191},[127,49139,33090],{"class":147},[127,49141,725],{"class":290},[127,49143,3627],{"class":154},[127,49145,49146],{"class":129,"line":33197},[127,49147,33099],{"class":133},[127,49149,49150,49152,49154],{"class":129,"line":33208},[127,49151,33104],{"class":147},[127,49153,725],{"class":290},[127,49155,3627],{"class":154},[127,49157,49158],{"class":129,"line":33214},[127,49159,33113],{"class":133},[127,49161,49162,49164,49166],{"class":129,"line":33234},[127,49163,33118],{"class":147},[127,49165,725],{"class":290},[127,49167,3627],{"class":154},[127,49169,49170],{"class":129,"line":33240},[127,49171,33127],{"class":133},[127,49173,49174,49176,49178,49180,49182],{"class":129,"line":33251},[127,49175,3945],{"class":290},[127,49177,32141],{"class":147},[127,49179,26584],{"class":290},[127,49181,32146],{"class":154},[127,49183,33140],{"class":147},[127,49185,49186],{"class":129,"line":33257},[127,49187,33145],{"class":133},[127,49189,49190,49192,49194],{"class":129,"line":33263},[127,49191,33150],{"class":147},[127,49193,725],{"class":290},[127,49195,33155],{"class":147},[127,49197,49198],{"class":129,"line":33269},[127,49199,33160],{"class":133},[127,49201,49202,49204,49206],{"class":129,"line":33275},[127,49203,33165],{"class":147},[127,49205,725],{"class":290},[127,49207,33170],{"class":147},[127,49209,49210],{"class":129,"line":33281},[127,49211,33176],{"class":133},[127,49213,49214],{"class":129,"line":33287},[127,49215,33182],{"class":147},[127,49217,49218],{"class":129,"line":33293},[127,49219,33188],{"class":133},[127,49221,49222],{"class":129,"line":33313},[127,49223,33194],{"class":133},[127,49225,49226,49228,49230],{"class":129,"line":33319},[127,49227,33200],{"class":147},[127,49229,725],{"class":290},[127,49231,33205],{"class":147},[127,49233,49234],{"class":129,"line":33335},[127,49235,33211],{"class":133},[127,49237,49238,49240,49242,49244,49246,49248,49250],{"class":129,"line":33341},[127,49239,33217],{"class":147},[127,49241,725],{"class":290},[127,49243,33222],{"class":147},[127,49245,33225],{"class":5758},[127,49247,725],{"class":290},[127,49249,893],{"class":154},[127,49251,687],{"class":147},[127,49253,49254],{"class":129,"line":33355},[127,49255,33237],{"class":133},[127,49257,49258,49260,49262],{"class":129,"line":33361},[127,49259,33243],{"class":147},[127,49261,725],{"class":290},[127,49263,33248],{"class":147},[127,49265,49266],{"class":129,"line":33376},[127,49267,33254],{"class":133},[127,49269,49270],{"class":129,"line":33382},[127,49271,33260],{"class":147},[127,49273,49274],{"class":129,"line":33391},[127,49275,33266],{"class":133},[127,49277,49278],{"class":129,"line":33397},[127,49279,33272],{"class":147},[127,49281,49282],{"class":129,"line":33406},[127,49283,33278],{"class":133},[127,49285,49286],{"class":129,"line":33412},[127,49287,33284],{"class":147},[127,49289,49290],{"class":129,"line":33418},[127,49291,33290],{"class":133},[127,49293,49294,49296,49298,49300,49302,49304,49306],{"class":129,"line":33427},[127,49295,33296],{"class":147},[127,49297,10019],{"class":290},[127,49299,33301],{"class":147},[127,49301,1130],{"class":290},[127,49303,33306],{"class":147},[127,49305,867],{"class":154},[127,49307,687],{"class":147},[127,49309,49310],{"class":129,"line":33433},[127,49311,33316],{"class":133},[127,49313,49314,49316,49318,49320,49322],{"class":129,"line":33444},[127,49315,33322],{"class":147},[127,49317,10019],{"class":290},[127,49319,33327],{"class":147},[127,49321,3491],{"class":290},[127,49323,33332],{"class":147},[127,49325,49326],{"class":129,"line":33450},[127,49327,33338],{"class":133},[127,49329,49330,49332,49334,49336,49338],{"class":129,"line":33469},[127,49331,33344],{"class":147},[127,49333,10019],{"class":290},[127,49335,33306],{"class":147},[127,49337,867],{"class":154},[127,49339,687],{"class":147},[127,49341,49342],{"class":129,"line":33475},[127,49343,33358],{"class":133},[127,49345,49346,49348,49350,49352,49354],{"class":129,"line":33486},[127,49347,3945],{"class":290},[127,49349,33366],{"class":147},[127,49351,26584],{"class":290},[127,49353,32146],{"class":154},[127,49355,33373],{"class":147},[127,49357,49358],{"class":129,"line":33492},[127,49359,33379],{"class":133},[127,49361,49362,49364,49366],{"class":129,"line":33512},[127,49363,33150],{"class":147},[127,49365,725],{"class":290},[127,49367,33155],{"class":147},[127,49369,49370],{"class":129,"line":33528},[127,49371,33394],{"class":133},[127,49373,49374,49376,49378],{"class":129,"line":33534},[127,49375,33165],{"class":147},[127,49377,725],{"class":290},[127,49379,33170],{"class":147},[127,49381,49382],{"class":129,"line":33548},[127,49383,33409],{"class":133},[127,49385,49386],{"class":129,"line":33554},[127,49387,33415],{"class":147},[127,49389,49390],{"class":129,"line":33560},[127,49391,36896],{"class":133},[127,49393,49394,49396],{"class":129,"line":33571},[127,49395,33421],{"class":290},[127,49397,33424],{"class":147},[127,49399,49400],{"class":129,"line":33577},[127,49401,33430],{"class":133},[127,49403,49404,49406,49408],{"class":129,"line":33583},[127,49405,36911],{"class":147},[127,49407,725],{"class":290},[127,49409,33205],{"class":147},[127,49411,49412],{"class":129,"line":33593},[127,49413,33447],{"class":133},[127,49415,49416,49418,49420,49422,49424,49426,49428],{"class":129,"line":33599},[127,49417,36924],{"class":147},[127,49419,725],{"class":290},[127,49421,33222],{"class":147},[127,49423,33225],{"class":5758},[127,49425,725],{"class":290},[127,49427,893],{"class":154},[127,49429,687],{"class":147},[127,49431,49432],{"class":129,"line":33610},[127,49433,33472],{"class":133},[127,49435,49436,49438,49440],{"class":129,"line":33616},[127,49437,36945],{"class":147},[127,49439,725],{"class":290},[127,49441,33248],{"class":147},[127,49443,49444],{"class":129,"line":33626},[127,49445,33489],{"class":133},[127,49447,49448,49450,49452,49454,49456,49458,49460],{"class":129,"line":33631},[127,49449,36958],{"class":147},[127,49451,10019],{"class":290},[127,49453,36963],{"class":147},[127,49455,1130],{"class":290},[127,49457,33306],{"class":147},[127,49459,867],{"class":154},[127,49461,687],{"class":147},[127,49463,49464,49466,49468,49470,49472],{"class":129,"line":33637},[127,49465,36976],{"class":147},[127,49467,10019],{"class":290},[127,49469,33327],{"class":147},[127,49471,3491],{"class":290},[127,49473,33332],{"class":147},[127,49475,49476],{"class":129,"line":33686},[127,49477,36989],{"class":133},[127,49479,49480,49482,49484,49486,49488],{"class":129,"line":33733},[127,49481,36994],{"class":147},[127,49483,10019],{"class":290},[127,49485,33306],{"class":147},[127,49487,867],{"class":154},[127,49489,687],{"class":147},[127,49491,49492],{"class":129,"line":33738},[127,49493,33551],{"class":133},[127,49495,49496],{"class":129,"line":33744},[127,49497,33557],{"class":133},[127,49499,49500,49502,49504],{"class":129,"line":33763},[127,49501,33563],{"class":147},[127,49503,1259],{"class":290},[127,49505,33568],{"class":147},[127,49507,49508],{"class":129,"line":33769},[127,49509,33574],{"class":133},[127,49511,49512],{"class":129,"line":33789},[127,49513,33580],{"class":133},[127,49515,49516,49518,49520],{"class":129,"line":33795},[127,49517,33586],{"class":147},[127,49519,1259],{"class":290},[127,49521,33568],{"class":147},[127,49523,49524],{"class":129,"line":33801},[127,49525,33596],{"class":133},[127,49527,49528,49530,49532],{"class":129,"line":33811},[127,49529,33602],{"class":147},[127,49531,1259],{"class":290},[127,49533,33607],{"class":147},[127,49535,49536],{"class":129,"line":33816},[127,49537,33613],{"class":133},[127,49539,49540,49542,49544],{"class":129,"line":33822},[127,49541,33619],{"class":147},[127,49543,1259],{"class":290},[127,49545,33607],{"class":147},[127,49547,49548],{"class":129,"line":33838},[127,49549,2942],{"emptyLinePlaceholder":606},[127,49551,49552],{"class":129,"line":33883},[127,49553,33634],{"class":133},[127,49555,49556,49558,49560,49562,49564,49566,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586,49588,49590,49592,49594],{"class":129,"line":33889},[127,49557,32991],{"class":154},[127,49559,681],{"class":147},[127,49561,4134],{"class":781},[127,49563,32999],{"class":154},[127,49565,33648],{"class":781},[127,49567,1570],{"class":154},[127,49569,33653],{"class":290},[127,49571,1620],{"class":154},[127,49573,33658],{"class":781},[127,49575,1570],{"class":154},[127,49577,33653],{"class":290},[127,49579,1620],{"class":154},[127,49581,4134],{"class":781},[127,49583,33669],{"class":147},[127,49585,1207],{"class":290},[127,49587,893],{"class":154},[127,49589,33676],{"class":147},[127,49591,1207],{"class":290},[127,49593,893],{"class":154},[127,49595,33683],{"class":147},[127,49597,49598,49600,49602,49604,49606,49608,49610,49612,49614,49616,49618,49620,49622,49624,49626,49628,49630,49632,49634,49636],{"class":129,"line":33895},[127,49599,32991],{"class":154},[127,49601,681],{"class":147},[127,49603,4134],{"class":781},[127,49605,32999],{"class":154},[127,49607,33697],{"class":781},[127,49609,1570],{"class":154},[127,49611,33653],{"class":290},[127,49613,1620],{"class":154},[127,49615,33706],{"class":781},[127,49617,1570],{"class":154},[127,49619,33653],{"class":290},[127,49621,1620],{"class":154},[127,49623,4134],{"class":781},[127,49625,33717],{"class":147},[127,49627,1207],{"class":290},[127,49629,893],{"class":154},[127,49631,33724],{"class":147},[127,49633,1207],{"class":290},[127,49635,893],{"class":154},[127,49637,33683],{"class":147},[127,49639,49640],{"class":129,"line":33901},[127,49641,2942],{"emptyLinePlaceholder":606},[127,49643,49644],{"class":129,"line":33912},[127,49645,33741],{"class":133},[127,49647,49648,49650,49652,49654,49656,49658,49660],{"class":129,"line":33918},[127,49649,3039],{"class":290},[127,49651,33749],{"class":147},[127,49653,1207],{"class":290},[127,49655,893],{"class":154},[127,49657,1614],{"class":147},[127,49659,1634],{"class":290},[127,49661,33760],{"class":147},[127,49663,49664],{"class":129,"line":33924},[127,49665,33766],{"class":133},[127,49667,49668,49670,49672,49674,49676,49678,49680],{"class":129,"line":33930},[127,49669,33772],{"class":147},[127,49671,719],{"class":154},[127,49673,725],{"class":290},[127,49675,33779],{"class":147},[127,49677,1207],{"class":290},[127,49679,893],{"class":154},[127,49681,33786],{"class":147},[127,49683,49684],{"class":129,"line":33948},[127,49685,33792],{"class":133},[127,49687,49688],{"class":129,"line":33962},[127,49689,33798],{"class":133},[127,49691,49692,49694,49696],{"class":129,"line":33971},[127,49693,33804],{"class":147},[127,49695,725],{"class":290},[127,49697,32854],{"class":147},[127,49699,49700],{"class":129,"line":33980},[127,49701,2942],{"emptyLinePlaceholder":606},[127,49703,49704],{"class":129,"line":33989},[127,49705,33819],{"class":133},[127,49707,49708,49710,49712,49714,49716],{"class":129,"line":33998},[127,49709,33825],{"class":147},[127,49711,725],{"class":290},[127,49713,33830],{"class":147},[127,49715,1207],{"class":290},[127,49717,33835],{"class":147},[127,49719,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748,49750,49752,49754],{"class":129,"line":34004},[127,49721,32991],{"class":154},[127,49723,681],{"class":147},[127,49725,33845],{"class":781},[127,49727,1570],{"class":154},[127,49729,33850],{"class":290},[127,49731,1620],{"class":154},[127,49733,1219],{"class":781},[127,49735,1570],{"class":154},[127,49737,33850],{"class":290},[127,49739,1620],{"class":154},[127,49741,33863],{"class":781},[127,49743,33866],{"class":147},[127,49745,33869],{"class":290},[127,49747,1581],{"class":154},[127,49749,33874],{"class":147},[127,49751,1003],{"class":290},[127,49753,1581],{"class":154},[127,49755,31037],{"class":147},[127,49757,49758],{"class":129,"line":34010},[127,49759,37273],{"class":133},[127,49761,49762],{"class":129,"line":34018},[127,49763,37278],{"class":133},[127,49765,49766,49768,49770],{"class":129,"line":34023},[127,49767,37283],{"class":147},[127,49769,33907],{"class":781},[127,49771,687],{"class":147},[127,49773,49774],{"class":129,"line":34029},[127,49775,33927],{"class":133},[127,49777,49778,49780,49782,49784,49786,49788],{"class":129,"line":34040},[127,49779,33933],{"class":147},[127,49781,725],{"class":290},[127,49783,33938],{"class":147},[127,49785,33941],{"class":5758},[127,49787,725],{"class":290},[127,49789,2090],{"class":147},[127,49791,49792,49794,49796,49798],{"class":129,"line":34046},[127,49793,33951],{"class":781},[127,49795,1533],{"class":147},[127,49797,33956],{"class":154},[127,49799,33959],{"class":147},[127,49801,49802,49804],{"class":129,"line":34066},[127,49803,33965],{"class":781},[127,49805,33968],{"class":147},[127,49807,49808,49810],{"class":129,"line":34072},[127,49809,33974],{"class":781},[127,49811,33977],{"class":147},[127,49813,49814,49816],{"class":129,"line":34078},[127,49815,33983],{"class":781},[127,49817,33986],{"class":147},[127,49819,49820,49822],{"class":129,"line":34084},[127,49821,33992],{"class":781},[127,49823,33995],{"class":147},[127,49825,49826],{"class":129,"line":34101},[127,49827,34001],{"class":147},[127,49829,49830],{"class":129,"line":34107},[127,49831,34007],{"class":133},[127,49833,49834,49836],{"class":129,"line":34113},[127,49835,4632],{"class":290},[127,49837,34015],{"class":147},[127,49839,49840],{"class":129,"line":34119},[127,49841,2942],{"emptyLinePlaceholder":606},[127,49843,49844],{"class":129,"line":34125},[127,49845,34026],{"class":133},[127,49847,49848,49850,49852],{"class":129,"line":34131},[127,49849,32487],{"class":290},[127,49851,34034],{"class":143},[127,49853,34037],{"class":147},[127,49855,49856],{"class":129,"line":34158},[127,49857,34043],{"class":133},[127,49859,49860,49862,49864,49866,49868,49870,49872,49874],{"class":129,"line":34182},[127,49861,34049],{"class":147},[127,49863,32233],{"class":5758},[127,49865,725],{"class":290},[127,49867,681],{"class":147},[127,49869,1173],{"class":154},[127,49871,1053],{"class":147},[127,49873,968],{"class":154},[127,49875,31037],{"class":147},[127,49877,49878],{"class":129,"line":34188},[127,49879,34069],{"class":133},[127,49881,49882],{"class":129,"line":34194},[127,49883,34075],{"class":133},[127,49885,49886],{"class":129,"line":34200},[127,49887,34081],{"class":133},[127,49889,49890,49892,49894,49896,49898,49900,49902],{"class":129,"line":34211},[127,49891,32267],{"class":147},[127,49893,893],{"class":154},[127,49895,1053],{"class":147},[127,49897,530],{"class":154},[127,49899,1053],{"class":147},[127,49901,893],{"class":154},[127,49903,687],{"class":147},[127,49905,49906],{"class":129,"line":34222},[127,49907,34104],{"class":133},[127,49909,49910],{"class":129,"line":34228},[127,49911,34110],{"class":133},[127,49913,49914],{"class":129,"line":34245},[127,49915,34116],{"class":133},[127,49917,49918],{"class":129,"line":34268},[127,49919,34122],{"class":133},[127,49921,49922],{"class":129,"line":34291},[127,49923,34128],{"class":133},[127,49925,49926,49928,49930,49932,49934,49936,49938,49940,49942],{"class":129,"line":34297},[127,49927,34134],{"class":147},[127,49929,34137],{"class":781},[127,49931,34140],{"class":147},[127,49933,34143],{"class":781},[127,49935,1053],{"class":147},[127,49937,34148],{"class":5758},[127,49939,725],{"class":290},[127,49941,34153],{"class":781},[127,49943,687],{"class":147},[127,49945,49946,49948,49950,49952,49954,49956,49958,49960,49962],{"class":129,"line":34302},[127,49947,34134],{"class":147},[127,49949,34137],{"class":781},[127,49951,34165],{"class":147},[127,49953,34168],{"class":781},[127,49955,1053],{"class":147},[127,49957,34148],{"class":5758},[127,49959,725],{"class":290},[127,49961,34177],{"class":781},[127,49963,687],{"class":147},[127,49965,49966],{"class":129,"line":34311},[127,49967,34185],{"class":133},[127,49969,49970],{"class":129,"line":34321},[127,49971,34191],{"class":147},[127,49973,49974],{"class":129,"line":34327},[127,49975,34197],{"class":133},[127,49977,49978,49980,49982],{"class":129,"line":34332},[127,49979,34203],{"class":147},[127,49981,34206],{"class":781},[127,49983,687],{"class":147},[127,49985,49986,49988,49990],{"class":129,"line":34338},[127,49987,34214],{"class":147},[127,49989,34217],{"class":781},[127,49991,687],{"class":147},[127,49993,49994],{"class":129,"line":34351},[127,49995,34225],{"class":133},[127,49997,49998,50000,50002,50004,50006,50008,50010],{"class":129,"line":34357},[127,49999,32267],{"class":147},[127,50001,893],{"class":154},[127,50003,1053],{"class":147},[127,50005,530],{"class":154},[127,50007,1053],{"class":147},[127,50009,530],{"class":154},[127,50011,687],{"class":147},[127,50013,50014,50016,50018,50020,50022,50024,50026,50028,50030],{"class":129,"line":34368},[127,50015,34134],{"class":147},[127,50017,34137],{"class":781},[127,50019,34252],{"class":147},[127,50021,34143],{"class":781},[127,50023,1053],{"class":147},[127,50025,34148],{"class":5758},[127,50027,725],{"class":290},[127,50029,34263],{"class":781},[127,50031,687],{"class":147},[127,50033,50034,50036,50038,50040,50042,50044,50046,50048,50050],{"class":129,"line":34379},[127,50035,34134],{"class":147},[127,50037,34137],{"class":781},[127,50039,34275],{"class":147},[127,50041,34168],{"class":781},[127,50043,1053],{"class":147},[127,50045,34148],{"class":5758},[127,50047,725],{"class":290},[127,50049,34286],{"class":781},[127,50051,687],{"class":147},[127,50053,50054],{"class":129,"line":34398},[127,50055,34294],{"class":133},[127,50057,50059],{"class":129,"line":50058},219,[127,50060,34191],{"class":147},[127,50062,50064,50066,50068],{"class":129,"line":50063},220,[127,50065,34203],{"class":147},[127,50067,34137],{"class":781},[127,50069,687],{"class":147},[127,50071,50073,50075,50077],{"class":129,"line":50072},221,[127,50074,34214],{"class":147},[127,50076,34316],{"class":781},[127,50078,687],{"class":147},[127,50080,50082],{"class":129,"line":50081},222,[127,50083,34324],{"class":147},[127,50085,50087],{"class":129,"line":50086},223,[127,50088,2942],{"emptyLinePlaceholder":606},[127,50090,50092],{"class":129,"line":50091},224,[127,50093,34335],{"class":133},[127,50095,50097,50099,50101,50103,50105],{"class":129,"line":50096},225,[127,50098,2075],{"class":290},[127,50100,31760],{"class":154},[127,50102,3491],{"class":290},[127,50104,31765],{"class":781},[127,50106,4281],{"class":147},[127,50108,50110],{"class":129,"line":50109},226,[127,50111,34354],{"class":133},[127,50113,50115,50117,50119],{"class":129,"line":50114},227,[127,50116,45086],{"class":147},[127,50118,725],{"class":290},[127,50120,45091],{"class":147},[127,50122,50124,50126,50128],{"class":129,"line":50123},228,[127,50125,34371],{"class":147},[127,50127,725],{"class":290},[127,50129,34376],{"class":147},[127,50131,50133,50135,50137,50139,50141,50143,50145],{"class":129,"line":50132},229,[127,50134,33933],{"class":147},[127,50136,725],{"class":290},[127,50138,45108],{"class":147},[127,50140,34389],{"class":5758},[127,50142,725],{"class":290},[127,50144,1581],{"class":154},[127,50146,687],{"class":147},[127,50148,50150],{"class":129,"line":50149},230,[127,50151,34401],{"class":147},[22539,50153,50155],{"id":50154},"_242测试代码","2.4.2.测试代码",[19,50157,50158],{},"使用测试集进行测试与推理",[117,50160,50162],{"className":30918,"code":50161,"language":30920,"meta":122,"style":122},"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",[124,50163,50164,50170,50180,50190,50201,50211,50215,50219,50227,50232,50236,50253,50257,50261,50265,50269,50273,50305,50309,50317,50321,50333,50337,50341,50345,50349,50353,50357,50361,50365,50383,50397,50401,50411,50421,50431,50437,50441,50445,50453,50457,50473,50481,50485,50489,50497,50505,50509,50513,50517,50521,50527,50531,50541,50549,50557,50561,50565,50569,50577,50581,50597,50601,50605,50609,50621,50625,50637,50641,50645,50657,50661,50671,50675,50679,50691,50695,50703,50707,50711,50719,50723,50731,50735,50739,50743,50747,50751,50767,50775,50779,50783,50801,50807,50811,50821,50829,50837,50841,50845,50849,50853,50861,50865,50881,50885,50893,50901],{"__ignoreMap":122},[127,50165,50166,50168],{"class":129,"line":130},[127,50167,30932],{"class":290},[127,50169,30935],{"class":147},[127,50171,50172,50174,50176,50178],{"class":129,"line":137},[127,50173,30932],{"class":290},[127,50175,31955],{"class":147},[127,50177,31923],{"class":290},[127,50179,31960],{"class":147},[127,50181,50182,50184,50186,50188],{"class":129,"line":151},[127,50183,31277],{"class":290},[127,50185,31938],{"class":147},[127,50187,30932],{"class":290},[127,50189,31943],{"class":147},[127,50191,50192,50194,50196,50198],{"class":129,"line":167},[127,50193,31277],{"class":290},[127,50195,31908],{"class":147},[127,50197,30932],{"class":290},[127,50199,50200],{"class":147}," ImageFolder\n",[127,50202,50203,50205,50207,50209],{"class":129,"line":415},[127,50204,31277],{"class":290},[127,50206,32454],{"class":147},[127,50208,30932],{"class":290},[127,50210,45180],{"class":147},[127,50212,50213],{"class":129,"line":421},[127,50214,2942],{"emptyLinePlaceholder":606},[127,50216,50217],{"class":129,"line":1766},[127,50218,34491],{"class":133},[127,50220,50221,50223,50225],{"class":129,"line":1856},[127,50222,32487],{"class":290},[127,50224,34498],{"class":143},[127,50226,32493],{"class":147},[127,50228,50229],{"class":129,"line":1862},[127,50230,50231],{"class":133},"   # 导入自己的数据集，并进行数据处理\n",[127,50233,50234],{"class":129,"line":1874},[127,50235,48501],{"class":133},[127,50237,50238,50240,50242,50244,50246,50248,50251],{"class":129,"line":2155},[127,50239,48506],{"class":154},[127,50241,725],{"class":290},[127,50243,1344],{"class":290},[127,50245,926],{"class":781},[127,50247,1233],{"class":154},[127,50249,50250],{"class":48517},"\u002Fdata\u002Ftest",[127,50252,25674],{"class":781},[127,50254,50255],{"class":129,"line":2160},[127,50256,2942],{"emptyLinePlaceholder":606},[127,50258,50259],{"class":129,"line":2166},[127,50260,48529],{"class":133},[127,50262,50263],{"class":129,"line":2171},[127,50264,48534],{"class":133},[127,50266,50267],{"class":129,"line":2185},[127,50268,48539],{"class":133},[127,50270,50271],{"class":129,"line":2190},[127,50272,48544],{"class":133},[127,50274,50275,50277,50279,50281,50283,50285,50287,50289,50291,50293,50295,50297,50299,50301,50303],{"class":129,"line":2196},[127,50276,48549],{"class":147},[127,50278,725],{"class":290},[127,50280,48554],{"class":147},[127,50282,48557],{"class":154},[127,50284,1053],{"class":147},[127,50286,48562],{"class":154},[127,50288,1053],{"class":147},[127,50290,48567],{"class":154},[127,50292,48570],{"class":147},[127,50294,48573],{"class":154},[127,50296,1053],{"class":147},[127,50298,48578],{"class":154},[127,50300,1053],{"class":147},[127,50302,48583],{"class":154},[127,50304,5199],{"class":147},[127,50306,50307],{"class":129,"line":2217},[127,50308,48590],{"class":133},[127,50310,50311,50313,50315],{"class":129,"line":2222},[127,50312,48595],{"class":147},[127,50314,725],{"class":290},[127,50316,48600],{"class":147},[127,50318,50319],{"class":129,"line":2236},[127,50320,48605],{"class":133},[127,50322,50323,50325,50327,50329,50331],{"class":129,"line":2241},[127,50324,48610],{"class":147},[127,50326,32041],{"class":154},[127,50328,1053],{"class":147},[127,50330,32041],{"class":154},[127,50332,43162],{"class":147},[127,50334,50335],{"class":129,"line":2270},[127,50336,48623],{"class":133},[127,50338,50339],{"class":129,"line":2275},[127,50340,48628],{"class":147},[127,50342,50343],{"class":129,"line":2292},[127,50344,48633],{"class":147},[127,50346,50347],{"class":129,"line":2297},[127,50348,48638],{"class":133},[127,50350,50351],{"class":129,"line":2302},[127,50352,48643],{"class":133},[127,50354,50355],{"class":129,"line":2307},[127,50356,2942],{"emptyLinePlaceholder":606},[127,50358,50359],{"class":129,"line":2321},[127,50360,48652],{"class":133},[127,50362,50363],{"class":129,"line":2326},[127,50364,48657],{"class":133},[127,50366,50367,50369,50371,50373,50375,50377,50379,50381],{"class":129,"line":3119},[127,50368,34505],{"class":147},[127,50370,725],{"class":290},[127,50372,48666],{"class":147},[127,50374,48669],{"class":154},[127,50376,1053],{"class":147},[127,50378,48674],{"class":5758},[127,50380,725],{"class":290},[127,50382,48679],{"class":147},[127,50384,50385,50387,50389,50391,50393,50395],{"class":129,"line":3133},[127,50386,34562],{"class":147},[127,50388,725],{"class":290},[127,50390,32074],{"class":147},[127,50392,32077],{"class":5758},[127,50394,725],{"class":290},[127,50396,34573],{"class":147},[127,50398,50399],{"class":129,"line":3141},[127,50400,34578],{"class":133},[127,50402,50403,50405,50407,50409],{"class":129,"line":3146},[127,50404,34583],{"class":5758},[127,50406,725],{"class":290},[127,50408,893],{"class":154},[127,50410,32006],{"class":147},[127,50412,50413,50415,50417,50419],{"class":129,"line":3152},[127,50414,34594],{"class":5758},[127,50416,725],{"class":290},[127,50418,32016],{"class":154},[127,50420,32006],{"class":147},[127,50422,50423,50425,50427,50429],{"class":129,"line":3158},[127,50424,34605],{"class":5758},[127,50426,725],{"class":290},[127,50428,867],{"class":154},[127,50430,687],{"class":147},[127,50432,50433,50435],{"class":129,"line":3163},[127,50434,4632],{"class":290},[127,50436,34618],{"class":147},[127,50438,50439],{"class":129,"line":8490},[127,50440,2942],{"emptyLinePlaceholder":606},[127,50442,50443],{"class":129,"line":8514},[127,50444,34627],{"class":133},[127,50446,50447,50449,50451],{"class":129,"line":8519},[127,50448,32487],{"class":290},[127,50450,34634],{"class":143},[127,50452,34637],{"class":147},[127,50454,50455],{"class":129,"line":8525},[127,50456,34642],{"class":133},[127,50458,50459,50461,50463,50465,50467,50469,50471],{"class":129,"line":8552},[127,50460,31777],{"class":147},[127,50462,725],{"class":290},[127,50464,31784],{"class":781},[127,50466,2247],{"class":290},[127,50468,31789],{"class":147},[127,50470,2244],{"class":290},[127,50472,34659],{"class":781},[127,50474,50475,50477,50479],{"class":129,"line":8557},[127,50476,31829],{"class":147},[127,50478,725],{"class":290},[127,50480,32829],{"class":147},[127,50482,50483],{"class":129,"line":8563},[127,50484,2942],{"emptyLinePlaceholder":606},[127,50486,50487],{"class":129,"line":8575},[127,50488,34676],{"class":133},[127,50490,50491,50493,50495],{"class":129,"line":8587},[127,50492,34681],{"class":147},[127,50494,725],{"class":290},[127,50496,32882],{"class":154},[127,50498,50499,50501,50503],{"class":129,"line":8599},[127,50500,34690],{"class":147},[127,50502,725],{"class":290},[127,50504,3627],{"class":154},[127,50506,50507],{"class":129,"line":10258},[127,50508,2942],{"emptyLinePlaceholder":606},[127,50510,50511],{"class":129,"line":10283},[127,50512,34703],{"class":133},[127,50514,50515],{"class":129,"line":10306},[127,50516,34708],{"class":133},[127,50518,50519],{"class":129,"line":10330},[127,50520,34713],{"class":133},[127,50522,50523,50525],{"class":129,"line":10335},[127,50524,34718],{"class":290},[127,50526,33424],{"class":147},[127,50528,50529],{"class":129,"line":10340},[127,50530,34725],{"class":133},[127,50532,50533,50535,50537,50539],{"class":129,"line":10345},[127,50534,3945],{"class":290},[127,50536,34732],{"class":147},[127,50538,26584],{"class":290},[127,50540,34737],{"class":147},[127,50542,50543,50545,50547],{"class":129,"line":10354},[127,50544,34742],{"class":147},[127,50546,725],{"class":290},[127,50548,34747],{"class":147},[127,50550,50551,50553,50555],{"class":129,"line":10359},[127,50552,34752],{"class":147},[127,50554,725],{"class":290},[127,50556,34757],{"class":147},[127,50558,50559],{"class":129,"line":10365},[127,50560,34762],{"class":133},[127,50562,50563],{"class":129,"line":10386},[127,50564,33415],{"class":147},[127,50566,50567],{"class":129,"line":10392},[127,50568,34771],{"class":133},[127,50570,50571,50573,50575],{"class":129,"line":10406},[127,50572,33200],{"class":147},[127,50574,725],{"class":290},[127,50576,34780],{"class":147},[127,50578,50579],{"class":129,"line":10412},[127,50580,34785],{"class":133},[127,50582,50583,50585,50587,50589,50591,50593,50595],{"class":129,"line":10439},[127,50584,33217],{"class":147},[127,50586,725],{"class":290},[127,50588,33222],{"class":147},[127,50590,33225],{"class":5758},[127,50592,725],{"class":290},[127,50594,893],{"class":154},[127,50596,687],{"class":147},[127,50598,50599],{"class":129,"line":10448},[127,50600,34806],{"class":133},[127,50602,50603],{"class":129,"line":10454},[127,50604,34811],{"class":133},[127,50606,50607],{"class":129,"line":10462},[127,50608,34816],{"class":133},[127,50610,50611,50613,50615,50617,50619],{"class":129,"line":10467},[127,50612,34821],{"class":147},[127,50614,10019],{"class":290},[127,50616,33327],{"class":147},[127,50618,3491],{"class":290},[127,50620,34830],{"class":147},[127,50622,50623],{"class":129,"line":17145},[127,50624,34835],{"class":133},[127,50626,50627,50629,50631,50633,50635],{"class":129,"line":17151},[127,50628,34840],{"class":147},[127,50630,10019],{"class":290},[127,50632,34845],{"class":147},[127,50634,867],{"class":154},[127,50636,687],{"class":147},[127,50638,50639],{"class":129,"line":17174},[127,50640,2942],{"emptyLinePlaceholder":606},[127,50642,50643],{"class":129,"line":17180},[127,50644,34858],{"class":133},[127,50646,50647,50649,50651,50653,50655],{"class":129,"line":17203},[127,50648,34863],{"class":147},[127,50650,725],{"class":290},[127,50652,34868],{"class":147},[127,50654,1259],{"class":290},[127,50656,34873],{"class":147},[127,50658,50659],{"class":129,"line":17217},[127,50660,34878],{"class":133},[127,50662,50663,50665,50667,50669],{"class":129,"line":17237},[127,50664,32991],{"class":154},[127,50666,681],{"class":147},[127,50668,34887],{"class":781},[127,50670,34890],{"class":147},[127,50672,50673],{"class":129,"line":17243},[127,50674,2942],{"emptyLinePlaceholder":606},[127,50676,50677],{"class":129,"line":17254},[127,50678,34899],{"class":133},[127,50680,50681,50683,50685,50687,50689],{"class":129,"line":17277},[127,50682,2075],{"class":290},[127,50684,31760],{"class":154},[127,50686,3491],{"class":290},[127,50688,31765],{"class":781},[127,50690,4281],{"class":147},[127,50692,50693],{"class":129,"line":17299},[127,50694,34916],{"class":133},[127,50696,50697,50699,50701],{"class":129,"line":17304},[127,50698,31829],{"class":147},[127,50700,725],{"class":290},[127,50702,45091],{"class":147},[127,50704,50705],{"class":129,"line":17310},[127,50706,34929],{"class":133},[127,50708,50709],{"class":129,"line":17324},[127,50710,34934],{"class":133},[127,50712,50713,50715,50717],{"class":129,"line":17337},[127,50714,34939],{"class":147},[127,50716,34942],{"class":781},[127,50718,31037],{"class":147},[127,50720,50721],{"class":129,"line":17342},[127,50722,34949],{"class":133},[127,50724,50725,50727,50729],{"class":129,"line":17356},[127,50726,34562],{"class":147},[127,50728,725],{"class":290},[127,50730,34958],{"class":147},[127,50732,50733],{"class":129,"line":17361},[127,50734,34963],{"class":133},[127,50736,50737],{"class":129,"line":17367},[127,50738,34968],{"class":147},[127,50740,50741],{"class":129,"line":17372},[127,50742,2942],{"emptyLinePlaceholder":606},[127,50744,50745],{"class":129,"line":17386},[127,50746,34977],{"class":133},[127,50748,50749],{"class":129,"line":17391},[127,50750,34982],{"class":133},[127,50752,50753,50755,50757,50759,50761,50763,50765],{"class":129,"line":17396},[127,50754,31777],{"class":147},[127,50756,725],{"class":290},[127,50758,31784],{"class":781},[127,50760,2247],{"class":290},[127,50762,31789],{"class":147},[127,50764,2244],{"class":290},[127,50766,34659],{"class":781},[127,50768,50769,50771,50773],{"class":129,"line":17410},[127,50770,31829],{"class":147},[127,50772,725],{"class":290},[127,50774,32829],{"class":147},[127,50776,50777],{"class":129,"line":17422},[127,50778,35011],{"class":133},[127,50780,50781],{"class":129,"line":17427},[127,50782,35016],{"class":133},[127,50784,50785,50787,50789,50791,50794,50796,50799],{"class":129,"line":17440},[127,50786,35021],{"class":147},[127,50788,725],{"class":290},[127,50790,1564],{"class":147},[127,50792,50793],{"class":781},"'猫'",[127,50795,1053],{"class":147},[127,50797,50798],{"class":781},"'狗'",[127,50800,33786],{"class":147},[127,50802,50803,50805],{"class":129,"line":17445},[127,50804,34718],{"class":290},[127,50806,33424],{"class":147},[127,50808,50809],{"class":129,"line":17450},[127,50810,35086],{"class":133},[127,50812,50813,50815,50817,50819],{"class":129,"line":17455},[127,50814,3945],{"class":290},[127,50816,35093],{"class":147},[127,50818,26584],{"class":290},[127,50820,34737],{"class":147},[127,50822,50823,50825,50827],{"class":129,"line":17468},[127,50824,33150],{"class":147},[127,50826,725],{"class":290},[127,50828,33155],{"class":147},[127,50830,50831,50833,50835],{"class":129,"line":17473},[127,50832,33165],{"class":147},[127,50834,725],{"class":290},[127,50836,33170],{"class":147},[127,50838,50839],{"class":129,"line":33173},[127,50840,2942],{"emptyLinePlaceholder":606},[127,50842,50843],{"class":129,"line":33179},[127,50844,35122],{"class":133},[127,50846,50847],{"class":129,"line":33185},[127,50848,33415],{"class":147},[127,50850,50851],{"class":129,"line":33191},[127,50852,35131],{"class":133},[127,50854,50855,50857,50859],{"class":129,"line":33197},[127,50856,33200],{"class":147},[127,50858,725],{"class":290},[127,50860,33205],{"class":147},[127,50862,50863],{"class":129,"line":33208},[127,50864,35144],{"class":133},[127,50866,50867,50869,50871,50873,50875,50877,50879],{"class":129,"line":33214},[127,50868,33217],{"class":147},[127,50870,725],{"class":290},[127,50872,33222],{"class":147},[127,50874,33225],{"class":5758},[127,50876,725],{"class":290},[127,50878,893],{"class":154},[127,50880,687],{"class":147},[127,50882,50883],{"class":129,"line":33234},[127,50884,35165],{"class":133},[127,50886,50887,50889,50891],{"class":129,"line":33240},[127,50888,35170],{"class":147},[127,50890,725],{"class":290},[127,50892,35175],{"class":147},[127,50894,50895,50897,50899],{"class":129,"line":33251},[127,50896,35180],{"class":147},[127,50898,725],{"class":290},[127,50900,35185],{"class":147},[127,50902,50903,50905,50907,50909,50911,50913,50915,50917],{"class":129,"line":33257},[127,50904,35190],{"class":154},[127,50906,681],{"class":147},[127,50908,35195],{"class":781},[127,50910,35198],{"class":147},[127,50912,35201],{"class":781},[127,50914,1053],{"class":147},[127,50916,35206],{"class":781},[127,50918,35209],{"class":147},[575,50920,50921],{},"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":122,"searchDepth":137,"depth":137,"links":50923},[50924,50925,50926,50927],{"id":31131,"depth":151,"text":31132},{"id":38379,"depth":151,"text":38380},{"id":41812,"depth":151,"text":41813},{"id":45821,"depth":151,"text":45822},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31123,"description":603},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50934,"title":50935,"body":50936,"description":603,"extension":604,"meta":50943,"navigation":606,"path":50944,"seo":50945,"stem":50946,"__hash__":50947},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50937,"toc":50941},[50938],[10,50939,50935],{"id":50940},"_3yolo模型学习",{"title":122,"searchDepth":137,"depth":137,"links":50942},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50935,"description":603},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50949,"title":50950,"body":50951,"description":50958,"extension":604,"meta":50959,"navigation":606,"path":50961,"seo":50962,"stem":50963,"__hash__":50964},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50952,"toc":50956},[50953],[19,50954,50955],{},"yolo模型还未补充",{"title":122,"searchDepth":137,"depth":137,"links":50957},[],"深度学习学习",{"category":50960},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50950,"description":50958},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50966,"title":50967,"body":50968,"description":603,"extension":604,"meta":50993,"navigation":606,"path":50994,"seo":50995,"stem":50996,"__hash__":50997},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50969,"toc":50991},[50970,50973,50976,50981,50988],[10,50971,50967],{"id":50972},"_1工具",[19,50974,50975],{},"提示错误插件：有问题会提前报错",[19,50977,50978],{},[23,50979],{"alt":122,"src":50980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50982,50983],{},[457,50984,50987],{"href":50985,"rel":50986},"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",[24405],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50989,50990],{},"alt键加上下箭头可以实现语句的移动",{"title":122,"searchDepth":137,"depth":137,"links":50992},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50967,"description":603},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50999,"title":51000,"body":51001,"description":603,"extension":604,"meta":53860,"navigation":606,"path":53861,"seo":53862,"stem":53863,"__hash__":53864},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51002,"toc":53811},[51003,51006,51010,51014,51019,51022,51027,51031,51038,51043,51050,51055,51062,51067,51071,51076,51079,51083,51088,51092,51097,51100,51103,51106,51109,51112,51115,51118,51121,51126,51131,51136,51140,51143,51146,51150,51155,51158,51166,51171,51188,51196,51201,51206,51211,51216,51221,51224,51229,51234,51238,51247,51252,51257,51261,51266,51269,51273,51278,51286,51291,51296,51299,51304,51309,51314,51317,51320,51323,51328,51333,51336,51341,51344,51349,51352,51355,51358,51363,51366,51369,51384,51389,51394,51399,51402,51405,51408,51422,51425,51430,51435,51438,51441,51444,51447,51450,51453,51456,51460,51464,51469,51473,51476,51481,51486,51489,51494,51497,51501,51506,51509,51512,51515,51518,51521,51524,51527,51530,51533,51537,51542,51547,51552,51555,51558,51562,51567,51570,51574,51577,51580,51585,51588,51591,51595,51599,51602,51607,51612,51615,51644,51649,51654,51659,51664,51668,51673,51677,51682,51685,51689,51693,51698,51702,51707,51712,51716,51721,51724,51726,51729,51734,51738,51743,51747,51751,51756,51761,51766,51771,51775,51780,51785,51790,51793,51796,51801,51804,51809,51814,51819,51824,51828,52630,52634,52977,52982,52985,52988,52991,52994,52997,53000,53003,53006,53008,53011,53013,53016,53020,53025,53028,53031,53034,53038,53043,53048,53068,53071,53075,53080,53085,53102,53106,53135,53139,53161,53163,53202,53210,53216,53220,53223,53226,53231,53236,53239,53242,53245,53250,53255,53258,53261,53264,53267,53270,53273,53276,53279,53282,53285,53288,53290,53293,53296,53299,53302,53305,53308,53311,53314,53318,53323,53326,53331,53334,53337,53340,53343,53346,53349,53352,53354,53357,53360,53363,53366,53369,53372,53376,53379,53388,53391,53396,53399,53404,53407,53410,53413,53416,53419,53422,53425,53429,53433,53436,53439,53444,53449,53454,53458,53463,53468,53471,53474,53477,53480,53483,53488,53491,53496,53498,53503,53506,53510,53515,53518,53521,53526,53530,53533,53538,53541,53544,53573,53578,53581,53584,53587,53590,53593,53597,53600,53686,53690,53693,53698,53703,53710,53713,53716,53719,53722,53725,53730,53735,53738,53741,53744,53747,53750,53753,53756,53759,53762,53764,53767,53771,53776,53781,53786,53789,53794,53799,53802,53805,53808],[10,51004,51000],{"id":51005},"_2基础语法",[14,51007,51009],{"id":51008},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[62,51011,51013],{"id":51012},"_211-js组成","2.1.1 js组成",[632,51015,51016],{},[635,51017,51018],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51020,51021],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[632,51023,51024],{"start":137},[635,51025,51026],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[62,51028,51030],{"id":51029},"_212-js书写位置","2.1.2 js书写位置",[632,51032,51033],{},[635,51034,51035],{},[30,51036,51037],{},"内部 JavaScript",[19,51039,51040],{},[23,51041],{"alt":122,"src":51042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[632,51044,51045],{"start":137},[635,51046,51047],{},[30,51048,51049],{},"外部 JavaScript",[19,51051,51052],{},[23,51053],{"alt":122,"src":51054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[632,51056,51057],{"start":151},[635,51058,51059],{},[30,51060,51061],{},"内联 JavaScript",[19,51063,51064],{},[23,51065],{"alt":122,"src":51066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[62,51068,51070],{"id":51069},"_213-javascript注释","2.1.3 JavaScript注释",[19,51072,51073],{},[23,51074],{"alt":122,"src":51075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51077,51078],{},"alt+shift+a一定要记住！",[62,51080,51082],{"id":51081},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51084,51085],{},[23,51086],{"alt":122,"src":51087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[62,51089,51091],{"id":51090},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[632,51093,51094],{},[635,51095,51096],{},"输出语法：",[19,51098,51099],{},"①document.write('要出的内容')",[19,51101,51102],{},"向body内输出内容；",[19,51104,51105],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51107,51108],{},"②alert('要出的内容')",[19,51110,51111],{},"页面弹出警告对话框",[19,51113,51114],{},"③console.log('控制台打印')",[19,51116,51117],{},"控制台输出语法，程序员调试使用",[19,51119,51120],{},"输入log就行，自动生成：",[19,51122,51123],{},[23,51124],{"alt":122,"src":51125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[632,51127,51128],{"start":137},[635,51129,51130],{},"输入语法：",[19,51132,51133],{},[23,51134],{"alt":122,"src":51135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[62,51137,51139],{"id":51138},"_2116-字面量","21.1.6 字面量",[19,51141,51142],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51144,51145],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51147,51149],{"id":51148},"_22-变量","2.2 变量",[632,51151,51152],{},[635,51153,51154],{},"变量声明",[19,51156,51157],{},"let 变量名",[1681,51159,51160,51163],{},[635,51161,51162],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[635,51164,51165],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[632,51167,51168],{"start":137},[635,51169,51170],{},"变量赋值",[117,51172,51176],{"className":51173,"code":51174,"language":51175,"meta":122,"style":122},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[124,51177,51178,51183],{"__ignoreMap":122},[127,51179,51180],{"class":129,"line":130},[127,51181,51182],{"class":147},"let age\n",[127,51184,51185],{"class":129,"line":137},[127,51186,51187],{"class":147},"age=18\n",[632,51189,51190,51193],{"start":151},[635,51191,51192],{},"连这些（变量的初始化）：let age=18",[635,51194,51195],{},"更新变量",[19,51197,51198],{},[23,51199],{"alt":122,"src":51200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[632,51202,51203],{"start":415},[635,51204,51205],{},"声明多个变量",[19,51207,51208],{},[23,51209],{"alt":122,"src":51210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[632,51212,51213],{"start":421},[635,51214,51215],{},"变量命名规则与规范",[19,51217,51218],{},[23,51219],{"alt":122,"src":51220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51222,51223],{},"遵守小驼峰！",[632,51225,51226],{"start":1766},[635,51227,51228],{},"变量拓展-let和var的区别",[19,51230,51231],{},[23,51232],{"alt":122,"src":51233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51235,51237],{"id":51236},"_23-数组","2.3 数组",[117,51239,51241],{"className":51173,"code":51240,"language":51175,"meta":122,"style":122},"let arr = []\n",[124,51242,51243],{"__ignoreMap":122},[127,51244,51245],{"class":129,"line":130},[127,51246,51240],{"class":147},[19,51248,51249],{},[23,51250],{"alt":122,"src":51251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51253,51254],{},[23,51255],{"alt":122,"src":51256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51258,51260],{"id":51259},"_24-常量","2.4 常量",[19,51262,51263],{},[23,51264],{"alt":122,"src":51265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51267,51268],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51270,51272],{"id":51271},"_25-数据类型","2.5 数据类型",[19,51274,51275],{},[23,51276],{"alt":122,"src":51277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[632,51279,51280,51283],{},[635,51281,51282],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[635,51284,51285],{},"算数运算符：",[19,51287,51288],{},[23,51289],{"alt":122,"src":51290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[632,51292,51293],{"start":151},[635,51294,51295],{},"数字类型（Number）",[19,51297,51298],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51300,51301],{},[23,51302],{"alt":122,"src":51303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[632,51305,51306],{"start":167},[635,51307,51308],{},"字符串类型（string）",[19,51310,51311],{},[23,51312],{"alt":122,"src":51313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51315,51316],{},"反引号也是可以使用的",[19,51318,51319],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51321,51322],{},"例如：document.write(\"我今年\"+age+\"岁\")",[632,51324,51325],{"start":415},[635,51326,51327],{},"模板字符串",[19,51329,51330],{},[23,51331],{"alt":122,"src":51332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51334,51335],{},"类似于python的字符串格式化",[632,51337,51338],{"start":421},[635,51339,51340],{},"布尔类型",[19,51342,51343],{},"true 和 false",[632,51345,51346],{"start":1766},[635,51347,51348],{},"未定义类型（underfined）",[19,51350,51351],{},"表示没有赋值",[19,51353,51354],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51356,51357],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[632,51359,51360],{"start":1856},[635,51361,51362],{},"null（空类型）",[19,51364,51365],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51367,51368],{},"赋值了，但是内容为空",[117,51370,51372],{"className":51173,"code":51371,"language":51175,"meta":122,"style":122},"typeof null\n输出的是'object'，是一个对象数据类型\n",[124,51373,51374,51379],{"__ignoreMap":122},[127,51375,51376],{"class":129,"line":130},[127,51377,51378],{"class":147},"typeof null\n",[127,51380,51381],{"class":129,"line":137},[127,51382,51383],{"class":147},"输出的是'object'，是一个对象数据类型\n",[632,51385,51386],{"start":1862},[635,51387,51388],{},"控制台检测数据类型",[19,51390,51391],{},[23,51392],{"alt":122,"src":51393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[632,51395,51396],{"start":1874},[635,51397,51398],{},"类型转换",[19,51400,51401],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51403,51404],{},"转换方式：隐式转换和显示转换",[19,51406,51407],{},"①隐式转换",[1681,51409,51410,51413,51416,51419],{},[635,51411,51412],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[635,51414,51415],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[635,51417,51418],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[635,51420,51421],{},"任何数据和字符串相加结果都是字符串",[19,51423,51424],{},"②显示转换",[19,51426,51427],{},[23,51428],{"alt":122,"src":51429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51431,51432],{},[23,51433],{"alt":122,"src":51434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51436,51437],{},"在输入的时候要用好隐式转换，简单写起来",[19,51439,51440],{},"let num = +prompt(’请输入数字：‘)",[19,51442,51443],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51445,51446],{},"console.log(parseInt('12.333px'))",[19,51448,51449],{},"输出为：12",[19,51451,51452],{},"console.log(parseInt('a'a'a12.333px'))",[19,51454,51455],{},"输出：NaN",[14,51457,51459],{"id":51458},"_26-运算符","2.6 运算符",[62,51461,51463],{"id":51462},"_261-赋值运算符","2.6.1 赋值运算符",[19,51465,51466],{},[23,51467],{"alt":122,"src":51468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[62,51470,51472],{"id":51471},"_262-一元运算符","2.6.2 一元运算符",[19,51474,51475],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51477,51478],{},[23,51479],{"alt":122,"src":51480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51482,51483],{},[23,51484],{"alt":122,"src":51485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51487,51488],{},"两者的区别：",[19,51490,51491],{},[23,51492],{"alt":122,"src":51493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51495,51496],{},"前置先自加；后置后加，代码执行完之后再加",[62,51498,51500],{"id":51499},"_263-比较运算符","2.6.3 比较运算符",[19,51502,51503],{},[23,51504],{"alt":122,"src":51505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51507,51508],{},"比较运算符也有隐式转换",[19,51510,51511],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51513,51514],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51516,51517],{},"要使用三等，开发的时候",[19,51519,51520],{},"NaN不等于任何人，包括它自己",[19,51522,51523],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51525,51526],{},"7\u002F10=0.7",[19,51528,51529],{},"最后：0.5+0.2=0.7",[19,51531,51532],{},"字符串比较，比较的是字符对应的ASCII码",[62,51534,51536],{"id":51535},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51538,51539],{},[23,51540],{"alt":122,"src":51541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51543,51544],{},[23,51545],{"alt":122,"src":51546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51548,51549],{},[23,51550],{"alt":122,"src":51551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51553,51554],{},"上述题目选D",[19,51556,51557],{},"与真2假1；或真1假2",[62,51559,51561],{"id":51560},"_265-运算符优先级","2.6.5 运算符优先级",[19,51563,51564],{},[23,51565],{"alt":122,"src":51566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51568,51569],{},"先算逻辑与，后算逻辑或",[14,51571,51573],{"id":51572},"_27-语句","2.7 语句",[19,51575,51576],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51578,51579],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51581,51582],{},[23,51583],{"alt":122,"src":51584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51586,51587],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51589,51590],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[62,51592,51594],{"id":51593},"_271-分支语句","2.7.1 分支语句",[22539,51596,51598],{"id":51597},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51600,51601],{},"if语句单行简单的话，可以不写{}，写在一行就行",[632,51603,51604],{},[635,51605,51606],{},"单分支语句",[19,51608,51609],{},[23,51610],{"alt":122,"src":51611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51613,51614],{},"除了0，所有数字都为真",[117,51616,51618],{"className":51173,"code":51617,"language":51175,"meta":122,"style":122},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[124,51619,51620,51625,51630,51635,51639],{"__ignoreMap":122},[127,51621,51622],{"class":129,"line":130},[127,51623,51624],{"class":147},"if（0) {\n",[127,51626,51627],{"class":129,"line":137},[127,51628,51629],{"class":147},"    let a=1\n",[127,51631,51632],{"class":129,"line":151},[127,51633,51634],{"class":147},"    alert(typeof a)\n",[127,51636,51637],{"class":129,"line":167},[127,51638,170],{"class":147},[127,51640,51641],{"class":129,"line":415},[127,51642,51643],{"class":147},"不输出，括号为假\n",[632,51645,51646],{"start":137},[635,51647,51648],{},"双分支语句",[19,51650,51651],{},[23,51652],{"alt":122,"src":51653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[632,51655,51656],{"start":151},[635,51657,51658],{},"多分支语句",[19,51660,51661],{},[23,51662],{"alt":122,"src":51663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22539,51665,51667],{"id":51666},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51669,51670],{},[23,51671],{"alt":122,"src":51672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22539,51674,51676],{"id":51675},"_2713-switch语句","2.7.1.3 switch语句",[19,51678,51679],{},[23,51680],{"alt":122,"src":51681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51683,51684],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[62,51686,51688],{"id":51687},"_272-循环语句","2.7.2 循环语句",[22539,51690,51692],{"id":51691},"_2721-断点演示","2.7.2.1 断点演示",[19,51694,51695],{},[23,51696],{"alt":122,"src":51697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22539,51699,51701],{"id":51700},"_2722-while循环","2.7.2.2 while循环",[19,51703,51704],{},[23,51705],{"alt":122,"src":51706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51708,51709],{},[23,51710],{"alt":122,"src":51711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22539,51713,51715],{"id":51714},"_2723-for循环","2.7.2.3 for循环",[19,51717,51718],{},[23,51719],{"alt":122,"src":51720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51722,51723],{},"for(;;) {",[19,51725,1620],{},[19,51727,51728],{},"表示无限循环",[19,51730,51731],{},[23,51732],{"alt":122,"src":51733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22539,51735,51737],{"id":51736},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51739,51740],{},[23,51741],{"alt":122,"src":51742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51744,51746],{"id":51745},"_28-数组","2.8 数组",[62,51748,51750],{"id":51749},"_281-基础认识","2.8.1 基础认识",[19,51752,51753],{},[23,51754],{"alt":122,"src":51755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51757,51758],{},[23,51759],{"alt":122,"src":51760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51762,51763],{},[23,51764],{"alt":122,"src":51765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51767,51768],{},[23,51769],{"alt":122,"src":51770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[62,51772,51774],{"id":51773},"_282-操作数组","2.8.2 操作数组",[19,51776,51777],{},[23,51778],{"alt":122,"src":51779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[632,51781,51782],{},[635,51783,51784],{},"添加元素",[19,51786,51787],{},[23,51788],{"alt":122,"src":51789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51791,51792],{},"console.log(arr.push('green'))",[19,51794,51795],{},"输出结果：为新数组的长度",[19,51797,51798],{},[23,51799],{"alt":122,"src":51800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51802,51803],{},"push用的非常多，一定要记住",[632,51805,51806],{},[635,51807,51808],{},"删除元素",[19,51810,51811],{},[23,51812],{"alt":122,"src":51813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51815,51816],{},[23,51817],{"alt":122,"src":51818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51820,51821],{},[23,51822],{"alt":122,"src":51823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[62,51825,51827],{"id":51826},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[117,51829,51831],{"className":51173,"code":51830,"language":51175,"meta":122,"style":122},"\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",[124,51832,51833,51847,51863,51867,51876,51894,51918,51940,51954,51962,51969,51980,51991,51995,51999,52006,52018,52032,52045,52064,52081,52096,52108,52120,52131,52135,52139,52150,52160,52172,52184,52196,52207,52211,52215,52227,52231,52245,52249,52253,52264,52278,52290,52304,52308,52317,52326,52330,52338,52342,52351,52356,52361,52374,52402,52407,52412,52437,52442,52446,52451,52456,52471,52475,52480,52510,52522,52538,52554,52568,52573,52580,52584,52589,52602,52610,52618,52622],{"__ignoreMap":122},[127,51834,51835,51838,51841,51844],{"class":129,"line":130},[127,51836,51837],{"class":147},"\u003C!",[127,51839,51840],{"class":140},"DOCTYPE",[127,51842,51843],{"class":143}," html",[127,51845,51846],{"class":147},">\n",[127,51848,51849,51851,51853,51856,51858,51861],{"class":129,"line":137},[127,51850,1584],{"class":147},[127,51852,51175],{"class":140},[127,51854,51855],{"class":143}," lang",[127,51857,725],{"class":147},[127,51859,51860],{"class":781},"\"en\"",[127,51862,51846],{"class":147},[127,51864,51865],{"class":129,"line":151},[127,51866,2942],{"emptyLinePlaceholder":606},[127,51868,51869,51871,51874],{"class":129,"line":167},[127,51870,1584],{"class":147},[127,51872,51873],{"class":140},"head",[127,51875,51846],{"class":147},[127,51877,51878,51881,51884,51887,51889,51892],{"class":129,"line":415},[127,51879,51880],{"class":147},"    \u003C",[127,51882,51883],{"class":140},"meta",[127,51885,51886],{"class":143}," charset",[127,51888,725],{"class":147},[127,51890,51891],{"class":781},"\"UTF-8\"",[127,51893,51846],{"class":147},[127,51895,51896,51898,51900,51903,51905,51908,51911,51913,51916],{"class":129,"line":421},[127,51897,51880],{"class":147},[127,51899,51883],{"class":140},[127,51901,51902],{"class":143}," http-equiv",[127,51904,725],{"class":147},[127,51906,51907],{"class":781},"\"X-UA-Compatible\"",[127,51909,51910],{"class":143}," content",[127,51912,725],{"class":147},[127,51914,51915],{"class":781},"\"IE=edge\"",[127,51917,51846],{"class":147},[127,51919,51920,51922,51924,51926,51928,51931,51933,51935,51938],{"class":129,"line":1766},[127,51921,51880],{"class":147},[127,51923,51883],{"class":140},[127,51925,15462],{"class":143},[127,51927,725],{"class":147},[127,51929,51930],{"class":781},"\"viewport\"",[127,51932,51910],{"class":143},[127,51934,725],{"class":147},[127,51936,51937],{"class":781},"\"width=device-width, initial-scale=1.0\"",[127,51939,51846],{"class":147},[127,51941,51942,51944,51947,51950,51952],{"class":129,"line":1856},[127,51943,51880],{"class":147},[127,51945,51946],{"class":140},"title",[127,51948,51949],{"class":147},">Document\u003C\u002F",[127,51951,51946],{"class":140},[127,51953,51846],{"class":147},[127,51955,51956,51958,51960],{"class":129,"line":1862},[127,51957,51880],{"class":147},[127,51959,575],{"class":140},[127,51961,51846],{"class":147},[127,51963,51964,51967],{"class":129,"line":1874},[127,51965,51966],{"class":140},"        *",[127,51968,148],{"class":147},[127,51970,51971,51974,51976,51978],{"class":129,"line":2155},[127,51972,51973],{"class":154},"            margin",[127,51975,158],{"class":147},[127,51977,867],{"class":154},[127,51979,164],{"class":147},[127,51981,51982,51985,51987,51989],{"class":129,"line":2160},[127,51983,51984],{"class":154},"            padding",[127,51986,158],{"class":147},[127,51988,867],{"class":154},[127,51990,164],{"class":147},[127,51992,51993],{"class":129,"line":2166},[127,51994,3071],{"class":147},[127,51996,51997],{"class":129,"line":2171},[127,51998,2942],{"emptyLinePlaceholder":606},[127,52000,52001,52004],{"class":129,"line":2185},[127,52002,52003],{"class":143},"        .box",[127,52005,148],{"class":147},[127,52007,52008,52011,52013,52016],{"class":129,"line":2190},[127,52009,52010],{"class":154},"            display",[127,52012,158],{"class":147},[127,52014,52015],{"class":154},"flex",[127,52017,164],{"class":147},[127,52019,52020,52023,52025,52028,52030],{"class":129,"line":2196},[127,52021,52022],{"class":154},"            width",[127,52024,158],{"class":147},[127,52026,52027],{"class":154},"700",[127,52029,291],{"class":290},[127,52031,164],{"class":147},[127,52033,52034,52037,52039,52041,52043],{"class":129,"line":2217},[127,52035,52036],{"class":154},"            height",[127,52038,158],{"class":147},[127,52040,4515],{"class":154},[127,52042,291],{"class":290},[127,52044,164],{"class":147},[127,52046,52047,52050,52052,52054,52056,52059,52062],{"class":129,"line":2222},[127,52048,52049],{"class":154},"            border-left",[127,52051,158],{"class":147},[127,52053,893],{"class":154},[127,52055,291],{"class":290},[127,52057,52058],{"class":154}," solid",[127,52060,52061],{"class":154}," pink",[127,52063,164],{"class":147},[127,52065,52066,52069,52071,52073,52075,52077,52079],{"class":129,"line":2236},[127,52067,52068],{"class":154},"            border-bottom",[127,52070,158],{"class":147},[127,52072,893],{"class":154},[127,52074,291],{"class":290},[127,52076,52058],{"class":154},[127,52078,52061],{"class":154},[127,52080,164],{"class":147},[127,52082,52083,52085,52087,52089,52091,52094],{"class":129,"line":2241},[127,52084,51973],{"class":154},[127,52086,158],{"class":147},[127,52088,1330],{"class":154},[127,52090,291],{"class":290},[127,52092,52093],{"class":154}," auto",[127,52095,164],{"class":147},[127,52097,52098,52101,52103,52106],{"class":129,"line":2270},[127,52099,52100],{"class":154},"            justify-content",[127,52102,158],{"class":147},[127,52104,52105],{"class":154},"space-around",[127,52107,164],{"class":147},[127,52109,52110,52113,52115,52118],{"class":129,"line":2275},[127,52111,52112],{"class":154},"            align-items",[127,52114,158],{"class":147},[127,52116,52117],{"class":154},"flex-end",[127,52119,164],{"class":147},[127,52121,52122,52125,52127,52129],{"class":129,"line":2292},[127,52123,52124],{"class":154},"            text-align",[127,52126,158],{"class":147},[127,52128,161],{"class":154},[127,52130,164],{"class":147},[127,52132,52133],{"class":129,"line":2297},[127,52134,3071],{"class":147},[127,52136,52137],{"class":129,"line":2302},[127,52138,2942],{"emptyLinePlaceholder":606},[127,52140,52141,52143,52145,52148],{"class":129,"line":2307},[127,52142,52003],{"class":143},[127,52144,1634],{"class":290},[127,52146,52147],{"class":140},"div",[127,52149,148],{"class":147},[127,52151,52152,52154,52156,52158],{"class":129,"line":2321},[127,52153,52010],{"class":154},[127,52155,158],{"class":147},[127,52157,52015],{"class":154},[127,52159,164],{"class":147},[127,52161,52162,52164,52166,52168,52170],{"class":129,"line":2326},[127,52163,52022],{"class":154},[127,52165,158],{"class":147},[127,52167,1330],{"class":154},[127,52169,291],{"class":290},[127,52171,164],{"class":147},[127,52173,52174,52177,52179,52182],{"class":129,"line":3119},[127,52175,52176],{"class":154},"            background-color",[127,52178,158],{"class":147},[127,52180,52181],{"class":154},"pink",[127,52183,164],{"class":147},[127,52185,52186,52189,52191,52194],{"class":129,"line":3133},[127,52187,52188],{"class":154},"            flex-direction",[127,52190,158],{"class":147},[127,52192,52193],{"class":154},"column",[127,52195,164],{"class":147},[127,52197,52198,52200,52202,52205],{"class":129,"line":3141},[127,52199,52100],{"class":154},[127,52201,158],{"class":147},[127,52203,52204],{"class":154},"space-between",[127,52206,164],{"class":147},[127,52208,52209],{"class":129,"line":3146},[127,52210,3071],{"class":147},[127,52212,52213],{"class":129,"line":3152},[127,52214,2942],{"emptyLinePlaceholder":606},[127,52216,52217,52219,52222,52225],{"class":129,"line":3158},[127,52218,52003],{"class":143},[127,52220,52221],{"class":140}," div",[127,52223,52224],{"class":140}," span",[127,52226,148],{"class":147},[127,52228,52229],{"class":129,"line":3163},[127,52230,2942],{"emptyLinePlaceholder":606},[127,52232,52233,52236,52238,52241,52243],{"class":129,"line":8490},[127,52234,52235],{"class":154},"            margin-top",[127,52237,158],{"class":147},[127,52239,52240],{"class":154},"-20",[127,52242,291],{"class":290},[127,52244,164],{"class":147},[127,52246,52247],{"class":129,"line":8514},[127,52248,3071],{"class":147},[127,52250,52251],{"class":129,"line":8519},[127,52252,2942],{"emptyLinePlaceholder":606},[127,52254,52255,52257,52259,52262],{"class":129,"line":8525},[127,52256,52003],{"class":143},[127,52258,52221],{"class":140},[127,52260,52261],{"class":140}," h4",[127,52263,148],{"class":147},[127,52265,52266,52269,52271,52274,52276],{"class":129,"line":8552},[127,52267,52268],{"class":154},"            margin-bottom",[127,52270,158],{"class":147},[127,52272,52273],{"class":154},"-35",[127,52275,291],{"class":290},[127,52277,164],{"class":147},[127,52279,52280,52282,52284,52286,52288],{"class":129,"line":8557},[127,52281,52022],{"class":154},[127,52283,158],{"class":147},[127,52285,1031],{"class":154},[127,52287,291],{"class":290},[127,52289,164],{"class":147},[127,52291,52292,52295,52297,52300,52302],{"class":129,"line":8563},[127,52293,52294],{"class":154},"            margin-left",[127,52296,158],{"class":147},[127,52298,52299],{"class":154},"-10",[127,52301,291],{"class":290},[127,52303,164],{"class":147},[127,52305,52306],{"class":129,"line":8575},[127,52307,3071],{"class":147},[127,52309,52310,52313,52315],{"class":129,"line":8587},[127,52311,52312],{"class":147},"    \u003C\u002F",[127,52314,575],{"class":140},[127,52316,51846],{"class":147},[127,52318,52319,52322,52324],{"class":129,"line":8599},[127,52320,52321],{"class":147},"\u003C\u002F",[127,52323,51873],{"class":140},[127,52325,51846],{"class":147},[127,52327,52328],{"class":129,"line":10258},[127,52329,2942],{"emptyLinePlaceholder":606},[127,52331,52332,52334,52336],{"class":129,"line":10283},[127,52333,1584],{"class":147},[127,52335,275],{"class":140},[127,52337,51846],{"class":147},[127,52339,52340],{"class":129,"line":10306},[127,52341,2942],{"emptyLinePlaceholder":606},[127,52343,52344,52346,52349],{"class":129,"line":10330},[127,52345,51880],{"class":147},[127,52347,52348],{"class":140},"script",[127,52350,51846],{"class":147},[127,52352,52353],{"class":129,"line":10335},[127,52354,52355],{"class":133},"        \u002F\u002F 1. 四次弹框效果\n",[127,52357,52358],{"class":129,"line":10340},[127,52359,52360],{"class":133},"        \u002F\u002F 声明一个新的数组\n",[127,52362,52363,52366,52369,52371],{"class":129,"line":10345},[127,52364,52365],{"class":290},"        let",[127,52367,52368],{"class":147}," arr ",[127,52370,725],{"class":290},[127,52372,52373],{"class":147}," []\n",[127,52375,52376,52378,52380,52383,52385,52387,52389,52391,52393,52396,52398,52400],{"class":129,"line":10354},[127,52377,3945],{"class":290},[127,52379,2201],{"class":147},[127,52381,52382],{"class":290},"let",[127,52384,9980],{"class":147},[127,52386,725],{"class":290},[127,52388,25659],{"class":154},[127,52390,9987],{"class":147},[127,52392,2131],{"class":290},[127,52394,52395],{"class":154}," 4",[127,52397,3756],{"class":147},[127,52399,2834],{"class":290},[127,52401,12984],{"class":147},[127,52403,52404],{"class":129,"line":10359},[127,52405,52406],{"class":133},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[127,52408,52409],{"class":129,"line":10365},[127,52410,52411],{"class":133},"            \u002F\u002F arr.push(num)\n",[127,52413,52414,52417,52420,52422,52425,52427,52430,52432,52435],{"class":129,"line":10386},[127,52415,52416],{"class":147},"            arr.",[127,52418,52419],{"class":143},"push",[127,52421,681],{"class":147},[127,52423,52424],{"class":143},"prompt",[127,52426,681],{"class":147},[127,52428,52429],{"class":781},"`请输入第${",[127,52431,1116],{"class":147},[127,52433,52434],{"class":781},"}季度的数据:`",[127,52436,31037],{"class":147},[127,52438,52439],{"class":129,"line":10392},[127,52440,52441],{"class":133},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[127,52443,52444],{"class":129,"line":10406},[127,52445,3071],{"class":147},[127,52447,52448],{"class":129,"line":10412},[127,52449,52450],{"class":133},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[127,52452,52453],{"class":129,"line":10439},[127,52454,52455],{"class":133},"        \u002F\u002F 盒子开头\n",[127,52457,52458,52461,52464,52466,52469],{"class":129,"line":10448},[127,52459,52460],{"class":147},"        document.",[127,52462,52463],{"class":143},"write",[127,52465,681],{"class":147},[127,52467,52468],{"class":781},"` \u003Cdiv class=\"box\">`",[127,52470,687],{"class":147},[127,52472,52473],{"class":129,"line":10454},[127,52474,2942],{"emptyLinePlaceholder":606},[127,52476,52477],{"class":129,"line":10462},[127,52478,52479],{"class":133},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[127,52481,52482,52484,52486,52488,52490,52492,52494,52496,52498,52501,52504,52506,52508],{"class":129,"line":10467},[127,52483,3945],{"class":290},[127,52485,2201],{"class":147},[127,52487,52382],{"class":290},[127,52489,9980],{"class":147},[127,52491,725],{"class":290},[127,52493,4635],{"class":154},[127,52495,9987],{"class":147},[127,52497,1584],{"class":290},[127,52499,52500],{"class":147}," arr.",[127,52502,52503],{"class":154},"length",[127,52505,3756],{"class":147},[127,52507,2834],{"class":290},[127,52509,12984],{"class":147},[127,52511,52512,52515,52517,52519],{"class":129,"line":17145},[127,52513,52514],{"class":147},"            document.",[127,52516,52463],{"class":143},[127,52518,681],{"class":147},[127,52520,52521],{"class":781},"`\n",[127,52523,52524,52527,52529,52531,52533,52535],{"class":129,"line":17151},[127,52525,52526],{"class":781},"              \u003Cdiv style=\"height: ${",[127,52528,4422],{"class":147},[127,52530,1564],{"class":781},[127,52532,1116],{"class":147},[127,52534,1614],{"class":781},[127,52536,52537],{"class":781},"}px;\">\n",[127,52539,52540,52543,52545,52547,52549,52551],{"class":129,"line":17174},[127,52541,52542],{"class":781},"                \u003Cspan>${",[127,52544,4422],{"class":147},[127,52546,1564],{"class":781},[127,52548,1116],{"class":147},[127,52550,1614],{"class":781},[127,52552,52553],{"class":781},"}\u003C\u002Fspan>\n",[127,52555,52556,52559,52561,52563,52565],{"class":129,"line":17180},[127,52557,52558],{"class":781},"                \u003Ch4>第${",[127,52560,1116],{"class":147},[127,52562,46106],{"class":290},[127,52564,25659],{"class":154},[127,52566,52567],{"class":781},"}季度\u003C\u002Fh4>\n",[127,52569,52570],{"class":129,"line":17203},[127,52571,52572],{"class":781},"              \u003C\u002Fdiv>          \n",[127,52574,52575,52578],{"class":129,"line":17217},[127,52576,52577],{"class":781},"            `",[127,52579,687],{"class":147},[127,52581,52582],{"class":129,"line":17237},[127,52583,3071],{"class":147},[127,52585,52586],{"class":129,"line":17243},[127,52587,52588],{"class":133},"        \u002F\u002F 盒子结尾\n",[127,52590,52591,52593,52595,52597,52600],{"class":129,"line":17254},[127,52592,52460],{"class":147},[127,52594,52463],{"class":143},[127,52596,681],{"class":147},[127,52598,52599],{"class":781},"` \u003C\u002Fdiv>`",[127,52601,687],{"class":147},[127,52603,52604,52606,52608],{"class":129,"line":17277},[127,52605,52312],{"class":147},[127,52607,52348],{"class":140},[127,52609,51846],{"class":147},[127,52611,52612,52614,52616],{"class":129,"line":17299},[127,52613,52321],{"class":147},[127,52615,275],{"class":140},[127,52617,51846],{"class":147},[127,52619,52620],{"class":129,"line":17304},[127,52621,2942],{"emptyLinePlaceholder":606},[127,52623,52624,52626,52628],{"class":129,"line":17310},[127,52625,52321],{"class":147},[127,52627,51175],{"class":140},[127,52629,51846],{"class":147},[62,52631,52633],{"id":52632},"_284-冒泡排序","2.8.4 冒泡排序",[117,52635,52637],{"className":51173,"code":52636,"language":51175,"meta":122,"style":122},"\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",[124,52638,52639,52649,52663,52667,52675,52690,52710,52722,52730,52734,52742,52750,52782,52815,52852,52857,52876,52881,52894,52909,52925,52929,52934,52938,52948,52957,52965,52969],{"__ignoreMap":122},[127,52640,52641,52643,52645,52647],{"class":129,"line":130},[127,52642,51837],{"class":147},[127,52644,51840],{"class":140},[127,52646,51843],{"class":143},[127,52648,51846],{"class":147},[127,52650,52651,52653,52655,52657,52659,52661],{"class":129,"line":137},[127,52652,1584],{"class":147},[127,52654,51175],{"class":140},[127,52656,51855],{"class":143},[127,52658,725],{"class":147},[127,52660,51860],{"class":781},[127,52662,51846],{"class":147},[127,52664,52665],{"class":129,"line":151},[127,52666,2942],{"emptyLinePlaceholder":606},[127,52668,52669,52671,52673],{"class":129,"line":167},[127,52670,1584],{"class":147},[127,52672,51873],{"class":140},[127,52674,51846],{"class":147},[127,52676,52677,52680,52682,52684,52686,52688],{"class":129,"line":415},[127,52678,52679],{"class":147},"  \u003C",[127,52681,51883],{"class":140},[127,52683,51886],{"class":143},[127,52685,725],{"class":147},[127,52687,51891],{"class":781},[127,52689,51846],{"class":147},[127,52691,52692,52694,52696,52698,52700,52702,52704,52706,52708],{"class":129,"line":421},[127,52693,52679],{"class":147},[127,52695,51883],{"class":140},[127,52697,15462],{"class":143},[127,52699,725],{"class":147},[127,52701,51930],{"class":781},[127,52703,51910],{"class":143},[127,52705,725],{"class":147},[127,52707,51937],{"class":781},[127,52709,51846],{"class":147},[127,52711,52712,52714,52716,52718,52720],{"class":129,"line":1766},[127,52713,52679],{"class":147},[127,52715,51946],{"class":140},[127,52717,51949],{"class":147},[127,52719,51946],{"class":140},[127,52721,51846],{"class":147},[127,52723,52724,52726,52728],{"class":129,"line":1856},[127,52725,52321],{"class":147},[127,52727,51873],{"class":140},[127,52729,51846],{"class":147},[127,52731,52732],{"class":129,"line":1862},[127,52733,2942],{"emptyLinePlaceholder":606},[127,52735,52736,52738,52740],{"class":129,"line":1874},[127,52737,1584],{"class":147},[127,52739,275],{"class":140},[127,52741,51846],{"class":147},[127,52743,52744,52746,52748],{"class":129,"line":2155},[127,52745,52679],{"class":147},[127,52747,52348],{"class":140},[127,52749,51846],{"class":147},[127,52751,52752,52755,52757,52759,52762,52764,52766,52768,52770,52772,52774,52776,52778,52780],{"class":129,"line":2160},[127,52753,52754],{"class":290},"    let",[127,52756,52368],{"class":147},[127,52758,725],{"class":290},[127,52760,52761],{"class":147}," [",[127,52763,994],{"class":154},[127,52765,12977],{"class":147},[127,52767,968],{"class":154},[127,52769,12977],{"class":147},[127,52771,749],{"class":154},[127,52773,12977],{"class":147},[127,52775,530],{"class":154},[127,52777,12977],{"class":147},[127,52779,893],{"class":154},[127,52781,33786],{"class":147},[127,52783,52784,52786,52788,52790,52792,52794,52796,52798,52800,52802,52804,52807,52809,52811,52813],{"class":129,"line":2166},[127,52785,3743],{"class":290},[127,52787,2201],{"class":147},[127,52789,52382],{"class":290},[127,52791,9980],{"class":147},[127,52793,725],{"class":290},[127,52795,4635],{"class":154},[127,52797,9987],{"class":147},[127,52799,1584],{"class":290},[127,52801,52500],{"class":147},[127,52803,52503],{"class":154},[127,52805,52806],{"class":290}," -",[127,52808,25659],{"class":154},[127,52810,3756],{"class":147},[127,52812,2834],{"class":290},[127,52814,12984],{"class":147},[127,52816,52817,52820,52822,52824,52826,52828,52830,52832,52834,52836,52838,52840,52842,52844,52846,52848,52850],{"class":129,"line":2171},[127,52818,52819],{"class":290},"      for",[127,52821,2201],{"class":147},[127,52823,52382],{"class":290},[127,52825,10042],{"class":147},[127,52827,725],{"class":290},[127,52829,4635],{"class":154},[127,52831,10049],{"class":147},[127,52833,1584],{"class":290},[127,52835,52500],{"class":147},[127,52837,52503],{"class":154},[127,52839,52806],{"class":290},[127,52841,9980],{"class":147},[127,52843,1207],{"class":290},[127,52845,25659],{"class":154},[127,52847,10056],{"class":147},[127,52849,2834],{"class":290},[127,52851,12984],{"class":147},[127,52853,52854],{"class":129,"line":2185},[127,52855,52856],{"class":133},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[127,52858,52859,52861,52864,52866,52869,52871,52873],{"class":129,"line":2190},[127,52860,3039],{"class":290},[127,52862,52863],{"class":147}," (arr[j] ",[127,52865,1634],{"class":290},[127,52867,52868],{"class":147}," arr[j ",[127,52870,1156],{"class":290},[127,52872,25659],{"class":154},[127,52874,52875],{"class":147},"]) {\n",[127,52877,52878],{"class":129,"line":2196},[127,52879,52880],{"class":133},"          \u002F\u002F 交换两个变量\n",[127,52882,52883,52886,52889,52891],{"class":129,"line":2217},[127,52884,52885],{"class":290},"          let",[127,52887,52888],{"class":147}," tmp ",[127,52890,725],{"class":290},[127,52892,52893],{"class":147}," arr[j]\n",[127,52895,52896,52899,52901,52903,52905,52907],{"class":129,"line":2222},[127,52897,52898],{"class":147},"          arr[j] ",[127,52900,725],{"class":290},[127,52902,52868],{"class":147},[127,52904,1156],{"class":290},[127,52906,25659],{"class":154},[127,52908,33786],{"class":147},[127,52910,52911,52914,52916,52918,52920,52922],{"class":129,"line":2236},[127,52912,52913],{"class":147},"          arr[j ",[127,52915,1156],{"class":290},[127,52917,25659],{"class":154},[127,52919,4985],{"class":147},[127,52921,725],{"class":290},[127,52923,52924],{"class":147}," tmp\n",[127,52926,52927],{"class":129,"line":2241},[127,52928,3071],{"class":147},[127,52930,52931],{"class":129,"line":2270},[127,52932,52933],{"class":147},"      }\n",[127,52935,52936],{"class":129,"line":2275},[127,52937,2729],{"class":147},[127,52939,52940,52943,52945],{"class":129,"line":2292},[127,52941,52942],{"class":147},"    document.",[127,52944,52463],{"class":143},[127,52946,52947],{"class":147},"(arr)\n",[127,52949,52950,52953,52955],{"class":129,"line":2297},[127,52951,52952],{"class":147},"  \u003C\u002F",[127,52954,52348],{"class":140},[127,52956,51846],{"class":147},[127,52958,52959,52961,52963],{"class":129,"line":2302},[127,52960,52321],{"class":147},[127,52962,275],{"class":140},[127,52964,51846],{"class":147},[127,52966,52967],{"class":129,"line":2307},[127,52968,2942],{"emptyLinePlaceholder":606},[127,52970,52971,52973,52975],{"class":129,"line":2321},[127,52972,52321],{"class":147},[127,52974,51175],{"class":140},[127,52976,51846],{"class":147},[19,52978,52979],{},[23,52980],{"alt":122,"src":52981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52983,52984],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52986,52987],{},"let arr = [4, 2, 5, 1, 3]",[19,52989,52990],{},"\u002F\u002F 1.升序排列写法",[19,52992,52993],{},"arr.sort(function (a, b) {",[19,52995,52996],{},"return a - b",[19,52998,52999],{},"})",[19,53001,53002],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53004,53005],{},"\u002F\u002F 降序排列写法",[19,53007,52993],{},[19,53009,53010],{},"return b - a",[19,53012,52999],{},[19,53014,53015],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53017,53019],{"id":53018},"_29-函数","2.9 函数",[19,53021,53022],{},[23,53023],{"alt":122,"src":53024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53026,53027],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53029,53030],{},"函数的声明用function",[19,53032,53033],{},"函数里边可以嵌套函数",[62,53035,53037],{"id":53036},"_291-函数传参","2.9.1 函数传参",[19,53039,53040],{},[23,53041],{"alt":122,"src":53042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53044,53045],{},[23,53046],{"alt":122,"src":53047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1681,53049,53050,53053,53056,53059,53062,53065],{},[635,53051,53052],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[635,53054,53055],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[635,53057,53058],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[635,53060,53061],{},"开发中尽量保持形参和实参个数一致",[635,53063,53064],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[635,53066,53067],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53069,53070],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[62,53072,53074],{"id":53073},"_292-函数的返回值","2.9.2 函数的返回值",[19,53076,53077],{},[23,53078],{"alt":122,"src":53079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53081,53082],{},[23,53083],{"alt":122,"src":53084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1681,53086,53087,53090,53093,53096,53099],{},[635,53088,53089],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[635,53091,53092],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[635,53094,53095],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[635,53097,53098],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[635,53100,53101],{},"断点调试:进入函数内部看执行过程F11",[62,53103,53105],{"id":53104},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[117,53107,53109],{"className":51173,"code":53108,"language":51175,"meta":122,"style":122},"    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",[124,53110,53111,53116,53121,53125,53130],{"__ignoreMap":122},[127,53112,53113],{"class":129,"line":130},[127,53114,53115],{"class":147},"    function fn(a, b) {\n",[127,53117,53118],{"class":129,"line":137},[127,53119,53120],{"class":147},"      console.log(a + b);\n",[127,53122,53123],{"class":129,"line":151},[127,53124,2729],{"class":147},[127,53126,53127],{"class":129,"line":167},[127,53128,53129],{"class":147},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[127,53131,53132],{"class":129,"line":415},[127,53133,53134],{"class":147},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[62,53136,53138],{"id":53137},"_294-作用域","2.9.4 作用域",[1681,53140,53141,53147,53152,53155,53158],{},[635,53142,53143,53144],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[30,53145,53146],{},"作用域",[635,53148,53149],{},[30,53150,53151],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[635,53153,53154],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[635,53156,53157],{},"函数内部可以直接所使用全局变量",[635,53159,53160],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53162,15175],{},[117,53164,53166],{"className":51173,"code":53165,"language":51175,"meta":122,"style":122},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[124,53167,53168,53173,53178,53182,53187,53192,53197],{"__ignoreMap":122},[127,53169,53170],{"class":129,"line":130},[127,53171,53172],{"class":147},"    function fun() {\n",[127,53174,53175],{"class":129,"line":137},[127,53176,53177],{"class":147},"      num = 10\n",[127,53179,53180],{"class":129,"line":151},[127,53181,2729],{"class":147},[127,53183,53184],{"class":129,"line":167},[127,53185,53186],{"class":147},"    fun()\n",[127,53188,53189],{"class":129,"line":415},[127,53190,53191],{"class":147},"    console.log(num)\n",[127,53193,53194],{"class":129,"line":421},[127,53195,53196],{"class":147},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[127,53198,53199],{"class":129,"line":1766},[127,53200,53201],{"class":147},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1681,53203,53204,53207],{},[635,53205,53206],{},"函数内部的形参可以看做是局部变量",[635,53208,53209],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53211,53212,53213],{},"变量访问原则： ",[30,53214,53215],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[62,53217,53219],{"id":53218},"_295-匿名函数","2.9.5 匿名函数",[19,53221,53222],{},"函数可以分为具名函数和匿名函数",[19,53224,53225],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[632,53227,53228],{},[635,53229,53230],{},"函数表达式",[19,53232,53233],{},[23,53234],{"alt":122,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53237,53238],{},"里边也可以写参数",[19,53240,53241],{},"具名函数调用位置可以随意调整；",[19,53243,53244],{},"匿名函数函数表达式形式只能在声明后才可以使用",[632,53246,53247],{"start":137},[635,53248,53249],{},"立即执行函数",[19,53251,53252],{},[23,53253],{"alt":122,"src":53254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53256,53257],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53259,53260],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53262,53263],{},"(function () {})();",[19,53265,53266],{},"不要落下最后的;",[19,53268,53269],{},"立即执行函数必须要加;",[19,53271,53272],{},"分号写前写后都没问题",[19,53274,53275],{},"写前：",[19,53277,53278],{},"(function() {})()",[19,53280,53281],{},";(function () {})();",[19,53283,53284],{},"写后:",[19,53286,53287],{},"(function() {})();",[19,53289,53263],{},[19,53291,53292],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53294,53295],{},"还有一种写法：",[19,53297,53298],{},"(function(){}());",[19,53300,53301],{},"或者:",[19,53303,53304],{},"!function(){}();",[19,53306,53307],{},"立即执行函数有时候也是可以加名字的：",[19,53309,53310],{},"(function flexible(window,document) {}(window,document));",[19,53312,53313],{},"省一些调用方法",[62,53315,53317],{"id":53316},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53319,53320],{},[23,53321],{"alt":122,"src":53322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53324,53325],{},"这样就不用非得给x,y初始化了",[19,53327,53328],{},[23,53329],{"alt":122,"src":53330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53332,53333],{},"代码执行时先看左边",[19,53335,53336],{},"例如：console.log(false && 3+5)",[19,53338,53339],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53341,53342],{},"&&都是真时，就返回最后一个真值",[19,53344,53345],{},"console.log(11 && 22)",[19,53347,53348],{},"输出22",[19,53350,53351],{},"逻辑与：遇真则真",[19,53353,15175],{},[19,53355,53356],{},"let age=1",[19,53358,53359],{},"console.log(11 || age++)",[19,53361,53362],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53364,53365],{},"console.log(11 || 22)",[19,53367,53368],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53370,53371],{},"||如果都是假的话，就取最后一个假的值了",[62,53373,53375],{"id":53374},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53377,53378],{},"显示转换：",[19,53380,53381,53384,53385],{},[30,53382,53383],{},"记忆","： ",[30,53386,53387],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53389,53390],{},"空字符串为假，其他字符串全为真",[19,53392,53393],{},[23,53394],{"alt":122,"src":53395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53397,53398],{},"隐式转换：",[19,53400,53401],{},[23,53402],{"alt":122,"src":53403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53405,53406],{},"隐式转换:",[19,53408,53409],{},"null+3=3",[19,53411,53412],{},"undefined+3=NaN",[19,53414,53415],{},"null==undefined 输出true,他两个都当0看",[19,53417,53418],{},"null===undefined 输出false",[19,53420,53421],{},"undefined做任何操作都是NaN",[19,53423,53424],{},"NaN不等于NaN，NaN表示计算错误",[14,53426,53428],{"id":53427},"_210-对象","2.10 对象",[62,53430,53432],{"id":53431},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53434,53435],{},"对象也是一种数据类型，里边的数据是无序的",[19,53437,53438],{},"对象由属性和方法组成",[19,53440,53441],{},[23,53442],{"alt":122,"src":53443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53445,53446],{},[23,53447],{"alt":122,"src":53448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53450,53451],{},[23,53452],{"alt":122,"src":53453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[62,53455,53457],{"id":53456},"_2102-对象属性","2.10.2 对象属性",[19,53459,53460],{},[23,53461],{"alt":122,"src":53462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[632,53464,53465],{},[635,53466,53467],{},"查询对象",[19,53469,53470],{},"对象名.属性 goods.uname",[19,53472,53473],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53475,53476],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53478,53479],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53481,53482],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[632,53484,53485],{"start":137},[635,53486,53487],{},"重新赋值",[19,53489,53490],{},"对象名.属性=新值",[632,53492,53493],{"start":151},[635,53494,53495],{},"增加新数据",[19,53497,53490],{},[632,53499,53500],{"start":167},[635,53501,53502],{},"删除对象中的属性",[19,53504,53505],{},"delete 对象名.属性",[62,53507,53509],{"id":53508},"_2103-对象方法","2.10.3 对象方法",[19,53511,53512],{},[23,53513],{"alt":122,"src":53514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53516,53517],{},"后边跟的是匿名函数",[19,53519,53520],{},"对象外面的叫函数；对象内部的叫方法",[19,53522,53523],{},[23,53524],{"alt":122,"src":53525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[62,53527,53529],{"id":53528},"_2104-遍历对象","2.10.4 遍历对象",[19,53531,53532],{},"理解为加括号的python字典遍历",[19,53534,53535],{},[23,53536],{"alt":122,"src":53537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53539,53540],{},"k是字符串类型",[19,53542,53543],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[117,53545,53547],{"className":51173,"code":53546,"language":51175,"meta":122,"style":122},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[124,53548,53549,53554,53559,53564,53569],{"__ignoreMap":122},[127,53550,53551],{"class":129,"line":130},[127,53552,53553],{"class":147},"   let arr = [1, 2, 3]\n",[127,53555,53556],{"class":129,"line":137},[127,53557,53558],{"class":147},"    for (let k in arr) {\n",[127,53560,53561],{"class":129,"line":151},[127,53562,53563],{"class":147},"      console.log(k)\n",[127,53565,53566],{"class":129,"line":167},[127,53567,53568],{"class":147},"      console.log(arr[k])\n",[127,53570,53571],{"class":129,"line":415},[127,53572,2729],{"class":147},[19,53574,53575],{},[23,53576],{"alt":122,"src":53577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53579,53580],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53582,53583],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53585,53586],{},"for in 得到的k是属性名",[52348,53588,53589],{},"\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",[19,53591,53592],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[62,53594,53596],{"id":53595},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53598,53599],{},"数组中放对象信息",[117,53601,53605],{"className":53602,"code":53603,"language":53604,"meta":122,"style":122},"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",[124,53606,53607,53615,53620,53625,53630,53635,53640,53645,53650,53655,53660,53665,53670,53674,53678],{"__ignoreMap":122},[127,53608,53609,53611,53613],{"class":129,"line":130},[127,53610,1584],{"class":147},[127,53612,52348],{"class":140},[127,53614,51846],{"class":147},[127,53616,53617],{"class":129,"line":137},[127,53618,53619],{"class":147},"    let students = [\n",[127,53621,53622],{"class":129,"line":151},[127,53623,53624],{"class":147},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[127,53626,53627],{"class":129,"line":167},[127,53628,53629],{"class":147},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[127,53631,53632],{"class":129,"line":415},[127,53633,53634],{"class":147},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[127,53636,53637],{"class":129,"line":421},[127,53638,53639],{"class":147},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[127,53641,53642],{"class":129,"line":1766},[127,53643,53644],{"class":147},"    ]\n",[127,53646,53647],{"class":129,"line":1856},[127,53648,53649],{"class":147},"    for (let i = 0; i \u003C students.length; i++) {\n",[127,53651,53652],{"class":129,"line":1862},[127,53653,53654],{"class":147},"      for (let k in students[i]) {\n",[127,53656,53657],{"class":129,"line":1874},[127,53658,53659],{"class":147},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[127,53661,53662],{"class":129,"line":2155},[127,53663,53664],{"class":147},"        \u002F\u002F输出每个人的名字：\n",[127,53666,53667],{"class":129,"line":2160},[127,53668,53669],{"class":147},"        \u002F\u002Fconsole.log(students[i].name)\n",[127,53671,53672],{"class":129,"line":2166},[127,53673,52933],{"class":147},[127,53675,53676],{"class":129,"line":2171},[127,53677,2729],{"class":147},[127,53679,53680,53682,53684],{"class":129,"line":2185},[127,53681,52952],{"class":147},[127,53683,52348],{"class":140},[127,53685,51846],{"class":147},[62,53687,53689],{"id":53688},"_2106-内置对象","2.10.6 内置对象",[19,53691,53692],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[632,53694,53695],{},[635,53696,53697],{},"数学对象Math",[19,53699,53700],{},[23,53701],{"alt":122,"src":53702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53704,53705],{},[457,53706,53709],{"href":53707,"rel":53708},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24405],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53711,53712],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53714,53715],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53717,53718],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53720,53721],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53723,53724],{},"null属于对象数据类型",[632,53726,53727],{"start":137},[635,53728,53729],{},"生成任意范围随机数",[19,53731,53732],{},[23,53733],{"alt":122,"src":53734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53736,53737],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53739,53740],{},"乘以几就取不到几",[19,53742,53743],{},"取数组中的随机元素：",[19,53745,53746],{},"let arr = ['red', 'green', 'blue']",[19,53748,53749],{},"let random = Math.floor(Math.random() * arr.length)",[19,53751,53752],{},"console.log(arr[random])",[19,53754,53755],{},"这个函数得到的是全闭区间",[19,53757,53758],{},"function getRandom(N, M) {",[19,53760,53761],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53763,1620],{},[19,53765,53766],{},"console.log(getRandom(4, 8))",[62,53768,53770],{"id":53769},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53772,53773],{},[23,53774],{"alt":122,"src":53775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53777,53778],{},[23,53779],{"alt":122,"src":53780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53782,53783],{},[23,53784],{"alt":122,"src":53785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53787,53788],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53790,53791],{},[23,53792],{"alt":122,"src":53793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53795,53796],{},[23,53797],{"alt":122,"src":53798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53800,53801],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53803,53804],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53806,53807],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[575,53809,53810],{},"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":122,"searchDepth":137,"depth":137,"links":53812},[53813,53821,53822,53823,53824,53825,53832,53836,53842,53851],{"id":51008,"depth":137,"text":51009,"children":53814},[53815,53816,53817,53818,53819,53820],{"id":51012,"depth":151,"text":51013},{"id":51029,"depth":151,"text":51030},{"id":51069,"depth":151,"text":51070},{"id":51081,"depth":151,"text":51082},{"id":51090,"depth":151,"text":51091},{"id":51138,"depth":151,"text":51139},{"id":51148,"depth":137,"text":51149},{"id":51236,"depth":137,"text":51237},{"id":51259,"depth":137,"text":51260},{"id":51271,"depth":137,"text":51272},{"id":51458,"depth":137,"text":51459,"children":53826},[53827,53828,53829,53830,53831],{"id":51462,"depth":151,"text":51463},{"id":51471,"depth":151,"text":51472},{"id":51499,"depth":151,"text":51500},{"id":51535,"depth":151,"text":51536},{"id":51560,"depth":151,"text":51561},{"id":51572,"depth":137,"text":51573,"children":53833},[53834,53835],{"id":51593,"depth":151,"text":51594},{"id":51687,"depth":151,"text":51688},{"id":51745,"depth":137,"text":51746,"children":53837},[53838,53839,53840,53841],{"id":51749,"depth":151,"text":51750},{"id":51773,"depth":151,"text":51774},{"id":51826,"depth":151,"text":51827},{"id":52632,"depth":151,"text":52633},{"id":53018,"depth":137,"text":53019,"children":53843},[53844,53845,53846,53847,53848,53849,53850],{"id":53036,"depth":151,"text":53037},{"id":53073,"depth":151,"text":53074},{"id":53104,"depth":151,"text":53105},{"id":53137,"depth":151,"text":53138},{"id":53218,"depth":151,"text":53219},{"id":53316,"depth":151,"text":53317},{"id":53374,"depth":151,"text":53375},{"id":53427,"depth":137,"text":53428,"children":53852},[53853,53854,53855,53856,53857,53858,53859],{"id":53431,"depth":151,"text":53432},{"id":53456,"depth":151,"text":53457},{"id":53508,"depth":151,"text":53509},{"id":53528,"depth":151,"text":53529},{"id":53595,"depth":151,"text":53596},{"id":53688,"depth":151,"text":53689},{"id":53769,"depth":151,"text":53770},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51000,"description":603},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53866,"title":53867,"body":53868,"description":603,"extension":604,"meta":77202,"navigation":606,"path":77203,"seo":77204,"stem":77205,"__hash__":77206},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53869,"toc":77142},[53870,53873,53876,53879,53884,53887,53890,53893,53897,53901,53907,53912,53920,53927,53930,53934,53939,53944,53949,53952,53955,53966,53969,53973,53976,53979,53984,53989,53994,53997,54000,54092,54095,54100,54103,54108,54111,54114,54119,54122,54127,54131,54134,54148,54152,54157,54160,54163,54167,54172,54175,54179,54183,54188,54192,54197,54200,54203,54206,54209,54212,54215,54220,54225,54253,54256,54259,54262,54267,54270,54273,54276,54279,54283,54312,54316,54321,54326,54329,54332,54335,54340,54455,54460,54465,54626,54631,54634,54638,54643,54648,54651,54654,54657,54660,54663,54666,54669,54672,54675,54678,54681,54684,54687,54690,54692,54695,54698,54701,54706,54710,55107,55110,55116,55120,55125,56406,56411,56414,56417,56420,56425,57621,57625,57631,57636,57639,57644,57649,57653,57657,57662,57665,57670,57673,57676,57680,58587,58590,58594,58815,58818,58821,58824,59050,59053,59277,59280,59284,59289,59292,59295,59523,59526,59559,59562,59566,59571,59575,59578,59581,59584,59587,59590,59593,59596,59601,60881,60885,60888,61981,61985,61988,61991,61994,61997,62001,62004,62007,62009,62017,63498,63502,63505,63508,63511,63720,63723,63727,63731,63736,63741,63744,63747,63752,63756,63761,63764,63873,63877,63882,63887,63890,63893,63897,63902,63907,63912,63915,63918,63929,63932,63937,63942,63945,63948,64021,64025,64030,64033,64035,64046,64050,64055,65381,65384,65387,65390,65392,65395,65398,65401,65404,65407,65410,65413,65416,65419,65422,65425,65428,65430,65432,65435,65439,66533,66536,66539,66555,66569,66572,66577,66583,66588,66592,66596,66601,66605,66610,67052,67057,67060,67064,67069,67072,67075,67079,67084,67088,67093,67098,67102,67107,67112,67115,67120,67125,67129,67134,67139,67243,67246,67250,67255,67621,67624,67627,67630,67633,67636,67639,67642,67645,68941,68945,68950,68955,68958,68961,68964,68967,68969,68974,68979,68982,68986,68991,68996,69001,69004,69007,69010,69013,69016,69021,69024,69028,69033,69038,69042,69047,69050,69055,69058,69061,69064,69067,69070,69075,69078,69081,69084,69087,69091,69096,69099,69103,69108,69111,69114,69118,69147,69150,69154,69158,69163,69167,69172,69175,69178,69181,69184,69187,69190,69193,69196,69199,69202,69205,69208,69211,69214,69218,69223,69228,69231,69235,69239,69244,69247,69251,69254,69257,69262,69267,69272,69277,69282,69285,69288,69293,69298,69302,69307,69310,69315,69318,69321,69324,69327,69332,69335,69344,69348,69353,69356,69359,69363,69366,69371,69375,69378,69384,69390,69394,69420,69423,70984,70987,71479,71482,71487,71492,71497,71501,71506,71511,71516,71520,71525,71528,71531,71534,71537,71541,71544,71549,71552,71557,71561,71566,71569,71574,71579,71584,71587,71590,71595,71600,71603,71606,71610,71613,71618,71621,71626,71629,71634,71639,71644,71647,71652,71717,71720,71731,71735,71740,71912,71916,71921,71924,71927,71930,71934,71945,71949,71952,71957,71962,71965,71968,71971,71974,71977,71979,71982,71985,71988,71993,71996,72001,72004,72008,72011,72014,72028,72032,72035,72090,72095,72098,72101,72106,72109,72113,72118,72248,72252,72257,72262,72343,72348,72352,72355,72360,72365,72371,72374,72377,72380,72384,72389,72392,72403,72407,72424,75471,75475,75478,75481,75484,75505,75509,75512,75520,75523,75528,75531,75534,75539,75544,75548,75569,75573,75578,75581,75584,75587,75590,75594,75599,75602,75606,75611,75614,75619,75622,75627,75630,75635,76838,76842,76847,76850,76855,77139],[10,53871,53867],{"id":53872},"_3web-apis",[19,53874,53875],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53877,53878],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53880,53881],{},[23,53882],{"alt":122,"src":53883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53885,53886],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53888,53889],{},"建议数组和对象使用 const 来声明",[19,53891,53892],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53894,53896],{"id":53895},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[62,53898,53900],{"id":53899},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53902,53903,53906],{},[124,53904,53905],{},"document"," = HTML 文件解析后的对象化表示；",[19,53908,53909,53911],{},[124,53910,53905],{}," ≠ HTML 文件本身",[19,53913,53914,53919],{},[30,53915,53916],{},[124,53917,53918],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53921,53922,53926],{},[30,53923,53924],{},[124,53925,53905],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53928,53929],{},"document实际上为window.document的简写",[62,53931,53933],{"id":53932},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53935,53936],{},[23,53937],{"alt":122,"src":53938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53940,53941],{},[23,53942],{"alt":122,"src":53943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53945,53946],{},[23,53947],{"alt":122,"src":53948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53950,53951],{},"console.dir()",[19,53953,53954],{},"dir用来打印对象",[1681,53956,53957,53960,53963],{},[635,53958,53959],{},"任何一个标签，都是一个对象",[635,53961,53962],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[635,53964,53965],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53967,53968],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[62,53970,53972],{"id":53971},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53974,53975],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53977,53978],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53980,53981],{},[30,53982,53983],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[632,53985,53986],{},[635,53987,53988],{},"利用CSS选择器来获取标签元素",[19,53990,53991],{},[23,53992],{"alt":122,"src":53993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53995,53996],{},"里边的选择器必须必须加引号！！！",[19,53998,53999],{},"只选择第一个元素",[117,54001,54003],{"className":53602,"code":54002,"language":53604,"meta":122,"style":122},"\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",[124,54004,54005,54013,54034,54053,54061,54066,54071,54076,54084],{"__ignoreMap":122},[127,54006,54007,54009,54011],{"class":129,"line":130},[127,54008,1584],{"class":147},[127,54010,275],{"class":140},[127,54012,51846],{"class":147},[127,54014,54015,54017,54019,54022,54024,54027,54030,54032],{"class":129,"line":137},[127,54016,52679],{"class":147},[127,54018,52147],{"class":140},[127,54020,54021],{"class":143}," class",[127,54023,725],{"class":147},[127,54025,54026],{"class":781},"\"box\"",[127,54028,54029],{"class":147},">123\u003C\u002F",[127,54031,52147],{"class":140},[127,54033,51846],{"class":147},[127,54035,54036,54038,54040,54042,54044,54046,54049,54051],{"class":129,"line":151},[127,54037,52679],{"class":147},[127,54039,52147],{"class":140},[127,54041,54021],{"class":143},[127,54043,725],{"class":147},[127,54045,54026],{"class":781},[127,54047,54048],{"class":147},">456\u003C\u002F",[127,54050,52147],{"class":140},[127,54052,51846],{"class":147},[127,54054,54055,54057,54059],{"class":129,"line":167},[127,54056,52679],{"class":147},[127,54058,52348],{"class":140},[127,54060,51846],{"class":147},[127,54062,54063],{"class":129,"line":415},[127,54064,54065],{"class":147},"    \u002F\u002F 1.获取匹配的第一个元素\n",[127,54067,54068],{"class":129,"line":421},[127,54069,54070],{"class":147},"    const box = document.querySelector('div')\n",[127,54072,54073],{"class":129,"line":1766},[127,54074,54075],{"class":147},"    console.dir(box)\n",[127,54077,54078,54080,54082],{"class":129,"line":1856},[127,54079,52952],{"class":147},[127,54081,52348],{"class":140},[127,54083,51846],{"class":147},[127,54085,54086,54088,54090],{"class":129,"line":1862},[127,54087,52321],{"class":147},[127,54089,275],{"class":140},[127,54091,51846],{"class":147},[19,54093,54094],{},"只选123，不选456",[19,54096,54097],{},[23,54098],{"alt":122,"src":54099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54101,54102],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54104,54105],{},[23,54106],{"alt":122,"src":54107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54109,54110],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54112,54113],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[632,54115,54116],{"start":137},[635,54117,54118],{},"其他方法来获取标签元素",[19,54120,54121],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54123,54124],{},[23,54125],{"alt":122,"src":54126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[62,54128,54130],{"id":54129},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54132,54133],{},"设置修改DOM元素内容有两种方式：",[1681,54135,54136,54139,54142,54145],{},[635,54137,54138],{},"元素.innerText=''",[635,54140,54141],{},"元素.innerHTML=''",[635,54143,54144],{},"不写字符串输出数字也是可以的",[635,54146,54147],{},"元素.innerHtml=1",[22539,54149,54151],{"id":54150},"_3131-innertext","3.1.3.1 innerText",[19,54153,54154],{},[23,54155],{"alt":122,"src":54156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54158,54159],{},"思路：实现了修改盒子中的内容！",[19,54161,54162],{},"它只显示纯文本，不解析标签",[22539,54164,54166],{"id":54165},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54168,54169],{},[23,54170],{"alt":122,"src":54171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54173,54174],{},"相比于innerText，他的强大之处在于可以解析标签",[62,54176,54178],{"id":54177},"_314-操作元素属性","3.1.4 操作元素属性",[22539,54180,54182],{"id":54181},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54184,54185],{},[23,54186],{"alt":122,"src":54187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22539,54189,54191],{"id":54190},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54193,54194],{},[23,54195],{"alt":122,"src":54196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54198,54199],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54201,54202],{},"div.style.backgroundColor = 'hotpink'",[19,54204,54205],{},"如果按照css的写法，-表示减，就会出错",[19,54207,54208],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54210,54211],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54213,54214],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54216,54217],{},[23,54218],{"alt":122,"src":54219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54221,54222],{},[23,54223],{"alt":122,"src":54224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[632,54226,54227,54230,54233,54236,54239,54242],{},[635,54228,54229],{},"className这个方式就是修改很多样式的时候来使用的！",[635,54231,54232],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[635,54234,54235],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[635,54237,54238],{},"className为属性名，如果还用class的话就导致与关键字冲突",[635,54240,54241],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[635,54243,54244,54245,54250],{},"解析标签的时候就变为了",[52147,54246],{"className":54247},[54248,54249],"nav","box",[54251,54252],"br",{},[19,54254,54255],{},"例子：",[52147,54257],{"className":54258},[54248],[52348,54260,54261],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54263,54264],{},[23,54265],{"alt":122,"src":54266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54268,54269],{},"追加和删除类名用classList",[19,54271,54272],{},"常用于类似于开关的操作",[19,54274,54275],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54277,54278],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22539,54280,54282],{"id":54281},"_3143-牢记点","3.1.4.3 牢记点",[632,54284,54285,54288,54291,54294,54297,54300,54303,54306,54309],{},[635,54286,54287],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[635,54289,54290],{},"使用style属性操作css时不要忘记引号",[635,54292,54293],{},"使用className或者classList时也不要忘记引号",[635,54295,54296],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[635,54298,54299],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[635,54301,54302],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[635,54304,54305],{},"若： let arr=['1','2',3] arr[0]=1",[635,54307,54308],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[635,54310,54311],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[62,54313,54315],{"id":54314},"_315-操作表单元素","3.1.5 操作表单元素",[632,54317,54318],{},[635,54319,54320],{},"天生的属性",[19,54322,54323],{},[23,54324],{"alt":122,"src":54325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54327,54328],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54330,54331],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54333,54334],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54336,54337],{},[23,54338],{"alt":122,"src":54339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[117,54341,54343],{"className":51173,"code":54342,"language":51175,"meta":122,"style":122},"在复选框中如果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",[124,54344,54345,54350,54382,54387,54392,54397,54402,54406,54411,54416,54433,54445,54450],{"__ignoreMap":122},[127,54346,54347],{"class":129,"line":130},[127,54348,54349],{"class":147},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[127,54351,54352,54354,54357,54360,54362,54365,54367,54369,54371,54373,54375,54377,54380],{"class":129,"line":137},[127,54353,1584],{"class":147},[127,54355,54356],{"class":140},"input",[127,54358,54359],{"class":143}," type",[127,54361,725],{"class":147},[127,54363,54364],{"class":781},"\"checkbox\"",[127,54366,15462],{"class":143},[127,54368,725],{"class":147},[127,54370,8194],{"class":781},[127,54372,15501],{"class":143},[127,54374,725],{"class":147},[127,54376,8194],{"class":781},[127,54378,54379],{"class":143}," checked",[127,54381,51846],{"class":147},[127,54383,54384],{"class":129,"line":151},[127,54385,54386],{"class":147},"不选的话：\n",[127,54388,54389],{"class":129,"line":167},[127,54390,54391],{"class":147},"const input = document.querySelector('input')\n",[127,54393,54394],{"class":129,"line":415},[127,54395,54396],{"class":147},"input.checked=false\n",[127,54398,54399],{"class":129,"line":421},[127,54400,54401],{"class":147},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[127,54403,54404],{"class":129,"line":1766},[127,54405,2942],{"emptyLinePlaceholder":606},[127,54407,54408],{"class":129,"line":1856},[127,54409,54410],{"class":147},"禁用按钮：\n",[127,54412,54413],{"class":129,"line":1862},[127,54414,54415],{"class":147},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[127,54417,54418,54420,54423,54426,54429,54431],{"class":129,"line":1874},[127,54419,1584],{"class":147},[127,54421,54422],{"class":140},"button",[127,54424,54425],{"class":143}," disabled",[127,54427,54428],{"class":147},">点击\u003C\u002F",[127,54430,54422],{"class":140},[127,54432,51846],{"class":147},[127,54434,54435,54437,54439,54441,54443],{"class":129,"line":2155},[127,54436,1584],{"class":147},[127,54438,54422],{"class":140},[127,54440,54428],{"class":147},[127,54442,54422],{"class":140},[127,54444,51846],{"class":147},[127,54446,54447],{"class":129,"line":2160},[127,54448,54449],{"class":147},"const bt = document.querySelector('button')\n",[127,54451,54452],{"class":129,"line":2166},[127,54453,54454],{"class":147},"bt.disabled = false\n",[632,54456,54457],{"start":137},[635,54458,54459],{},"自定义属性",[19,54461,54462],{},[23,54463],{"alt":122,"src":54464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[117,54466,54468],{"className":53602,"code":54467,"language":53604,"meta":122,"style":122},"\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",[124,54469,54470,54478,54506,54525,54544,54563,54582,54590,54595,54600,54605,54610,54618],{"__ignoreMap":122},[127,54471,54472,54474,54476],{"class":129,"line":130},[127,54473,1584],{"class":147},[127,54475,275],{"class":140},[127,54477,51846],{"class":147},[127,54479,54480,54482,54484,54487,54489,54491,54494,54496,54499,54502,54504],{"class":129,"line":137},[127,54481,52679],{"class":147},[127,54483,52147],{"class":140},[127,54485,54486],{"class":143}," data-id",[127,54488,725],{"class":147},[127,54490,4220],{"class":781},[127,54492,54493],{"class":143}," data-spm",[127,54495,725],{"class":147},[127,54497,54498],{"class":781},"\"我不知道\"",[127,54500,54501],{"class":147},">1\u003C\u002F",[127,54503,52147],{"class":140},[127,54505,51846],{"class":147},[127,54507,54508,54510,54512,54514,54516,54518,54521,54523],{"class":129,"line":151},[127,54509,52679],{"class":147},[127,54511,52147],{"class":140},[127,54513,54486],{"class":143},[127,54515,725],{"class":147},[127,54517,4243],{"class":781},[127,54519,54520],{"class":147},">2\u003C\u002F",[127,54522,52147],{"class":140},[127,54524,51846],{"class":147},[127,54526,54527,54529,54531,54533,54535,54537,54540,54542],{"class":129,"line":167},[127,54528,52679],{"class":147},[127,54530,52147],{"class":140},[127,54532,54486],{"class":143},[127,54534,725],{"class":147},[127,54536,4256],{"class":781},[127,54538,54539],{"class":147},">3\u003C\u002F",[127,54541,52147],{"class":140},[127,54543,51846],{"class":147},[127,54545,54546,54548,54550,54552,54554,54556,54559,54561],{"class":129,"line":415},[127,54547,52679],{"class":147},[127,54549,52147],{"class":140},[127,54551,54486],{"class":143},[127,54553,725],{"class":147},[127,54555,4269],{"class":781},[127,54557,54558],{"class":147},">4\u003C\u002F",[127,54560,52147],{"class":140},[127,54562,51846],{"class":147},[127,54564,54565,54567,54569,54571,54573,54575,54578,54580],{"class":129,"line":421},[127,54566,52679],{"class":147},[127,54568,52147],{"class":140},[127,54570,54486],{"class":143},[127,54572,725],{"class":147},[127,54574,4290],{"class":781},[127,54576,54577],{"class":147},">5\u003C\u002F",[127,54579,52147],{"class":140},[127,54581,51846],{"class":147},[127,54583,54584,54586,54588],{"class":129,"line":1766},[127,54585,52679],{"class":147},[127,54587,52348],{"class":140},[127,54589,51846],{"class":147},[127,54591,54592],{"class":129,"line":1856},[127,54593,54594],{"class":147},"    const one = document.querySelector('div')\n",[127,54596,54597],{"class":129,"line":1862},[127,54598,54599],{"class":147},"    console.log(one.dataset)\n",[127,54601,54602],{"class":129,"line":1874},[127,54603,54604],{"class":147},"    console.log(one.dataset.id)\n",[127,54606,54607],{"class":129,"line":2155},[127,54608,54609],{"class":147},"    console.log(one.dataset.spm)\n",[127,54611,54612,54614,54616],{"class":129,"line":2160},[127,54613,52952],{"class":147},[127,54615,52348],{"class":140},[127,54617,51846],{"class":147},[127,54619,54620,54622,54624],{"class":129,"line":2166},[127,54621,52321],{"class":147},[127,54623,275],{"class":140},[127,54625,51846],{"class":147},[19,54627,54628],{},[23,54629],{"alt":122,"src":54630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54632,54633],{},"document.querySelector选择的是第一个对象（元素）",[62,54635,54637],{"id":54636},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54639,54640],{},[23,54641],{"alt":122,"src":54642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54644,54645],{},[23,54646],{"alt":122,"src":54647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54649,54650],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52348,54652,54653],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54655,54656],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52348,54658,54659],{},"\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",[19,54661,54662],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54664,54665],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54667,54668],{},"单位为毫秒！！！",[19,54670,54671],{},"可以搭配匿名函数来用！！！",[19,54673,54674],{},"setInterval(function () {",[19,54676,54677],{},"alert('两秒执行一次')",[19,54679,54680],{},"}, 2000)",[19,54682,54683],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54685,54686],{},"function fn() {",[19,54688,54689],{},"document.write(1)",[19,54691,1620],{},[19,54693,54694],{},"setInterval(fn, 1000)",[19,54696,54697],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54699,54700],{},"setInterval('fn()', 1000)",[19,54702,54703],{},[23,54704],{"alt":122,"src":54705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22539,54707,54709],{"id":54708},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[117,54711,54713],{"className":51173,"code":54712,"language":51175,"meta":122,"style":122},"\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",[124,54714,54715,54725,54739,54743,54751,54765,54785,54797,54805,54809,54817,54854,54859,54864,54869,54877,54885,54907,54915,54920,54942,54947,54952,54963,54968,54988,54996,55011,55026,55037,55042,55052,55062,55066,55075,55079,55087,55095,55099],{"__ignoreMap":122},[127,54716,54717,54719,54721,54723],{"class":129,"line":130},[127,54718,51837],{"class":147},[127,54720,51840],{"class":140},[127,54722,51843],{"class":143},[127,54724,51846],{"class":147},[127,54726,54727,54729,54731,54733,54735,54737],{"class":129,"line":137},[127,54728,1584],{"class":147},[127,54730,51175],{"class":140},[127,54732,51855],{"class":143},[127,54734,725],{"class":147},[127,54736,51860],{"class":781},[127,54738,51846],{"class":147},[127,54740,54741],{"class":129,"line":151},[127,54742,2942],{"emptyLinePlaceholder":606},[127,54744,54745,54747,54749],{"class":129,"line":167},[127,54746,1584],{"class":147},[127,54748,51873],{"class":140},[127,54750,51846],{"class":147},[127,54752,54753,54755,54757,54759,54761,54763],{"class":129,"line":415},[127,54754,52679],{"class":147},[127,54756,51883],{"class":140},[127,54758,51886],{"class":143},[127,54760,725],{"class":147},[127,54762,51891],{"class":781},[127,54764,51846],{"class":147},[127,54766,54767,54769,54771,54773,54775,54777,54779,54781,54783],{"class":129,"line":421},[127,54768,52679],{"class":147},[127,54770,51883],{"class":140},[127,54772,15462],{"class":143},[127,54774,725],{"class":147},[127,54776,51930],{"class":781},[127,54778,51910],{"class":143},[127,54780,725],{"class":147},[127,54782,51937],{"class":781},[127,54784,51846],{"class":147},[127,54786,54787,54789,54791,54793,54795],{"class":129,"line":1766},[127,54788,52679],{"class":147},[127,54790,51946],{"class":140},[127,54792,51949],{"class":147},[127,54794,51946],{"class":140},[127,54796,51846],{"class":147},[127,54798,54799,54801,54803],{"class":129,"line":1856},[127,54800,52321],{"class":147},[127,54802,51873],{"class":140},[127,54804,51846],{"class":147},[127,54806,54807],{"class":129,"line":1862},[127,54808,2942],{"emptyLinePlaceholder":606},[127,54810,54811,54813,54815],{"class":129,"line":1874},[127,54812,1584],{"class":147},[127,54814,275],{"class":140},[127,54816,51846],{"class":147},[127,54818,54819,54821,54824,54826,54828,54830,54832,54834,54836,54839,54841,54844,54847,54849,54852],{"class":129,"line":2155},[127,54820,52679],{"class":147},[127,54822,54823],{"class":140},"textarea",[127,54825,15462],{"class":143},[127,54827,725],{"class":147},[127,54829,8194],{"class":781},[127,54831,15501],{"class":143},[127,54833,725],{"class":147},[127,54835,8194],{"class":781},[127,54837,54838],{"class":143}," cols",[127,54840,725],{"class":147},[127,54842,54843],{"class":781},"\"30\"",[127,54845,54846],{"class":143}," rows",[127,54848,725],{"class":147},[127,54850,54851],{"class":781},"\"10\"",[127,54853,51846],{"class":147},[127,54855,54856],{"class":129,"line":2160},[127,54857,54858],{"class":147},"        用户注册协议\n",[127,54860,54861],{"class":129,"line":2166},[127,54862,54863],{"class":147},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[127,54865,54866],{"class":129,"line":2171},[127,54867,54868],{"class":147},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[127,54870,54871,54873,54875],{"class":129,"line":2185},[127,54872,52312],{"class":147},[127,54874,54823],{"class":140},[127,54876,51846],{"class":147},[127,54878,54879,54881,54883],{"class":129,"line":2190},[127,54880,52679],{"class":147},[127,54882,54251],{"class":140},[127,54884,51846],{"class":147},[127,54886,54887,54889,54891,54893,54895,54898,54900,54903,54905],{"class":129,"line":2196},[127,54888,52679],{"class":147},[127,54890,54422],{"class":140},[127,54892,54021],{"class":143},[127,54894,725],{"class":147},[127,54896,54897],{"class":781},"\"btn\"",[127,54899,54425],{"class":143},[127,54901,54902],{"class":147},">我已经阅读用户协议(5)\u003C\u002F",[127,54904,54422],{"class":140},[127,54906,51846],{"class":147},[127,54908,54909,54911,54913],{"class":129,"line":2217},[127,54910,52679],{"class":147},[127,54912,52348],{"class":140},[127,54914,51846],{"class":147},[127,54916,54917],{"class":129,"line":2222},[127,54918,54919],{"class":133},"    \u002F\u002F 1. 获取元素\n",[127,54921,54922,54924,54927,54929,54932,54935,54937,54940],{"class":129,"line":2236},[127,54923,11763],{"class":290},[127,54925,54926],{"class":154}," btn",[127,54928,14106],{"class":290},[127,54930,54931],{"class":147}," document.",[127,54933,54934],{"class":143},"querySelector",[127,54936,681],{"class":147},[127,54938,54939],{"class":781},"'.btn'",[127,54941,687],{"class":147},[127,54943,54944],{"class":129,"line":2241},[127,54945,54946],{"class":133},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[127,54948,54949],{"class":129,"line":2270},[127,54950,54951],{"class":133},"    \u002F\u002F 2. 倒计时\n",[127,54953,54954,54956,54958,54960],{"class":129,"line":2275},[127,54955,52754],{"class":290},[127,54957,9980],{"class":147},[127,54959,725],{"class":290},[127,54961,54962],{"class":154}," 5\n",[127,54964,54965],{"class":129,"line":2292},[127,54966,54967],{"class":133},"    \u002F\u002F 2.1 开启定时器\n",[127,54969,54970,54972,54975,54977,54980,54982,54985],{"class":129,"line":2297},[127,54971,52754],{"class":290},[127,54973,54974],{"class":147}," n ",[127,54976,725],{"class":290},[127,54978,54979],{"class":143}," setInterval",[127,54981,681],{"class":147},[127,54983,54984],{"class":290},"function",[127,54986,54987],{"class":147}," () {\n",[127,54989,54990,54993],{"class":129,"line":2302},[127,54991,54992],{"class":147},"      i",[127,54994,54995],{"class":290},"--\n",[127,54997,54998,55001,55003,55006,55008],{"class":129,"line":2307},[127,54999,55000],{"class":147},"      btn.innerHTML ",[127,55002,725],{"class":290},[127,55004,55005],{"class":781}," `我已经阅读用户协议(${",[127,55007,1116],{"class":147},[127,55009,55010],{"class":781},"})`\n",[127,55012,55013,55016,55019,55022,55024],{"class":129,"line":2321},[127,55014,55015],{"class":290},"      if",[127,55017,55018],{"class":147}," (i ",[127,55020,55021],{"class":290},"===",[127,55023,4635],{"class":154},[127,55025,12984],{"class":147},[127,55027,55028,55031,55034],{"class":129,"line":2326},[127,55029,55030],{"class":143},"        clearInterval",[127,55032,55033],{"class":147},"(n)  ",[127,55035,55036],{"class":133},"\u002F\u002F 关闭定时器\n",[127,55038,55039],{"class":129,"line":3119},[127,55040,55041],{"class":133},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[127,55043,55044,55047,55049],{"class":129,"line":3133},[127,55045,55046],{"class":147},"        btn.disabled ",[127,55048,725],{"class":290},[127,55050,55051],{"class":154}," false\n",[127,55053,55054,55057,55059],{"class":129,"line":3141},[127,55055,55056],{"class":147},"        btn.innerHTML ",[127,55058,725],{"class":290},[127,55060,55061],{"class":781}," '同意'\n",[127,55063,55064],{"class":129,"line":3146},[127,55065,52933],{"class":147},[127,55067,55068,55071,55073],{"class":129,"line":3152},[127,55069,55070],{"class":147},"    }, ",[127,55072,6952],{"class":154},[127,55074,687],{"class":147},[127,55076,55077],{"class":129,"line":3158},[127,55078,2942],{"emptyLinePlaceholder":606},[127,55080,55081,55083,55085],{"class":129,"line":3163},[127,55082,52952],{"class":147},[127,55084,52348],{"class":140},[127,55086,51846],{"class":147},[127,55088,55089,55091,55093],{"class":129,"line":8490},[127,55090,52321],{"class":147},[127,55092,275],{"class":140},[127,55094,51846],{"class":147},[127,55096,55097],{"class":129,"line":8514},[127,55098,2942],{"emptyLinePlaceholder":606},[127,55100,55101,55103,55105],{"class":129,"line":8519},[127,55102,52321],{"class":147},[127,55104,51175],{"class":140},[127,55106,51846],{"class":147},[19,55108,55109],{},"不要一直想着用死循环,避免死循环",[19,55111,55112,55115],{},[124,55113,55114],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22539,55117,55119],{"id":55118},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[632,55121,55122],{},[635,55123,55124],{},"法1",[117,55126,55128],{"className":51173,"code":55127,"language":51175,"meta":122,"style":122},"\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",[124,55129,55130,55140,55154,55158,55166,55180,55200,55212,55220,55226,55237,55248,55252,55256,55263,55274,55278,55282,55289,55301,55315,55328,55342,55346,55350,55357,55368,55379,55390,55402,55414,55426,55430,55434,55442,55452,55465,55477,55490,55494,55498,55505,55515,55527,55539,55550,55561,55571,55583,55595,55599,55603,55612,55624,55636,55664,55677,55681,55685,55692,55703,55707,55715,55723,55727,55735,55749,55764,55788,55796,55811,55824,55832,55853,55865,55877,55889,55901,55913,55925,55937,55946,55954,55962,55970,55982,56005,56024,56043,56062,56081,56100,56119,56139,56143,56163,56182,56202,56223,56234,56251,56261,56271,56281,56286,56291,56296,56301,56326,56339,56343,56366,56370,56378,56386,56394,56398],{"__ignoreMap":122},[127,55131,55132,55134,55136,55138],{"class":129,"line":130},[127,55133,51837],{"class":147},[127,55135,51840],{"class":140},[127,55137,51843],{"class":143},[127,55139,51846],{"class":147},[127,55141,55142,55144,55146,55148,55150,55152],{"class":129,"line":137},[127,55143,1584],{"class":147},[127,55145,51175],{"class":140},[127,55147,51855],{"class":143},[127,55149,725],{"class":147},[127,55151,51860],{"class":781},[127,55153,51846],{"class":147},[127,55155,55156],{"class":129,"line":151},[127,55157,2942],{"emptyLinePlaceholder":606},[127,55159,55160,55162,55164],{"class":129,"line":167},[127,55161,1584],{"class":147},[127,55163,51873],{"class":140},[127,55165,51846],{"class":147},[127,55167,55168,55170,55172,55174,55176,55178],{"class":129,"line":415},[127,55169,52679],{"class":147},[127,55171,51883],{"class":140},[127,55173,51886],{"class":143},[127,55175,725],{"class":147},[127,55177,51891],{"class":781},[127,55179,51846],{"class":147},[127,55181,55182,55184,55186,55188,55190,55192,55194,55196,55198],{"class":129,"line":421},[127,55183,52679],{"class":147},[127,55185,51883],{"class":140},[127,55187,15462],{"class":143},[127,55189,725],{"class":147},[127,55191,51930],{"class":781},[127,55193,51910],{"class":143},[127,55195,725],{"class":147},[127,55197,51937],{"class":781},[127,55199,51846],{"class":147},[127,55201,55202,55204,55206,55208,55210],{"class":129,"line":1766},[127,55203,52679],{"class":147},[127,55205,51946],{"class":140},[127,55207,51949],{"class":147},[127,55209,51946],{"class":140},[127,55211,51846],{"class":147},[127,55213,55214,55216,55218],{"class":129,"line":1856},[127,55215,52679],{"class":147},[127,55217,575],{"class":140},[127,55219,51846],{"class":147},[127,55221,55222,55224],{"class":129,"line":1862},[127,55223,6945],{"class":140},[127,55225,148],{"class":147},[127,55227,55228,55231,55233,55235],{"class":129,"line":1874},[127,55229,55230],{"class":154},"      padding",[127,55232,158],{"class":147},[127,55234,867],{"class":154},[127,55236,164],{"class":147},[127,55238,55239,55242,55244,55246],{"class":129,"line":2155},[127,55240,55241],{"class":154},"      margin",[127,55243,158],{"class":147},[127,55245,867],{"class":154},[127,55247,164],{"class":147},[127,55249,55250],{"class":129,"line":2160},[127,55251,2729],{"class":147},[127,55253,55254],{"class":129,"line":2166},[127,55255,2942],{"emptyLinePlaceholder":606},[127,55257,55258,55261],{"class":129,"line":2171},[127,55259,55260],{"class":140},"    li",[127,55262,148],{"class":147},[127,55264,55265,55268,55270,55272],{"class":129,"line":2185},[127,55266,55267],{"class":154},"      list-style",[127,55269,158],{"class":147},[127,55271,469],{"class":154},[127,55273,164],{"class":147},[127,55275,55276],{"class":129,"line":2190},[127,55277,2729],{"class":147},[127,55279,55280],{"class":129,"line":2196},[127,55281,2942],{"emptyLinePlaceholder":606},[127,55283,55284,55287],{"class":129,"line":2217},[127,55285,55286],{"class":143},"    .box",[127,55288,148],{"class":147},[127,55290,55291,55294,55296,55299],{"class":129,"line":2222},[127,55292,55293],{"class":154},"      position",[127,55295,158],{"class":147},[127,55297,55298],{"class":154},"relative",[127,55300,164],{"class":147},[127,55302,55303,55306,55308,55311,55313],{"class":129,"line":2236},[127,55304,55305],{"class":154},"      width",[127,55307,158],{"class":147},[127,55309,55310],{"class":154},"976",[127,55312,291],{"class":290},[127,55314,164],{"class":147},[127,55316,55317,55320,55322,55324,55326],{"class":129,"line":2241},[127,55318,55319],{"class":154},"      height",[127,55321,158],{"class":147},[127,55323,2083],{"class":154},[127,55325,291],{"class":290},[127,55327,164],{"class":147},[127,55329,55330,55332,55334,55336,55338,55340],{"class":129,"line":2270},[127,55331,55241],{"class":154},[127,55333,158],{"class":147},[127,55335,986],{"class":154},[127,55337,291],{"class":290},[127,55339,52093],{"class":154},[127,55341,164],{"class":147},[127,55343,55344],{"class":129,"line":2275},[127,55345,2729],{"class":147},[127,55347,55348],{"class":129,"line":2292},[127,55349,2942],{"emptyLinePlaceholder":606},[127,55351,55352,55355],{"class":129,"line":2297},[127,55353,55354],{"class":143},"    .slider-footer",[127,55356,148],{"class":147},[127,55358,55359,55361,55363,55366],{"class":129,"line":2302},[127,55360,55293],{"class":154},[127,55362,158],{"class":147},[127,55364,55365],{"class":154},"absolute",[127,55367,164],{"class":147},[127,55369,55370,55373,55375,55377],{"class":129,"line":2307},[127,55371,55372],{"class":154},"      left",[127,55374,158],{"class":147},[127,55376,867],{"class":154},[127,55378,164],{"class":147},[127,55380,55381,55384,55386,55388],{"class":129,"line":2321},[127,55382,55383],{"class":154},"      bottom",[127,55385,158],{"class":147},[127,55387,867],{"class":154},[127,55389,164],{"class":147},[127,55391,55392,55394,55396,55398,55400],{"class":129,"line":2326},[127,55393,55305],{"class":154},[127,55395,158],{"class":147},[127,55397,986],{"class":154},[127,55399,1003],{"class":290},[127,55401,164],{"class":147},[127,55403,55404,55406,55408,55410,55412],{"class":129,"line":3119},[127,55405,55319],{"class":154},[127,55407,158],{"class":147},[127,55409,1250],{"class":154},[127,55411,1003],{"class":290},[127,55413,164],{"class":147},[127,55415,55416,55419,55421,55424],{"class":129,"line":3133},[127,55417,55418],{"class":154},"      background-color",[127,55420,158],{"class":147},[127,55422,55423],{"class":154},"skyblue",[127,55425,164],{"class":147},[127,55427,55428],{"class":129,"line":3141},[127,55429,2729],{"class":147},[127,55431,55432],{"class":129,"line":3146},[127,55433,2942],{"emptyLinePlaceholder":606},[127,55435,55436,55438,55440],{"class":129,"line":3152},[127,55437,55354],{"class":143},[127,55439,7367],{"class":140},[127,55441,148],{"class":147},[127,55443,55444,55446,55448,55450],{"class":129,"line":3158},[127,55445,55293],{"class":154},[127,55447,158],{"class":147},[127,55449,55365],{"class":154},[127,55451,164],{"class":147},[127,55453,55454,55457,55459,55461,55463],{"class":129,"line":3163},[127,55455,55456],{"class":154},"      font-size",[127,55458,158],{"class":147},[127,55460,1575],{"class":154},[127,55462,291],{"class":290},[127,55464,164],{"class":147},[127,55466,55467,55469,55471,55473,55475],{"class":129,"line":8490},[127,55468,55372],{"class":154},[127,55470,158],{"class":147},[127,55472,1374],{"class":154},[127,55474,291],{"class":290},[127,55476,164],{"class":147},[127,55478,55479,55482,55484,55486,55488],{"class":129,"line":8514},[127,55480,55481],{"class":154},"      top",[127,55483,158],{"class":147},[127,55485,994],{"class":154},[127,55487,291],{"class":290},[127,55489,164],{"class":147},[127,55491,55492],{"class":129,"line":8519},[127,55493,2729],{"class":147},[127,55495,55496],{"class":129,"line":8525},[127,55497,2942],{"emptyLinePlaceholder":606},[127,55499,55500,55503],{"class":129,"line":8552},[127,55501,55502],{"class":140},"    ul",[127,55504,148],{"class":147},[127,55506,55507,55509,55511,55513],{"class":129,"line":8557},[127,55508,55293],{"class":154},[127,55510,158],{"class":147},[127,55512,55365],{"class":154},[127,55514,164],{"class":147},[127,55516,55517,55519,55521,55523,55525],{"class":129,"line":8563},[127,55518,55481],{"class":154},[127,55520,158],{"class":147},[127,55522,1455],{"class":154},[127,55524,291],{"class":290},[127,55526,164],{"class":147},[127,55528,55529,55531,55533,55535,55537],{"class":129,"line":8575},[127,55530,55372],{"class":154},[127,55532,158],{"class":147},[127,55534,1374],{"class":154},[127,55536,291],{"class":290},[127,55538,164],{"class":147},[127,55540,55541,55544,55546,55548],{"class":129,"line":8587},[127,55542,55543],{"class":154},"      display",[127,55545,158],{"class":147},[127,55547,52015],{"class":154},[127,55549,164],{"class":147},[127,55551,55552,55555,55557,55559],{"class":129,"line":8599},[127,55553,55554],{"class":154},"      justify-content",[127,55556,158],{"class":147},[127,55558,52204],{"class":154},[127,55560,164],{"class":147},[127,55562,55563,55565,55567,55569],{"class":129,"line":10258},[127,55564,55293],{"class":154},[127,55566,158],{"class":147},[127,55568,55365],{"class":154},[127,55570,164],{"class":147},[127,55572,55573,55575,55577,55579,55581],{"class":129,"line":10283},[127,55574,55305],{"class":154},[127,55576,158],{"class":147},[127,55578,4534],{"class":154},[127,55580,291],{"class":290},[127,55582,164],{"class":147},[127,55584,55585,55587,55589,55591,55593],{"class":129,"line":10306},[127,55586,55319],{"class":154},[127,55588,158],{"class":147},[127,55590,1374],{"class":154},[127,55592,291],{"class":290},[127,55594,164],{"class":147},[127,55596,55597],{"class":129,"line":10330},[127,55598,2729],{"class":147},[127,55600,55601],{"class":129,"line":10335},[127,55602,2942],{"emptyLinePlaceholder":606},[127,55604,55605,55607,55610],{"class":129,"line":10340},[127,55606,55502],{"class":140},[127,55608,55609],{"class":140}," li",[127,55611,148],{"class":147},[127,55613,55614,55616,55618,55620,55622],{"class":129,"line":10345},[127,55615,55305],{"class":154},[127,55617,158],{"class":147},[127,55619,1374],{"class":154},[127,55621,291],{"class":290},[127,55623,164],{"class":147},[127,55625,55626,55628,55630,55632,55634],{"class":129,"line":10354},[127,55627,55319],{"class":154},[127,55629,158],{"class":147},[127,55631,1374],{"class":154},[127,55633,291],{"class":290},[127,55635,164],{"class":147},[127,55637,55638,55640,55642,55645,55647,55649,55651,55653,55655,55657,55659,55662],{"class":129,"line":10359},[127,55639,55418],{"class":154},[127,55641,158],{"class":147},[127,55643,55644],{"class":154},"rgba",[127,55646,681],{"class":147},[127,55648,867],{"class":154},[127,55650,12977],{"class":147},[127,55652,867],{"class":154},[127,55654,12977],{"class":147},[127,55656,867],{"class":154},[127,55658,12977],{"class":147},[127,55660,55661],{"class":154},".4",[127,55663,3261],{"class":147},[127,55665,55666,55669,55671,55673,55675],{"class":129,"line":10365},[127,55667,55668],{"class":154},"      border-radius",[127,55670,158],{"class":147},[127,55672,1121],{"class":154},[127,55674,291],{"class":290},[127,55676,164],{"class":147},[127,55678,55679],{"class":129,"line":10386},[127,55680,2729],{"class":147},[127,55682,55683],{"class":129,"line":10392},[127,55684,2942],{"emptyLinePlaceholder":606},[127,55686,55687,55690],{"class":129,"line":10406},[127,55688,55689],{"class":143},"    .activate",[127,55691,148],{"class":147},[127,55693,55694,55696,55698,55701],{"class":129,"line":10412},[127,55695,55418],{"class":154},[127,55697,158],{"class":147},[127,55699,55700],{"class":154},"#f7f7f7",[127,55702,164],{"class":147},[127,55704,55705],{"class":129,"line":10439},[127,55706,2729],{"class":147},[127,55708,55709,55711,55713],{"class":129,"line":10448},[127,55710,52952],{"class":147},[127,55712,575],{"class":140},[127,55714,51846],{"class":147},[127,55716,55717,55719,55721],{"class":129,"line":10454},[127,55718,52321],{"class":147},[127,55720,51873],{"class":140},[127,55722,51846],{"class":147},[127,55724,55725],{"class":129,"line":10462},[127,55726,2942],{"emptyLinePlaceholder":606},[127,55728,55729,55731,55733],{"class":129,"line":10467},[127,55730,1584],{"class":147},[127,55732,275],{"class":140},[127,55734,51846],{"class":147},[127,55736,55737,55739,55741,55743,55745,55747],{"class":129,"line":17145},[127,55738,52679],{"class":147},[127,55740,52147],{"class":140},[127,55742,54021],{"class":143},[127,55744,725],{"class":147},[127,55746,54026],{"class":781},[127,55748,51846],{"class":147},[127,55750,55751,55753,55755,55757,55759,55762],{"class":129,"line":17151},[127,55752,51880],{"class":147},[127,55754,52147],{"class":140},[127,55756,54021],{"class":143},[127,55758,725],{"class":147},[127,55760,55761],{"class":781},"\"slider-wrapper\"",[127,55763,51846],{"class":147},[127,55765,55766,55769,55771,55774,55776,55779,55782,55784,55786],{"class":129,"line":17174},[127,55767,55768],{"class":147},"      \u003C",[127,55770,23],{"class":140},[127,55772,55773],{"class":143}," src",[127,55775,725],{"class":147},[127,55777,55778],{"class":781},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[127,55780,55781],{"class":143}," alt",[127,55783,725],{"class":147},[127,55785,8194],{"class":781},[127,55787,51846],{"class":147},[127,55789,55790,55792,55794],{"class":129,"line":17180},[127,55791,52312],{"class":147},[127,55793,52147],{"class":140},[127,55795,51846],{"class":147},[127,55797,55798,55800,55802,55804,55806,55809],{"class":129,"line":17203},[127,55799,51880],{"class":147},[127,55801,52147],{"class":140},[127,55803,54021],{"class":143},[127,55805,725],{"class":147},[127,55807,55808],{"class":781},"\"slider-footer\"",[127,55810,51846],{"class":147},[127,55812,55813,55815,55817,55820,55822],{"class":129,"line":17217},[127,55814,55768],{"class":147},[127,55816,19],{"class":140},[127,55818,55819],{"class":147},">对人类来说会不会太超前了?\u003C\u002F",[127,55821,19],{"class":140},[127,55823,51846],{"class":147},[127,55825,55826,55828,55830],{"class":129,"line":17237},[127,55827,55768],{"class":147},[127,55829,1681],{"class":140},[127,55831,51846],{"class":147},[127,55833,55834,55837,55839,55841,55843,55846,55849,55851],{"class":129,"line":17243},[127,55835,55836],{"class":147},"        \u003C",[127,55838,635],{"class":140},[127,55840,54021],{"class":143},[127,55842,725],{"class":147},[127,55844,55845],{"class":781},"\"activate\"",[127,55847,55848],{"class":147},">\u003C\u002F",[127,55850,635],{"class":140},[127,55852,51846],{"class":147},[127,55854,55855,55857,55859,55861,55863],{"class":129,"line":17254},[127,55856,55836],{"class":147},[127,55858,635],{"class":140},[127,55860,55848],{"class":147},[127,55862,635],{"class":140},[127,55864,51846],{"class":147},[127,55866,55867,55869,55871,55873,55875],{"class":129,"line":17277},[127,55868,55836],{"class":147},[127,55870,635],{"class":140},[127,55872,55848],{"class":147},[127,55874,635],{"class":140},[127,55876,51846],{"class":147},[127,55878,55879,55881,55883,55885,55887],{"class":129,"line":17299},[127,55880,55836],{"class":147},[127,55882,635],{"class":140},[127,55884,55848],{"class":147},[127,55886,635],{"class":140},[127,55888,51846],{"class":147},[127,55890,55891,55893,55895,55897,55899],{"class":129,"line":17304},[127,55892,55836],{"class":147},[127,55894,635],{"class":140},[127,55896,55848],{"class":147},[127,55898,635],{"class":140},[127,55900,51846],{"class":147},[127,55902,55903,55905,55907,55909,55911],{"class":129,"line":17310},[127,55904,55836],{"class":147},[127,55906,635],{"class":140},[127,55908,55848],{"class":147},[127,55910,635],{"class":140},[127,55912,51846],{"class":147},[127,55914,55915,55917,55919,55921,55923],{"class":129,"line":17324},[127,55916,55836],{"class":147},[127,55918,635],{"class":140},[127,55920,55848],{"class":147},[127,55922,635],{"class":140},[127,55924,51846],{"class":147},[127,55926,55927,55929,55931,55933,55935],{"class":129,"line":17337},[127,55928,55836],{"class":147},[127,55930,635],{"class":140},[127,55932,55848],{"class":147},[127,55934,635],{"class":140},[127,55936,51846],{"class":147},[127,55938,55939,55942,55944],{"class":129,"line":17342},[127,55940,55941],{"class":147},"      \u003C\u002F",[127,55943,1681],{"class":140},[127,55945,51846],{"class":147},[127,55947,55948,55950,55952],{"class":129,"line":17356},[127,55949,52312],{"class":147},[127,55951,52147],{"class":140},[127,55953,51846],{"class":147},[127,55955,55956,55958,55960],{"class":129,"line":17361},[127,55957,52952],{"class":147},[127,55959,52147],{"class":140},[127,55961,51846],{"class":147},[127,55963,55964,55966,55968],{"class":129,"line":17367},[127,55965,52679],{"class":147},[127,55967,52348],{"class":140},[127,55969,51846],{"class":147},[127,55971,55972,55974,55977,55979],{"class":129,"line":17372},[127,55973,11763],{"class":290},[127,55975,55976],{"class":154}," arrImage",[127,55978,14106],{"class":290},[127,55980,55981],{"class":147}," [\n",[127,55983,55984,55987,55990,55993,55996,55999,56002],{"class":129,"line":17386},[127,55985,55986],{"class":147},"      { url: ",[127,55988,55989],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[127,55991,55992],{"class":147},", title: ",[127,55994,55995],{"class":781},"'对人类来说会不会太超前了?'",[127,55997,55998],{"class":147},", color: ",[127,56000,56001],{"class":781},"'rgba(100,67,68)'",[127,56003,56004],{"class":147}," },\n",[127,56006,56007,56009,56012,56014,56017,56019,56022],{"class":129,"line":17391},[127,56008,55986],{"class":147},[127,56010,56011],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[127,56013,55992],{"class":147},[127,56015,56016],{"class":781},"'开启剑与雪的黑暗传说!'",[127,56018,55998],{"class":147},[127,56020,56021],{"class":781},"'rgba(43,35,26)'",[127,56023,56004],{"class":147},[127,56025,56026,56028,56031,56033,56036,56038,56041],{"class":129,"line":17396},[127,56027,55986],{"class":147},[127,56029,56030],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[127,56032,55992],{"class":147},[127,56034,56035],{"class":781},"'真正的jo厨出现了!'",[127,56037,55998],{"class":147},[127,56039,56040],{"class":781},"'rgba(36,31,33)'",[127,56042,56004],{"class":147},[127,56044,56045,56047,56050,56052,56055,56057,56060],{"class":129,"line":17410},[127,56046,55986],{"class":147},[127,56048,56049],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[127,56051,55992],{"class":147},[127,56053,56054],{"class":781},"'李玉刚:让世界通过b站看到东方大国文化'",[127,56056,55998],{"class":147},[127,56058,56059],{"class":781},"'rgba(139,98,66)'",[127,56061,56004],{"class":147},[127,56063,56064,56066,56069,56071,56074,56076,56079],{"class":129,"line":17422},[127,56065,55986],{"class":147},[127,56067,56068],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[127,56070,55992],{"class":147},[127,56072,56073],{"class":781},"'快来分享你的寒假日常吧'",[127,56075,55998],{"class":147},[127,56077,56078],{"class":781},"'rgba(67,90,92)'",[127,56080,56004],{"class":147},[127,56082,56083,56085,56088,56090,56093,56095,56098],{"class":129,"line":17427},[127,56084,55986],{"class":147},[127,56086,56087],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[127,56089,55992],{"class":147},[127,56091,56092],{"class":781},"'哔哩哔哩小年YEAR'",[127,56094,55998],{"class":147},[127,56096,56097],{"class":781},"'rgba(166,131,143)'",[127,56099,56004],{"class":147},[127,56101,56102,56104,56107,56109,56112,56114,56117],{"class":129,"line":17440},[127,56103,55986],{"class":147},[127,56105,56106],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[127,56108,55992],{"class":147},[127,56110,56111],{"class":781},"'一站式解决你的电脑配置问题'",[127,56113,55998],{"class":147},[127,56115,56116],{"class":781},"'rgba(53,29,25)'",[127,56118,56004],{"class":147},[127,56120,56121,56123,56126,56128,56131,56133,56136],{"class":129,"line":17445},[127,56122,55986],{"class":147},[127,56124,56125],{"class":781},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[127,56127,55992],{"class":147},[127,56129,56130],{"class":781},"'谁不想和小猫咪贴贴呢?'",[127,56132,55998],{"class":147},[127,56134,56135],{"class":781},"'rgba(99,72,114)'",[127,56137,56138],{"class":147}," }\n",[127,56140,56141],{"class":129,"line":17450},[127,56142,53644],{"class":147},[127,56144,56145,56147,56150,56152,56154,56156,56158,56161],{"class":129,"line":17455},[127,56146,11763],{"class":290},[127,56148,56149],{"class":154}," img",[127,56151,14106],{"class":290},[127,56153,54931],{"class":147},[127,56155,54934],{"class":143},[127,56157,681],{"class":147},[127,56159,56160],{"class":781},"'.slider-wrapper img'",[127,56162,687],{"class":147},[127,56164,56165,56167,56169,56171,56173,56175,56177,56180],{"class":129,"line":17468},[127,56166,11763],{"class":290},[127,56168,7367],{"class":154},[127,56170,14106],{"class":290},[127,56172,54931],{"class":147},[127,56174,54934],{"class":143},[127,56176,681],{"class":147},[127,56178,56179],{"class":781},"'.slider-footer p'",[127,56181,687],{"class":147},[127,56183,56184,56186,56189,56191,56193,56195,56197,56200],{"class":129,"line":17473},[127,56185,11763],{"class":290},[127,56187,56188],{"class":154}," color",[127,56190,14106],{"class":290},[127,56192,54931],{"class":147},[127,56194,54934],{"class":143},[127,56196,681],{"class":147},[127,56198,56199],{"class":781},"'.slider-footer'",[127,56201,687],{"class":147},[127,56203,56204,56206,56209,56211,56213,56216,56218,56221],{"class":129,"line":33173},[127,56205,11763],{"class":290},[127,56207,56208],{"class":154}," lis",[127,56210,14106],{"class":290},[127,56212,54931],{"class":147},[127,56214,56215],{"class":143},"querySelectorAll",[127,56217,681],{"class":147},[127,56219,56220],{"class":781},"'.slider-footer ul li'",[127,56222,687],{"class":147},[127,56224,56225,56227,56229,56231],{"class":129,"line":33179},[127,56226,52754],{"class":290},[127,56228,9980],{"class":147},[127,56230,725],{"class":290},[127,56232,56233],{"class":154}," 1\n",[127,56235,56236,56238,56241,56243,56245,56247,56249],{"class":129,"line":33185},[127,56237,52754],{"class":290},[127,56239,56240],{"class":147}," timer ",[127,56242,725],{"class":290},[127,56244,54979],{"class":143},[127,56246,681],{"class":147},[127,56248,54984],{"class":290},[127,56250,54987],{"class":147},[127,56252,56253,56256,56258],{"class":129,"line":33191},[127,56254,56255],{"class":147},"      img.src ",[127,56257,725],{"class":290},[127,56259,56260],{"class":147}," arrImage[i].url\n",[127,56262,56263,56266,56268],{"class":129,"line":33197},[127,56264,56265],{"class":147},"      p.innerHTML ",[127,56267,725],{"class":290},[127,56269,56270],{"class":147}," arrImage[i].title\n",[127,56272,56273,56276,56278],{"class":129,"line":33208},[127,56274,56275],{"class":147},"      color.style.backgroundColor ",[127,56277,725],{"class":290},[127,56279,56280],{"class":147}," arrImage[i].color\n",[127,56282,56283],{"class":129,"line":33214},[127,56284,56285],{"class":133},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[127,56287,56288],{"class":129,"line":33234},[127,56289,56290],{"class":133},"      \u002F\u002F li.classList.add('activate')\n",[127,56292,56293],{"class":129,"line":33240},[127,56294,56295],{"class":133},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[127,56297,56298],{"class":129,"line":33251},[127,56299,56300],{"class":133},"      \u002F\u002F lis[i].classList.remove('activate')\n",[127,56302,56303,56306,56308,56310,56313,56316,56319,56321,56324],{"class":129,"line":33257},[127,56304,56305],{"class":147},"      document.",[127,56307,54934],{"class":143},[127,56309,681],{"class":147},[127,56311,56312],{"class":781},"'.activate'",[127,56314,56315],{"class":147},")?.classList.",[127,56317,56318],{"class":143},"toggle",[127,56320,681],{"class":147},[127,56322,56323],{"class":781},"'activate'",[127,56325,687],{"class":147},[127,56327,56328,56331,56333,56335,56337],{"class":129,"line":33263},[127,56329,56330],{"class":147},"      lis[i].classList.",[127,56332,5876],{"class":143},[127,56334,681],{"class":147},[127,56336,56323],{"class":781},[127,56338,687],{"class":147},[127,56340,56341],{"class":129,"line":33269},[127,56342,2942],{"emptyLinePlaceholder":606},[127,56344,56345,56348,56350,56352,56354,56356,56358,56360,56363],{"class":129,"line":33275},[127,56346,56347],{"class":147},"      i ",[127,56349,725],{"class":290},[127,56351,55018],{"class":147},[127,56353,1156],{"class":290},[127,56355,25659],{"class":154},[127,56357,14256],{"class":147},[127,56359,1003],{"class":290},[127,56361,56362],{"class":147}," arrImage.",[127,56364,56365],{"class":154},"length\n",[127,56367,56368],{"class":129,"line":33281},[127,56369,2942],{"emptyLinePlaceholder":606},[127,56371,56372,56374,56376],{"class":129,"line":33287},[127,56373,55070],{"class":147},[127,56375,6952],{"class":154},[127,56377,687],{"class":147},[127,56379,56380,56382,56384],{"class":129,"line":33293},[127,56381,52952],{"class":147},[127,56383,52348],{"class":140},[127,56385,51846],{"class":147},[127,56387,56388,56390,56392],{"class":129,"line":33313},[127,56389,52321],{"class":147},[127,56391,275],{"class":140},[127,56393,51846],{"class":147},[127,56395,56396],{"class":129,"line":33319},[127,56397,2942],{"emptyLinePlaceholder":606},[127,56399,56400,56402,56404],{"class":129,"line":33335},[127,56401,52321],{"class":147},[127,56403,51175],{"class":140},[127,56405,51846],{"class":147},[19,56407,56408],{},[23,56409],{"alt":122,"src":56410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56412,56413],{},"?.就是短路保护,确保输出正常进行",[19,56415,56416],{},"不要忘记取余%,有时候可以用",[19,56418,56419],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[632,56421,56422],{"start":137},[635,56423,56424],{},"法2",[117,56426,56428],{"className":51173,"code":56427,"language":51175,"meta":122,"style":122},"\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",[124,56429,56430,56440,56454,56458,56466,56480,56500,56512,56520,56526,56536,56546,56550,56554,56560,56570,56574,56578,56584,56594,56606,56618,56632,56636,56640,56646,56656,56666,56676,56688,56700,56710,56714,56718,56726,56736,56748,56760,56772,56776,56780,56786,56796,56808,56820,56830,56840,56850,56862,56874,56878,56882,56890,56902,56914,56940,56952,56956,56960,56966,56976,56980,56988,56996,57000,57008,57022,57036,57056,57064,57078,57090,57098,57116,57128,57140,57152,57164,57176,57188,57200,57208,57216,57224,57232,57243,57259,57275,57291,57307,57323,57339,57355,57371,57375,57380,57398,57416,57426,57431,57436,57447,57453,57468,57477,57481,57486,57495,57500,57509,57514,57519,57524,57547,57577,57581,57589,57593,57601,57609,57613],{"__ignoreMap":122},[127,56431,56432,56434,56436,56438],{"class":129,"line":130},[127,56433,51837],{"class":147},[127,56435,51840],{"class":140},[127,56437,51843],{"class":143},[127,56439,51846],{"class":147},[127,56441,56442,56444,56446,56448,56450,56452],{"class":129,"line":137},[127,56443,1584],{"class":147},[127,56445,51175],{"class":140},[127,56447,51855],{"class":143},[127,56449,725],{"class":147},[127,56451,51860],{"class":781},[127,56453,51846],{"class":147},[127,56455,56456],{"class":129,"line":151},[127,56457,2942],{"emptyLinePlaceholder":606},[127,56459,56460,56462,56464],{"class":129,"line":167},[127,56461,1584],{"class":147},[127,56463,51873],{"class":140},[127,56465,51846],{"class":147},[127,56467,56468,56470,56472,56474,56476,56478],{"class":129,"line":415},[127,56469,52679],{"class":147},[127,56471,51883],{"class":140},[127,56473,51886],{"class":143},[127,56475,725],{"class":147},[127,56477,51891],{"class":781},[127,56479,51846],{"class":147},[127,56481,56482,56484,56486,56488,56490,56492,56494,56496,56498],{"class":129,"line":421},[127,56483,52679],{"class":147},[127,56485,51883],{"class":140},[127,56487,15462],{"class":143},[127,56489,725],{"class":147},[127,56491,51930],{"class":781},[127,56493,51910],{"class":143},[127,56495,725],{"class":147},[127,56497,51937],{"class":781},[127,56499,51846],{"class":147},[127,56501,56502,56504,56506,56508,56510],{"class":129,"line":1766},[127,56503,52679],{"class":147},[127,56505,51946],{"class":140},[127,56507,51949],{"class":147},[127,56509,51946],{"class":140},[127,56511,51846],{"class":147},[127,56513,56514,56516,56518],{"class":129,"line":1856},[127,56515,52679],{"class":147},[127,56517,575],{"class":140},[127,56519,51846],{"class":147},[127,56521,56522,56524],{"class":129,"line":1862},[127,56523,6945],{"class":140},[127,56525,148],{"class":147},[127,56527,56528,56530,56532,56534],{"class":129,"line":1874},[127,56529,55230],{"class":154},[127,56531,158],{"class":147},[127,56533,867],{"class":154},[127,56535,164],{"class":147},[127,56537,56538,56540,56542,56544],{"class":129,"line":2155},[127,56539,55241],{"class":154},[127,56541,158],{"class":147},[127,56543,867],{"class":154},[127,56545,164],{"class":147},[127,56547,56548],{"class":129,"line":2160},[127,56549,2729],{"class":147},[127,56551,56552],{"class":129,"line":2166},[127,56553,2942],{"emptyLinePlaceholder":606},[127,56555,56556,56558],{"class":129,"line":2171},[127,56557,55260],{"class":140},[127,56559,148],{"class":147},[127,56561,56562,56564,56566,56568],{"class":129,"line":2185},[127,56563,55267],{"class":154},[127,56565,158],{"class":147},[127,56567,469],{"class":154},[127,56569,164],{"class":147},[127,56571,56572],{"class":129,"line":2190},[127,56573,2729],{"class":147},[127,56575,56576],{"class":129,"line":2196},[127,56577,2942],{"emptyLinePlaceholder":606},[127,56579,56580,56582],{"class":129,"line":2217},[127,56581,55286],{"class":143},[127,56583,148],{"class":147},[127,56585,56586,56588,56590,56592],{"class":129,"line":2222},[127,56587,55293],{"class":154},[127,56589,158],{"class":147},[127,56591,55298],{"class":154},[127,56593,164],{"class":147},[127,56595,56596,56598,56600,56602,56604],{"class":129,"line":2236},[127,56597,55305],{"class":154},[127,56599,158],{"class":147},[127,56601,55310],{"class":154},[127,56603,291],{"class":290},[127,56605,164],{"class":147},[127,56607,56608,56610,56612,56614,56616],{"class":129,"line":2241},[127,56609,55319],{"class":154},[127,56611,158],{"class":147},[127,56613,2083],{"class":154},[127,56615,291],{"class":290},[127,56617,164],{"class":147},[127,56619,56620,56622,56624,56626,56628,56630],{"class":129,"line":2270},[127,56621,55241],{"class":154},[127,56623,158],{"class":147},[127,56625,986],{"class":154},[127,56627,291],{"class":290},[127,56629,52093],{"class":154},[127,56631,164],{"class":147},[127,56633,56634],{"class":129,"line":2275},[127,56635,2729],{"class":147},[127,56637,56638],{"class":129,"line":2292},[127,56639,2942],{"emptyLinePlaceholder":606},[127,56641,56642,56644],{"class":129,"line":2297},[127,56643,55354],{"class":143},[127,56645,148],{"class":147},[127,56647,56648,56650,56652,56654],{"class":129,"line":2302},[127,56649,55293],{"class":154},[127,56651,158],{"class":147},[127,56653,55365],{"class":154},[127,56655,164],{"class":147},[127,56657,56658,56660,56662,56664],{"class":129,"line":2307},[127,56659,55372],{"class":154},[127,56661,158],{"class":147},[127,56663,867],{"class":154},[127,56665,164],{"class":147},[127,56667,56668,56670,56672,56674],{"class":129,"line":2321},[127,56669,55383],{"class":154},[127,56671,158],{"class":147},[127,56673,867],{"class":154},[127,56675,164],{"class":147},[127,56677,56678,56680,56682,56684,56686],{"class":129,"line":2326},[127,56679,55305],{"class":154},[127,56681,158],{"class":147},[127,56683,986],{"class":154},[127,56685,1003],{"class":290},[127,56687,164],{"class":147},[127,56689,56690,56692,56694,56696,56698],{"class":129,"line":3119},[127,56691,55319],{"class":154},[127,56693,158],{"class":147},[127,56695,1250],{"class":154},[127,56697,1003],{"class":290},[127,56699,164],{"class":147},[127,56701,56702,56704,56706,56708],{"class":129,"line":3133},[127,56703,55418],{"class":154},[127,56705,158],{"class":147},[127,56707,55423],{"class":154},[127,56709,164],{"class":147},[127,56711,56712],{"class":129,"line":3141},[127,56713,2729],{"class":147},[127,56715,56716],{"class":129,"line":3146},[127,56717,2942],{"emptyLinePlaceholder":606},[127,56719,56720,56722,56724],{"class":129,"line":3152},[127,56721,55354],{"class":143},[127,56723,7367],{"class":140},[127,56725,148],{"class":147},[127,56727,56728,56730,56732,56734],{"class":129,"line":3158},[127,56729,55293],{"class":154},[127,56731,158],{"class":147},[127,56733,55365],{"class":154},[127,56735,164],{"class":147},[127,56737,56738,56740,56742,56744,56746],{"class":129,"line":3163},[127,56739,55456],{"class":154},[127,56741,158],{"class":147},[127,56743,1575],{"class":154},[127,56745,291],{"class":290},[127,56747,164],{"class":147},[127,56749,56750,56752,56754,56756,56758],{"class":129,"line":8490},[127,56751,55372],{"class":154},[127,56753,158],{"class":147},[127,56755,1374],{"class":154},[127,56757,291],{"class":290},[127,56759,164],{"class":147},[127,56761,56762,56764,56766,56768,56770],{"class":129,"line":8514},[127,56763,55481],{"class":154},[127,56765,158],{"class":147},[127,56767,994],{"class":154},[127,56769,291],{"class":290},[127,56771,164],{"class":147},[127,56773,56774],{"class":129,"line":8519},[127,56775,2729],{"class":147},[127,56777,56778],{"class":129,"line":8525},[127,56779,2942],{"emptyLinePlaceholder":606},[127,56781,56782,56784],{"class":129,"line":8552},[127,56783,55502],{"class":140},[127,56785,148],{"class":147},[127,56787,56788,56790,56792,56794],{"class":129,"line":8557},[127,56789,55293],{"class":154},[127,56791,158],{"class":147},[127,56793,55365],{"class":154},[127,56795,164],{"class":147},[127,56797,56798,56800,56802,56804,56806],{"class":129,"line":8563},[127,56799,55481],{"class":154},[127,56801,158],{"class":147},[127,56803,1455],{"class":154},[127,56805,291],{"class":290},[127,56807,164],{"class":147},[127,56809,56810,56812,56814,56816,56818],{"class":129,"line":8575},[127,56811,55372],{"class":154},[127,56813,158],{"class":147},[127,56815,1374],{"class":154},[127,56817,291],{"class":290},[127,56819,164],{"class":147},[127,56821,56822,56824,56826,56828],{"class":129,"line":8587},[127,56823,55543],{"class":154},[127,56825,158],{"class":147},[127,56827,52015],{"class":154},[127,56829,164],{"class":147},[127,56831,56832,56834,56836,56838],{"class":129,"line":8599},[127,56833,55554],{"class":154},[127,56835,158],{"class":147},[127,56837,52204],{"class":154},[127,56839,164],{"class":147},[127,56841,56842,56844,56846,56848],{"class":129,"line":10258},[127,56843,55293],{"class":154},[127,56845,158],{"class":147},[127,56847,55365],{"class":154},[127,56849,164],{"class":147},[127,56851,56852,56854,56856,56858,56860],{"class":129,"line":10283},[127,56853,55305],{"class":154},[127,56855,158],{"class":147},[127,56857,4534],{"class":154},[127,56859,291],{"class":290},[127,56861,164],{"class":147},[127,56863,56864,56866,56868,56870,56872],{"class":129,"line":10306},[127,56865,55319],{"class":154},[127,56867,158],{"class":147},[127,56869,1374],{"class":154},[127,56871,291],{"class":290},[127,56873,164],{"class":147},[127,56875,56876],{"class":129,"line":10330},[127,56877,2729],{"class":147},[127,56879,56880],{"class":129,"line":10335},[127,56881,2942],{"emptyLinePlaceholder":606},[127,56883,56884,56886,56888],{"class":129,"line":10340},[127,56885,55502],{"class":140},[127,56887,55609],{"class":140},[127,56889,148],{"class":147},[127,56891,56892,56894,56896,56898,56900],{"class":129,"line":10345},[127,56893,55305],{"class":154},[127,56895,158],{"class":147},[127,56897,1374],{"class":154},[127,56899,291],{"class":290},[127,56901,164],{"class":147},[127,56903,56904,56906,56908,56910,56912],{"class":129,"line":10354},[127,56905,55319],{"class":154},[127,56907,158],{"class":147},[127,56909,1374],{"class":154},[127,56911,291],{"class":290},[127,56913,164],{"class":147},[127,56915,56916,56918,56920,56922,56924,56926,56928,56930,56932,56934,56936,56938],{"class":129,"line":10359},[127,56917,55418],{"class":154},[127,56919,158],{"class":147},[127,56921,55644],{"class":154},[127,56923,681],{"class":147},[127,56925,867],{"class":154},[127,56927,12977],{"class":147},[127,56929,867],{"class":154},[127,56931,12977],{"class":147},[127,56933,867],{"class":154},[127,56935,12977],{"class":147},[127,56937,55661],{"class":154},[127,56939,3261],{"class":147},[127,56941,56942,56944,56946,56948,56950],{"class":129,"line":10365},[127,56943,55668],{"class":154},[127,56945,158],{"class":147},[127,56947,1121],{"class":154},[127,56949,291],{"class":290},[127,56951,164],{"class":147},[127,56953,56954],{"class":129,"line":10386},[127,56955,2729],{"class":147},[127,56957,56958],{"class":129,"line":10392},[127,56959,2942],{"emptyLinePlaceholder":606},[127,56961,56962,56964],{"class":129,"line":10406},[127,56963,55689],{"class":143},[127,56965,148],{"class":147},[127,56967,56968,56970,56972,56974],{"class":129,"line":10412},[127,56969,55418],{"class":154},[127,56971,158],{"class":147},[127,56973,55700],{"class":154},[127,56975,164],{"class":147},[127,56977,56978],{"class":129,"line":10439},[127,56979,2729],{"class":147},[127,56981,56982,56984,56986],{"class":129,"line":10448},[127,56983,52952],{"class":147},[127,56985,575],{"class":140},[127,56987,51846],{"class":147},[127,56989,56990,56992,56994],{"class":129,"line":10454},[127,56991,52321],{"class":147},[127,56993,51873],{"class":140},[127,56995,51846],{"class":147},[127,56997,56998],{"class":129,"line":10462},[127,56999,2942],{"emptyLinePlaceholder":606},[127,57001,57002,57004,57006],{"class":129,"line":10467},[127,57003,1584],{"class":147},[127,57005,275],{"class":140},[127,57007,51846],{"class":147},[127,57009,57010,57012,57014,57016,57018,57020],{"class":129,"line":17145},[127,57011,52679],{"class":147},[127,57013,52147],{"class":140},[127,57015,54021],{"class":143},[127,57017,725],{"class":147},[127,57019,54026],{"class":781},[127,57021,51846],{"class":147},[127,57023,57024,57026,57028,57030,57032,57034],{"class":129,"line":17151},[127,57025,51880],{"class":147},[127,57027,52147],{"class":140},[127,57029,54021],{"class":143},[127,57031,725],{"class":147},[127,57033,55761],{"class":781},[127,57035,51846],{"class":147},[127,57037,57038,57040,57042,57044,57046,57048,57050,57052,57054],{"class":129,"line":17174},[127,57039,55768],{"class":147},[127,57041,23],{"class":140},[127,57043,55773],{"class":143},[127,57045,725],{"class":147},[127,57047,55778],{"class":781},[127,57049,55781],{"class":143},[127,57051,725],{"class":147},[127,57053,8194],{"class":781},[127,57055,51846],{"class":147},[127,57057,57058,57060,57062],{"class":129,"line":17180},[127,57059,52312],{"class":147},[127,57061,52147],{"class":140},[127,57063,51846],{"class":147},[127,57065,57066,57068,57070,57072,57074,57076],{"class":129,"line":17203},[127,57067,51880],{"class":147},[127,57069,52147],{"class":140},[127,57071,54021],{"class":143},[127,57073,725],{"class":147},[127,57075,55808],{"class":781},[127,57077,51846],{"class":147},[127,57079,57080,57082,57084,57086,57088],{"class":129,"line":17217},[127,57081,55768],{"class":147},[127,57083,19],{"class":140},[127,57085,55819],{"class":147},[127,57087,19],{"class":140},[127,57089,51846],{"class":147},[127,57091,57092,57094,57096],{"class":129,"line":17237},[127,57093,55768],{"class":147},[127,57095,1681],{"class":140},[127,57097,51846],{"class":147},[127,57099,57100,57102,57104,57106,57108,57110,57112,57114],{"class":129,"line":17243},[127,57101,55836],{"class":147},[127,57103,635],{"class":140},[127,57105,54021],{"class":143},[127,57107,725],{"class":147},[127,57109,55845],{"class":781},[127,57111,55848],{"class":147},[127,57113,635],{"class":140},[127,57115,51846],{"class":147},[127,57117,57118,57120,57122,57124,57126],{"class":129,"line":17254},[127,57119,55836],{"class":147},[127,57121,635],{"class":140},[127,57123,55848],{"class":147},[127,57125,635],{"class":140},[127,57127,51846],{"class":147},[127,57129,57130,57132,57134,57136,57138],{"class":129,"line":17277},[127,57131,55836],{"class":147},[127,57133,635],{"class":140},[127,57135,55848],{"class":147},[127,57137,635],{"class":140},[127,57139,51846],{"class":147},[127,57141,57142,57144,57146,57148,57150],{"class":129,"line":17299},[127,57143,55836],{"class":147},[127,57145,635],{"class":140},[127,57147,55848],{"class":147},[127,57149,635],{"class":140},[127,57151,51846],{"class":147},[127,57153,57154,57156,57158,57160,57162],{"class":129,"line":17304},[127,57155,55836],{"class":147},[127,57157,635],{"class":140},[127,57159,55848],{"class":147},[127,57161,635],{"class":140},[127,57163,51846],{"class":147},[127,57165,57166,57168,57170,57172,57174],{"class":129,"line":17310},[127,57167,55836],{"class":147},[127,57169,635],{"class":140},[127,57171,55848],{"class":147},[127,57173,635],{"class":140},[127,57175,51846],{"class":147},[127,57177,57178,57180,57182,57184,57186],{"class":129,"line":17324},[127,57179,55836],{"class":147},[127,57181,635],{"class":140},[127,57183,55848],{"class":147},[127,57185,635],{"class":140},[127,57187,51846],{"class":147},[127,57189,57190,57192,57194,57196,57198],{"class":129,"line":17337},[127,57191,55836],{"class":147},[127,57193,635],{"class":140},[127,57195,55848],{"class":147},[127,57197,635],{"class":140},[127,57199,51846],{"class":147},[127,57201,57202,57204,57206],{"class":129,"line":17342},[127,57203,55941],{"class":147},[127,57205,1681],{"class":140},[127,57207,51846],{"class":147},[127,57209,57210,57212,57214],{"class":129,"line":17356},[127,57211,52312],{"class":147},[127,57213,52147],{"class":140},[127,57215,51846],{"class":147},[127,57217,57218,57220,57222],{"class":129,"line":17361},[127,57219,52952],{"class":147},[127,57221,52147],{"class":140},[127,57223,51846],{"class":147},[127,57225,57226,57228,57230],{"class":129,"line":17367},[127,57227,52679],{"class":147},[127,57229,52348],{"class":140},[127,57231,51846],{"class":147},[127,57233,57234,57236,57239,57241],{"class":129,"line":17372},[127,57235,11763],{"class":290},[127,57237,57238],{"class":154}," sliderData",[127,57240,14106],{"class":290},[127,57242,55981],{"class":147},[127,57244,57245,57247,57249,57251,57253,57255,57257],{"class":129,"line":17386},[127,57246,55986],{"class":147},[127,57248,55989],{"class":781},[127,57250,55992],{"class":147},[127,57252,55995],{"class":781},[127,57254,55998],{"class":147},[127,57256,56001],{"class":781},[127,57258,56004],{"class":147},[127,57260,57261,57263,57265,57267,57269,57271,57273],{"class":129,"line":17391},[127,57262,55986],{"class":147},[127,57264,56011],{"class":781},[127,57266,55992],{"class":147},[127,57268,56016],{"class":781},[127,57270,55998],{"class":147},[127,57272,56021],{"class":781},[127,57274,56004],{"class":147},[127,57276,57277,57279,57281,57283,57285,57287,57289],{"class":129,"line":17396},[127,57278,55986],{"class":147},[127,57280,56030],{"class":781},[127,57282,55992],{"class":147},[127,57284,56035],{"class":781},[127,57286,55998],{"class":147},[127,57288,56040],{"class":781},[127,57290,56004],{"class":147},[127,57292,57293,57295,57297,57299,57301,57303,57305],{"class":129,"line":17410},[127,57294,55986],{"class":147},[127,57296,56049],{"class":781},[127,57298,55992],{"class":147},[127,57300,56054],{"class":781},[127,57302,55998],{"class":147},[127,57304,56059],{"class":781},[127,57306,56004],{"class":147},[127,57308,57309,57311,57313,57315,57317,57319,57321],{"class":129,"line":17422},[127,57310,55986],{"class":147},[127,57312,56068],{"class":781},[127,57314,55992],{"class":147},[127,57316,56073],{"class":781},[127,57318,55998],{"class":147},[127,57320,56078],{"class":781},[127,57322,56004],{"class":147},[127,57324,57325,57327,57329,57331,57333,57335,57337],{"class":129,"line":17427},[127,57326,55986],{"class":147},[127,57328,56087],{"class":781},[127,57330,55992],{"class":147},[127,57332,56092],{"class":781},[127,57334,55998],{"class":147},[127,57336,56097],{"class":781},[127,57338,56004],{"class":147},[127,57340,57341,57343,57345,57347,57349,57351,57353],{"class":129,"line":17440},[127,57342,55986],{"class":147},[127,57344,56106],{"class":781},[127,57346,55992],{"class":147},[127,57348,56111],{"class":781},[127,57350,55998],{"class":147},[127,57352,56116],{"class":781},[127,57354,56004],{"class":147},[127,57356,57357,57359,57361,57363,57365,57367,57369],{"class":129,"line":17445},[127,57358,55986],{"class":147},[127,57360,56125],{"class":781},[127,57362,55992],{"class":147},[127,57364,56130],{"class":781},[127,57366,55998],{"class":147},[127,57368,56135],{"class":781},[127,57370,56138],{"class":147},[127,57372,57373],{"class":129,"line":17450},[127,57374,53644],{"class":147},[127,57376,57377],{"class":129,"line":17455},[127,57378,57379],{"class":133},"    \u002F\u002F 1.获取元素\n",[127,57381,57382,57384,57386,57388,57390,57392,57394,57396],{"class":129,"line":17468},[127,57383,11763],{"class":290},[127,57385,56149],{"class":154},[127,57387,14106],{"class":290},[127,57389,54931],{"class":147},[127,57391,54934],{"class":143},[127,57393,681],{"class":147},[127,57395,56160],{"class":781},[127,57397,687],{"class":147},[127,57399,57400,57402,57404,57406,57408,57410,57412,57414],{"class":129,"line":17473},[127,57401,11763],{"class":290},[127,57403,7367],{"class":154},[127,57405,14106],{"class":290},[127,57407,54931],{"class":147},[127,57409,54934],{"class":143},[127,57411,681],{"class":147},[127,57413,56179],{"class":781},[127,57415,687],{"class":147},[127,57417,57418,57420,57422,57424],{"class":129,"line":33173},[127,57419,52754],{"class":290},[127,57421,9980],{"class":147},[127,57423,725],{"class":290},[127,57425,47873],{"class":154},[127,57427,57428],{"class":129,"line":33179},[127,57429,57430],{"class":133},"    \u002F\u002F 2.开启定时器\n",[127,57432,57433],{"class":129,"line":33185},[127,57434,57435],{"class":133},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[127,57437,57438,57441,57443,57445],{"class":129,"line":33191},[127,57439,57440],{"class":143},"    setInterval",[127,57442,681],{"class":147},[127,57444,54984],{"class":290},[127,57446,54987],{"class":147},[127,57448,57449,57451],{"class":129,"line":33197},[127,57450,54992],{"class":147},[127,57452,3244],{"class":290},[127,57454,57455,57457,57459,57461,57464,57466],{"class":129,"line":33208},[127,57456,55015],{"class":290},[127,57458,55018],{"class":147},[127,57460,2253],{"class":290},[127,57462,57463],{"class":147}," sliderData.",[127,57465,52503],{"class":154},[127,57467,12984],{"class":147},[127,57469,57470,57473,57475],{"class":129,"line":33214},[127,57471,57472],{"class":147},"        i ",[127,57474,725],{"class":290},[127,57476,47873],{"class":154},[127,57478,57479],{"class":129,"line":33234},[127,57480,52933],{"class":147},[127,57482,57483],{"class":129,"line":33240},[127,57484,57485],{"class":133},"      \u002F\u002F 更换图片路径\n",[127,57487,57488,57490,57492],{"class":129,"line":33251},[127,57489,56255],{"class":147},[127,57491,725],{"class":290},[127,57493,57494],{"class":147}," sliderData[i].url\n",[127,57496,57497],{"class":129,"line":33257},[127,57498,57499],{"class":133},"      \u002F\u002F 把文字写到p里面\n",[127,57501,57502,57504,57506],{"class":129,"line":33263},[127,57503,56265],{"class":147},[127,57505,725],{"class":290},[127,57507,57508],{"class":147}," sliderData[i].title\n",[127,57510,57511],{"class":129,"line":33269},[127,57512,57513],{"class":133},"      \u002F\u002F 小圆点\n",[127,57515,57516],{"class":129,"line":33275},[127,57517,57518],{"class":133},"      \u002F\u002F 先删除以前的active\n",[127,57520,57521],{"class":129,"line":33281},[127,57522,57523],{"class":133},"      \u002F\u002F 只让当前li添加active\n",[127,57525,57526,57528,57530,57532,57535,57538,57541,57543,57545],{"class":129,"line":33287},[127,57527,56305],{"class":147},[127,57529,54934],{"class":143},[127,57531,681],{"class":147},[127,57533,57534],{"class":781},"'.slider-footer .activate'",[127,57536,57537],{"class":147},").classList.",[127,57539,57540],{"class":143},"remove",[127,57542,681],{"class":147},[127,57544,56323],{"class":781},[127,57546,687],{"class":147},[127,57548,57549,57551,57553,57555,57558,57560,57562,57564,57567,57569,57571,57573,57575],{"class":129,"line":33293},[127,57550,56305],{"class":147},[127,57552,54934],{"class":143},[127,57554,681],{"class":147},[127,57556,57557],{"class":781},"`.slider-footer ul li:nth-child(${",[127,57559,1116],{"class":147},[127,57561,46106],{"class":290},[127,57563,25659],{"class":154},[127,57565,57566],{"class":781},"})`",[127,57568,57537],{"class":147},[127,57570,5876],{"class":143},[127,57572,681],{"class":147},[127,57574,56323],{"class":781},[127,57576,687],{"class":147},[127,57578,57579],{"class":129,"line":33313},[127,57580,2942],{"emptyLinePlaceholder":606},[127,57582,57583,57585,57587],{"class":129,"line":33319},[127,57584,55070],{"class":147},[127,57586,6952],{"class":154},[127,57588,687],{"class":147},[127,57590,57591],{"class":129,"line":33335},[127,57592,2942],{"emptyLinePlaceholder":606},[127,57594,57595,57597,57599],{"class":129,"line":33341},[127,57596,52952],{"class":147},[127,57598,52348],{"class":140},[127,57600,51846],{"class":147},[127,57602,57603,57605,57607],{"class":129,"line":33355},[127,57604,52321],{"class":147},[127,57606,275],{"class":140},[127,57608,51846],{"class":147},[127,57610,57611],{"class":129,"line":33361},[127,57612,2942],{"emptyLinePlaceholder":606},[127,57614,57615,57617,57619],{"class":129,"line":33376},[127,57616,52321],{"class":147},[127,57618,51175],{"class":140},[127,57620,51846],{"class":147},[62,57622,57624],{"id":57623},"_317-重要知识点","3.1.7 重要知识点",[19,57626,57627,57628],{},"浏览器在渲染文本时， ",[30,57629,57630],{},"没有空格或换行符就没有“断行点”",[19,57632,57633],{},[23,57634],{"alt":122,"src":57635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57637,57638],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57640,57641],{},[23,57642],{"alt":122,"src":57643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57645,57646],{},[23,57647],{"alt":122,"src":57648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57650,57652],{"id":57651},"_32-dom事件基础","3.2 DOM事件基础",[62,57654,57656],{"id":57655},"_321-事件监听","3.2.1 事件监听",[19,57658,57659],{},[23,57660],{"alt":122,"src":57661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57663,57664],{},"事件监听有响应的发生",[19,57666,57667],{},[23,57668],{"alt":122,"src":57669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57671,57672],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57674,57675],{},"对于有名函数,要执行的函数名后边不要加()",[62,57677,57679],{"id":57678},"_322-随机点名案例","3.2.2 随机点名案例",[117,57681,57683],{"className":51173,"code":57682,"language":51175,"meta":122,"style":122},"\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",[124,57684,57685,57695,57709,57713,57721,57735,57755,57767,57775,57781,57791,57801,57805,57809,57816,57827,57831,57835,57841,57853,57867,57877,57889,57902,57906,57910,57917,57921,57934,57946,57957,57961,57965,57969,57976,57986,57990,57994,58003,58015,58027,58042,58046,58054,58062,58066,58074,58087,58101,58114,58134,58142,58157,58177,58197,58205,58209,58217,58222,58258,58278,58283,58302,58307,58318,58323,58334,58339,58358,58373,58378,58404,58414,58423,58428,58444,58449,58454,58459,58474,58478,58482,58487,58506,58523,58531,58536,58551,58555,58559,58567,58575,58579],{"__ignoreMap":122},[127,57686,57687,57689,57691,57693],{"class":129,"line":130},[127,57688,51837],{"class":147},[127,57690,51840],{"class":140},[127,57692,51843],{"class":143},[127,57694,51846],{"class":147},[127,57696,57697,57699,57701,57703,57705,57707],{"class":129,"line":137},[127,57698,1584],{"class":147},[127,57700,51175],{"class":140},[127,57702,51855],{"class":143},[127,57704,725],{"class":147},[127,57706,51860],{"class":781},[127,57708,51846],{"class":147},[127,57710,57711],{"class":129,"line":151},[127,57712,2942],{"emptyLinePlaceholder":606},[127,57714,57715,57717,57719],{"class":129,"line":167},[127,57716,1584],{"class":147},[127,57718,51873],{"class":140},[127,57720,51846],{"class":147},[127,57722,57723,57725,57727,57729,57731,57733],{"class":129,"line":415},[127,57724,52679],{"class":147},[127,57726,51883],{"class":140},[127,57728,51886],{"class":143},[127,57730,725],{"class":147},[127,57732,51891],{"class":781},[127,57734,51846],{"class":147},[127,57736,57737,57739,57741,57743,57745,57747,57749,57751,57753],{"class":129,"line":421},[127,57738,52679],{"class":147},[127,57740,51883],{"class":140},[127,57742,15462],{"class":143},[127,57744,725],{"class":147},[127,57746,51930],{"class":781},[127,57748,51910],{"class":143},[127,57750,725],{"class":147},[127,57752,51937],{"class":781},[127,57754,51846],{"class":147},[127,57756,57757,57759,57761,57763,57765],{"class":129,"line":1766},[127,57758,52679],{"class":147},[127,57760,51946],{"class":140},[127,57762,51949],{"class":147},[127,57764,51946],{"class":140},[127,57766,51846],{"class":147},[127,57768,57769,57771,57773],{"class":129,"line":1856},[127,57770,52679],{"class":147},[127,57772,575],{"class":140},[127,57774,51846],{"class":147},[127,57776,57777,57779],{"class":129,"line":1862},[127,57778,6945],{"class":140},[127,57780,148],{"class":147},[127,57782,57783,57785,57787,57789],{"class":129,"line":1874},[127,57784,55241],{"class":154},[127,57786,158],{"class":147},[127,57788,867],{"class":154},[127,57790,164],{"class":147},[127,57792,57793,57795,57797,57799],{"class":129,"line":2155},[127,57794,55230],{"class":154},[127,57796,158],{"class":147},[127,57798,867],{"class":154},[127,57800,164],{"class":147},[127,57802,57803],{"class":129,"line":2160},[127,57804,2729],{"class":147},[127,57806,57807],{"class":129,"line":2166},[127,57808,2942],{"emptyLinePlaceholder":606},[127,57810,57811,57814],{"class":129,"line":2171},[127,57812,57813],{"class":140},"    h2",[127,57815,148],{"class":147},[127,57817,57818,57821,57823,57825],{"class":129,"line":2185},[127,57819,57820],{"class":154},"      text-align",[127,57822,158],{"class":147},[127,57824,161],{"class":154},[127,57826,164],{"class":147},[127,57828,57829],{"class":129,"line":2190},[127,57830,2729],{"class":147},[127,57832,57833],{"class":129,"line":2196},[127,57834,2942],{"emptyLinePlaceholder":606},[127,57836,57837,57839],{"class":129,"line":2217},[127,57838,55286],{"class":143},[127,57840,148],{"class":147},[127,57842,57843,57845,57847,57849,57851],{"class":129,"line":2222},[127,57844,55305],{"class":154},[127,57846,158],{"class":147},[127,57848,2083],{"class":154},[127,57850,291],{"class":290},[127,57852,164],{"class":147},[127,57854,57855,57857,57859,57861,57863,57865],{"class":129,"line":2236},[127,57856,55241],{"class":154},[127,57858,158],{"class":147},[127,57860,1330],{"class":154},[127,57862,291],{"class":290},[127,57864,52093],{"class":154},[127,57866,164],{"class":147},[127,57868,57869,57871,57873,57875],{"class":129,"line":2241},[127,57870,55543],{"class":154},[127,57872,158],{"class":147},[127,57874,52015],{"class":154},[127,57876,164],{"class":147},[127,57878,57879,57881,57883,57885,57887],{"class":129,"line":2270},[127,57880,55456],{"class":154},[127,57882,158],{"class":147},[127,57884,1499],{"class":154},[127,57886,291],{"class":290},[127,57888,164],{"class":147},[127,57890,57891,57894,57896,57898,57900],{"class":129,"line":2275},[127,57892,57893],{"class":154},"      line-height",[127,57895,158],{"class":147},[127,57897,1076],{"class":154},[127,57899,291],{"class":290},[127,57901,164],{"class":147},[127,57903,57904],{"class":129,"line":2292},[127,57905,2729],{"class":147},[127,57907,57908],{"class":129,"line":2297},[127,57909,2942],{"emptyLinePlaceholder":606},[127,57911,57912,57915],{"class":129,"line":2302},[127,57913,57914],{"class":143},"    .qs",[127,57916,148],{"class":147},[127,57918,57919],{"class":129,"line":2307},[127,57920,2942],{"emptyLinePlaceholder":606},[127,57922,57923,57925,57927,57930,57932],{"class":129,"line":2321},[127,57924,55305],{"class":154},[127,57926,158],{"class":147},[127,57928,57929],{"class":154},"450",[127,57931,291],{"class":290},[127,57933,164],{"class":147},[127,57935,57936,57938,57940,57942,57944],{"class":129,"line":2326},[127,57937,55319],{"class":154},[127,57939,158],{"class":147},[127,57941,1076],{"class":154},[127,57943,291],{"class":290},[127,57945,164],{"class":147},[127,57947,57948,57951,57953,57955],{"class":129,"line":3119},[127,57949,57950],{"class":154},"      color",[127,57952,158],{"class":147},[127,57954,405],{"class":154},[127,57956,164],{"class":147},[127,57958,57959],{"class":129,"line":3133},[127,57960,2942],{"emptyLinePlaceholder":606},[127,57962,57963],{"class":129,"line":3141},[127,57964,2729],{"class":147},[127,57966,57967],{"class":129,"line":3146},[127,57968,2942],{"emptyLinePlaceholder":606},[127,57970,57971,57974],{"class":129,"line":3152},[127,57972,57973],{"class":143},"    .btns",[127,57975,148],{"class":147},[127,57977,57978,57980,57982,57984],{"class":129,"line":3158},[127,57979,57820],{"class":154},[127,57981,158],{"class":147},[127,57983,161],{"class":154},[127,57985,164],{"class":147},[127,57987,57988],{"class":129,"line":3163},[127,57989,2729],{"class":147},[127,57991,57992],{"class":129,"line":8490},[127,57993,2942],{"emptyLinePlaceholder":606},[127,57995,57996,57998,58001],{"class":129,"line":8514},[127,57997,57973],{"class":143},[127,57999,58000],{"class":140}," button",[127,58002,148],{"class":147},[127,58004,58005,58007,58009,58011,58013],{"class":129,"line":8519},[127,58006,55305],{"class":154},[127,58008,158],{"class":147},[127,58010,1491],{"class":154},[127,58012,291],{"class":290},[127,58014,164],{"class":147},[127,58016,58017,58019,58021,58023,58025],{"class":129,"line":8525},[127,58018,55319],{"class":154},[127,58020,158],{"class":147},[127,58022,948],{"class":154},[127,58024,291],{"class":290},[127,58026,164],{"class":147},[127,58028,58029,58031,58033,58035,58038,58040],{"class":129,"line":8552},[127,58030,55241],{"class":154},[127,58032,158],{"class":147},[127,58034,867],{"class":154},[127,58036,58037],{"class":154}," 50",[127,58039,291],{"class":290},[127,58041,164],{"class":147},[127,58043,58044],{"class":129,"line":8557},[127,58045,2729],{"class":147},[127,58047,58048,58050,58052],{"class":129,"line":8563},[127,58049,52952],{"class":147},[127,58051,575],{"class":140},[127,58053,51846],{"class":147},[127,58055,58056,58058,58060],{"class":129,"line":8575},[127,58057,52321],{"class":147},[127,58059,51873],{"class":140},[127,58061,51846],{"class":147},[127,58063,58064],{"class":129,"line":8587},[127,58065,2942],{"emptyLinePlaceholder":606},[127,58067,58068,58070,58072],{"class":129,"line":8599},[127,58069,1584],{"class":147},[127,58071,275],{"class":140},[127,58073,51846],{"class":147},[127,58075,58076,58078,58080,58083,58085],{"class":129,"line":10258},[127,58077,52679],{"class":147},[127,58079,14],{"class":140},[127,58081,58082],{"class":147},">随机点名\u003C\u002F",[127,58084,14],{"class":140},[127,58086,51846],{"class":147},[127,58088,58089,58091,58093,58095,58097,58099],{"class":129,"line":10283},[127,58090,52679],{"class":147},[127,58092,52147],{"class":140},[127,58094,54021],{"class":143},[127,58096,725],{"class":147},[127,58098,54026],{"class":781},[127,58100,51846],{"class":147},[127,58102,58103,58105,58107,58110,58112],{"class":129,"line":10306},[127,58104,51880],{"class":147},[127,58106,127],{"class":140},[127,58108,58109],{"class":147},">名字是：\u003C\u002F",[127,58111,127],{"class":140},[127,58113,51846],{"class":147},[127,58115,58116,58118,58120,58122,58124,58127,58130,58132],{"class":129,"line":10330},[127,58117,51880],{"class":147},[127,58119,52147],{"class":140},[127,58121,54021],{"class":143},[127,58123,725],{"class":147},[127,58125,58126],{"class":781},"\"qs\"",[127,58128,58129],{"class":147},">这里显示姓名\u003C\u002F",[127,58131,52147],{"class":140},[127,58133,51846],{"class":147},[127,58135,58136,58138,58140],{"class":129,"line":10335},[127,58137,52952],{"class":147},[127,58139,52147],{"class":140},[127,58141,51846],{"class":147},[127,58143,58144,58146,58148,58150,58152,58155],{"class":129,"line":10340},[127,58145,52679],{"class":147},[127,58147,52147],{"class":140},[127,58149,54021],{"class":143},[127,58151,725],{"class":147},[127,58153,58154],{"class":781},"\"btns\"",[127,58156,51846],{"class":147},[127,58158,58159,58161,58163,58165,58167,58170,58173,58175],{"class":129,"line":10345},[127,58160,51880],{"class":147},[127,58162,54422],{"class":140},[127,58164,54021],{"class":143},[127,58166,725],{"class":147},[127,58168,58169],{"class":781},"\"start\"",[127,58171,58172],{"class":147},">开始\u003C\u002F",[127,58174,54422],{"class":140},[127,58176,51846],{"class":147},[127,58178,58179,58181,58183,58185,58187,58190,58193,58195],{"class":129,"line":10354},[127,58180,51880],{"class":147},[127,58182,54422],{"class":140},[127,58184,54021],{"class":143},[127,58186,725],{"class":147},[127,58188,58189],{"class":781},"\"end\"",[127,58191,58192],{"class":147},">结束\u003C\u002F",[127,58194,54422],{"class":140},[127,58196,51846],{"class":147},[127,58198,58199,58201,58203],{"class":129,"line":10359},[127,58200,52952],{"class":147},[127,58202,52147],{"class":140},[127,58204,51846],{"class":147},[127,58206,58207],{"class":129,"line":10365},[127,58208,2942],{"emptyLinePlaceholder":606},[127,58210,58211,58213,58215],{"class":129,"line":10386},[127,58212,52679],{"class":147},[127,58214,52348],{"class":140},[127,58216,51846],{"class":147},[127,58218,58219],{"class":129,"line":10392},[127,58220,58221],{"class":133},"    \u002F\u002F 数据数组\n",[127,58223,58224,58226,58229,58231,58233,58236,58238,58241,58243,58246,58248,58251,58253,58256],{"class":129,"line":10406},[127,58225,11763],{"class":290},[127,58227,58228],{"class":154}," arr",[127,58230,14106],{"class":290},[127,58232,52761],{"class":147},[127,58234,58235],{"class":781},"'马超'",[127,58237,12977],{"class":147},[127,58239,58240],{"class":781},"'黄忠'",[127,58242,12977],{"class":147},[127,58244,58245],{"class":781},"'赵云'",[127,58247,12977],{"class":147},[127,58249,58250],{"class":781},"'关羽'",[127,58252,12977],{"class":147},[127,58254,58255],{"class":781},"'张飞'",[127,58257,33786],{"class":147},[127,58259,58260,58262,58265,58267,58269,58271,58273,58276],{"class":129,"line":10412},[127,58261,11763],{"class":290},[127,58263,58264],{"class":154}," qs",[127,58266,14106],{"class":290},[127,58268,54931],{"class":147},[127,58270,54934],{"class":143},[127,58272,681],{"class":147},[127,58274,58275],{"class":781},"'.qs'",[127,58277,687],{"class":147},[127,58279,58280],{"class":129,"line":10439},[127,58281,58282],{"class":133},"    \u002F\u002F 1.业务1.开始按钮模块\n",[127,58284,58285,58287,58289,58291,58293,58295,58297,58300],{"class":129,"line":10448},[127,58286,11763],{"class":290},[127,58288,4726],{"class":154},[127,58290,14106],{"class":290},[127,58292,54931],{"class":147},[127,58294,54934],{"class":143},[127,58296,681],{"class":147},[127,58298,58299],{"class":781},"'.start'",[127,58301,687],{"class":147},[127,58303,58304],{"class":129,"line":10454},[127,58305,58306],{"class":133},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[127,58308,58309,58311,58314,58316],{"class":129,"line":10462},[127,58310,52754],{"class":290},[127,58312,58313],{"class":147}," timerId ",[127,58315,725],{"class":290},[127,58317,47873],{"class":154},[127,58319,58320],{"class":129,"line":10467},[127,58321,58322],{"class":133},"    \u002F\u002F 随机号要全局变量\n",[127,58324,58325,58327,58330,58332],{"class":129,"line":17145},[127,58326,52754],{"class":290},[127,58328,58329],{"class":147}," random ",[127,58331,725],{"class":290},[127,58333,47873],{"class":154},[127,58335,58336],{"class":129,"line":17151},[127,58337,58338],{"class":133},"    \u002F\u002F 1.1 添加点击事件\n",[127,58340,58341,58344,58347,58349,58352,58354,58356],{"class":129,"line":17174},[127,58342,58343],{"class":147},"    start.",[127,58345,58346],{"class":143},"addEventListener",[127,58348,681],{"class":147},[127,58350,58351],{"class":781},"'click'",[127,58353,12977],{"class":147},[127,58355,54984],{"class":290},[127,58357,54987],{"class":147},[127,58359,58360,58363,58365,58367,58369,58371],{"class":129,"line":17180},[127,58361,58362],{"class":147},"      timerId ",[127,58364,725],{"class":290},[127,58366,54979],{"class":143},[127,58368,681],{"class":147},[127,58370,54984],{"class":290},[127,58372,54987],{"class":147},[127,58374,58375],{"class":129,"line":17203},[127,58376,58377],{"class":133},"        \u002F\u002F 随机数\n",[127,58379,58380,58383,58385,58388,58391,58394,58396,58398,58400,58402],{"class":129,"line":17217},[127,58381,58382],{"class":147},"        random ",[127,58384,725],{"class":290},[127,58386,58387],{"class":143}," parseInt",[127,58389,58390],{"class":147},"(Math.",[127,58392,58393],{"class":143},"random",[127,58395,13592],{"class":147},[127,58397,1130],{"class":290},[127,58399,52500],{"class":147},[127,58401,52503],{"class":154},[127,58403,687],{"class":147},[127,58405,58406,58409,58411],{"class":129,"line":17237},[127,58407,58408],{"class":147},"        qs.innerHTML ",[127,58410,725],{"class":290},[127,58412,58413],{"class":147}," arr[random]\n",[127,58415,58416,58419,58421],{"class":129,"line":17243},[127,58417,58418],{"class":147},"      }, ",[127,58420,948],{"class":154},[127,58422,687],{"class":147},[127,58424,58425],{"class":129,"line":17254},[127,58426,58427],{"class":133},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[127,58429,58430,58432,58435,58437,58440,58442],{"class":129,"line":17277},[127,58431,55015],{"class":290},[127,58433,58434],{"class":147}," (arr.",[127,58436,52503],{"class":154},[127,58438,58439],{"class":290}," ===",[127,58441,25659],{"class":154},[127,58443,12984],{"class":147},[127,58445,58446],{"class":129,"line":17299},[127,58447,58448],{"class":133},"        \u002F\u002F start.disabled = true\n",[127,58450,58451],{"class":129,"line":17304},[127,58452,58453],{"class":133},"        \u002F\u002F end.disabled = true\n",[127,58455,58456],{"class":129,"line":17310},[127,58457,58458],{"class":133},"        \u002F\u002F 可以合起来写\n",[127,58460,58461,58464,58466,58469,58471],{"class":129,"line":17324},[127,58462,58463],{"class":147},"        start.disabled ",[127,58465,725],{"class":290},[127,58467,58468],{"class":147}," end.disabled ",[127,58470,725],{"class":290},[127,58472,58473],{"class":154}," true\n",[127,58475,58476],{"class":129,"line":17337},[127,58477,52933],{"class":147},[127,58479,58480],{"class":129,"line":17342},[127,58481,34001],{"class":147},[127,58483,58484],{"class":129,"line":17356},[127,58485,58486],{"class":133},"    \u002F\u002F 1.2 关闭按钮模块\n",[127,58488,58489,58491,58493,58495,58497,58499,58501,58504],{"class":129,"line":17361},[127,58490,11763],{"class":290},[127,58492,4742],{"class":154},[127,58494,14106],{"class":290},[127,58496,54931],{"class":147},[127,58498,54934],{"class":143},[127,58500,681],{"class":147},[127,58502,58503],{"class":781},"'.end'",[127,58505,687],{"class":147},[127,58507,58508,58511,58513,58515,58517,58519,58521],{"class":129,"line":17367},[127,58509,58510],{"class":147},"    end.",[127,58512,58346],{"class":143},[127,58514,681],{"class":147},[127,58516,58351],{"class":781},[127,58518,12977],{"class":147},[127,58520,54984],{"class":290},[127,58522,54987],{"class":147},[127,58524,58525,58528],{"class":129,"line":17372},[127,58526,58527],{"class":143},"      clearInterval",[127,58529,58530],{"class":147},"(timerId)\n",[127,58532,58533],{"class":129,"line":17386},[127,58534,58535],{"class":133},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[127,58537,58538,58541,58544,58547,58549],{"class":129,"line":17391},[127,58539,58540],{"class":147},"      arr.",[127,58542,58543],{"class":143},"splice",[127,58545,58546],{"class":147},"(random, ",[127,58548,893],{"class":154},[127,58550,687],{"class":147},[127,58552,58553],{"class":129,"line":17396},[127,58554,34001],{"class":147},[127,58556,58557],{"class":129,"line":17410},[127,58558,2942],{"emptyLinePlaceholder":606},[127,58560,58561,58563,58565],{"class":129,"line":17422},[127,58562,52952],{"class":147},[127,58564,52348],{"class":140},[127,58566,51846],{"class":147},[127,58568,58569,58571,58573],{"class":129,"line":17427},[127,58570,52321],{"class":147},[127,58572,275],{"class":140},[127,58574,51846],{"class":147},[127,58576,58577],{"class":129,"line":17440},[127,58578,2942],{"emptyLinePlaceholder":606},[127,58580,58581,58583,58585],{"class":129,"line":17445},[127,58582,52321],{"class":147},[127,58584,51175],{"class":140},[127,58586,51846],{"class":147},[19,58588,58589],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[62,58591,58593],{"id":58592},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[117,58595,58597],{"className":51173,"code":58596,"language":51175,"meta":122,"style":122},"\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",[124,58598,58599,58609,58623,58627,58635,58649,58669,58681,58689,58693,58701,58713,58721,58740,58757,58773,58783,58787,58795,58803,58807],{"__ignoreMap":122},[127,58600,58601,58603,58605,58607],{"class":129,"line":130},[127,58602,51837],{"class":147},[127,58604,51840],{"class":140},[127,58606,51843],{"class":143},[127,58608,51846],{"class":147},[127,58610,58611,58613,58615,58617,58619,58621],{"class":129,"line":137},[127,58612,1584],{"class":147},[127,58614,51175],{"class":140},[127,58616,51855],{"class":143},[127,58618,725],{"class":147},[127,58620,51860],{"class":781},[127,58622,51846],{"class":147},[127,58624,58625],{"class":129,"line":151},[127,58626,2942],{"emptyLinePlaceholder":606},[127,58628,58629,58631,58633],{"class":129,"line":167},[127,58630,1584],{"class":147},[127,58632,51873],{"class":140},[127,58634,51846],{"class":147},[127,58636,58637,58639,58641,58643,58645,58647],{"class":129,"line":415},[127,58638,52679],{"class":147},[127,58640,51883],{"class":140},[127,58642,51886],{"class":143},[127,58644,725],{"class":147},[127,58646,51891],{"class":781},[127,58648,51846],{"class":147},[127,58650,58651,58653,58655,58657,58659,58661,58663,58665,58667],{"class":129,"line":421},[127,58652,52679],{"class":147},[127,58654,51883],{"class":140},[127,58656,15462],{"class":143},[127,58658,725],{"class":147},[127,58660,51930],{"class":781},[127,58662,51910],{"class":143},[127,58664,725],{"class":147},[127,58666,51937],{"class":781},[127,58668,51846],{"class":147},[127,58670,58671,58673,58675,58677,58679],{"class":129,"line":1766},[127,58672,52679],{"class":147},[127,58674,51946],{"class":140},[127,58676,51949],{"class":147},[127,58678,51946],{"class":140},[127,58680,51846],{"class":147},[127,58682,58683,58685,58687],{"class":129,"line":1856},[127,58684,52321],{"class":147},[127,58686,51873],{"class":140},[127,58688,51846],{"class":147},[127,58690,58691],{"class":129,"line":1862},[127,58692,2942],{"emptyLinePlaceholder":606},[127,58694,58695,58697,58699],{"class":129,"line":1874},[127,58696,1584],{"class":147},[127,58698,275],{"class":140},[127,58700,51846],{"class":147},[127,58702,58703,58705,58707,58709,58711],{"class":129,"line":2155},[127,58704,52679],{"class":147},[127,58706,54422],{"class":140},[127,58708,54428],{"class":147},[127,58710,54422],{"class":140},[127,58712,51846],{"class":147},[127,58714,58715,58717,58719],{"class":129,"line":2160},[127,58716,52679],{"class":147},[127,58718,52348],{"class":140},[127,58720,51846],{"class":147},[127,58722,58723,58725,58727,58729,58731,58733,58735,58738],{"class":129,"line":2166},[127,58724,11763],{"class":290},[127,58726,54926],{"class":154},[127,58728,14106],{"class":290},[127,58730,54931],{"class":147},[127,58732,54934],{"class":143},[127,58734,681],{"class":147},[127,58736,58737],{"class":781},"'button'",[127,58739,687],{"class":147},[127,58741,58742,58745,58747,58749,58751,58753,58755],{"class":129,"line":2171},[127,58743,58744],{"class":147},"    btn.",[127,58746,58346],{"class":143},[127,58748,681],{"class":147},[127,58750,58351],{"class":781},[127,58752,12977],{"class":147},[127,58754,54984],{"class":290},[127,58756,54987],{"class":147},[127,58758,58759,58762,58764,58766,58769,58771],{"class":129,"line":2185},[127,58760,58761],{"class":290},"      const",[127,58763,2782],{"class":154},[127,58765,14106],{"class":290},[127,58767,58768],{"class":147}," Math.",[127,58770,58393],{"class":143},[127,58772,2518],{"class":147},[127,58774,58775,58778,58781],{"class":129,"line":2190},[127,58776,58777],{"class":147},"      console.",[127,58779,58780],{"class":143},"log",[127,58782,694],{"class":147},[127,58784,58785],{"class":129,"line":2196},[127,58786,34001],{"class":147},[127,58788,58789,58791,58793],{"class":129,"line":2217},[127,58790,52952],{"class":147},[127,58792,52348],{"class":140},[127,58794,51846],{"class":147},[127,58796,58797,58799,58801],{"class":129,"line":2222},[127,58798,52321],{"class":147},[127,58800,275],{"class":140},[127,58802,51846],{"class":147},[127,58804,58805],{"class":129,"line":2236},[127,58806,2942],{"emptyLinePlaceholder":606},[127,58808,58809,58811,58813],{"class":129,"line":2241},[127,58810,52321],{"class":147},[127,58812,51175],{"class":140},[127,58814,51846],{"class":147},[19,58816,58817],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58819,58820],{},"常量不可以重新赋值",[19,58822,58823],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[117,58825,58827],{"className":51173,"code":58826,"language":51175,"meta":122,"style":122},"\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",[124,58828,58829,58839,58853,58857,58865,58879,58899,58911,58919,58923,58931,58943,58951,58962,58980,58996,59010,59018,59022,59030,59038,59042],{"__ignoreMap":122},[127,58830,58831,58833,58835,58837],{"class":129,"line":130},[127,58832,51837],{"class":147},[127,58834,51840],{"class":140},[127,58836,51843],{"class":143},[127,58838,51846],{"class":147},[127,58840,58841,58843,58845,58847,58849,58851],{"class":129,"line":137},[127,58842,1584],{"class":147},[127,58844,51175],{"class":140},[127,58846,51855],{"class":143},[127,58848,725],{"class":147},[127,58850,51860],{"class":781},[127,58852,51846],{"class":147},[127,58854,58855],{"class":129,"line":151},[127,58856,2942],{"emptyLinePlaceholder":606},[127,58858,58859,58861,58863],{"class":129,"line":167},[127,58860,1584],{"class":147},[127,58862,51873],{"class":140},[127,58864,51846],{"class":147},[127,58866,58867,58869,58871,58873,58875,58877],{"class":129,"line":415},[127,58868,52679],{"class":147},[127,58870,51883],{"class":140},[127,58872,51886],{"class":143},[127,58874,725],{"class":147},[127,58876,51891],{"class":781},[127,58878,51846],{"class":147},[127,58880,58881,58883,58885,58887,58889,58891,58893,58895,58897],{"class":129,"line":421},[127,58882,52679],{"class":147},[127,58884,51883],{"class":140},[127,58886,15462],{"class":143},[127,58888,725],{"class":147},[127,58890,51930],{"class":781},[127,58892,51910],{"class":143},[127,58894,725],{"class":147},[127,58896,51937],{"class":781},[127,58898,51846],{"class":147},[127,58900,58901,58903,58905,58907,58909],{"class":129,"line":1766},[127,58902,52679],{"class":147},[127,58904,51946],{"class":140},[127,58906,51949],{"class":147},[127,58908,51946],{"class":140},[127,58910,51846],{"class":147},[127,58912,58913,58915,58917],{"class":129,"line":1856},[127,58914,52321],{"class":147},[127,58916,51873],{"class":140},[127,58918,51846],{"class":147},[127,58920,58921],{"class":129,"line":1862},[127,58922,2942],{"emptyLinePlaceholder":606},[127,58924,58925,58927,58929],{"class":129,"line":1874},[127,58926,1584],{"class":147},[127,58928,275],{"class":140},[127,58930,51846],{"class":147},[127,58932,58933,58935,58937,58939,58941],{"class":129,"line":2155},[127,58934,52679],{"class":147},[127,58936,54422],{"class":140},[127,58938,54428],{"class":147},[127,58940,54422],{"class":140},[127,58942,51846],{"class":147},[127,58944,58945,58947,58949],{"class":129,"line":2160},[127,58946,52679],{"class":147},[127,58948,52348],{"class":140},[127,58950,51846],{"class":147},[127,58952,58953,58955,58957,58959],{"class":129,"line":2166},[127,58954,11763],{"class":290},[127,58956,2782],{"class":154},[127,58958,14106],{"class":290},[127,58960,58961],{"class":154}," 10\n",[127,58963,58964,58966,58968,58970,58972,58974,58976,58978],{"class":129,"line":2171},[127,58965,11763],{"class":290},[127,58967,54926],{"class":154},[127,58969,14106],{"class":290},[127,58971,54931],{"class":147},[127,58973,54934],{"class":143},[127,58975,681],{"class":147},[127,58977,58737],{"class":781},[127,58979,687],{"class":147},[127,58981,58982,58984,58986,58988,58990,58992,58994],{"class":129,"line":2185},[127,58983,58744],{"class":147},[127,58985,58346],{"class":143},[127,58987,681],{"class":147},[127,58989,58351],{"class":781},[127,58991,12977],{"class":147},[127,58993,54984],{"class":290},[127,58995,54987],{"class":147},[127,58997,58998,59000,59002,59004,59006,59008],{"class":129,"line":2190},[127,58999,58761],{"class":290},[127,59001,2782],{"class":154},[127,59003,14106],{"class":290},[127,59005,58768],{"class":147},[127,59007,58393],{"class":143},[127,59009,2518],{"class":147},[127,59011,59012,59014,59016],{"class":129,"line":2196},[127,59013,58777],{"class":147},[127,59015,58780],{"class":143},[127,59017,694],{"class":147},[127,59019,59020],{"class":129,"line":2217},[127,59021,34001],{"class":147},[127,59023,59024,59026,59028],{"class":129,"line":2222},[127,59025,52952],{"class":147},[127,59027,52348],{"class":140},[127,59029,51846],{"class":147},[127,59031,59032,59034,59036],{"class":129,"line":2236},[127,59033,52321],{"class":147},[127,59035,275],{"class":140},[127,59037,51846],{"class":147},[127,59039,59040],{"class":129,"line":2241},[127,59041,2942],{"emptyLinePlaceholder":606},[127,59043,59044,59046,59048],{"class":129,"line":2270},[127,59045,52321],{"class":147},[127,59047,51175],{"class":140},[127,59049,51846],{"class":147},[19,59051,59052],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[117,59054,59056],{"className":51173,"code":59055,"language":51175,"meta":122,"style":122},"\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",[124,59057,59058,59068,59082,59086,59094,59108,59128,59140,59148,59152,59160,59172,59180,59190,59208,59224,59237,59245,59249,59257,59265,59269],{"__ignoreMap":122},[127,59059,59060,59062,59064,59066],{"class":129,"line":130},[127,59061,51837],{"class":147},[127,59063,51840],{"class":140},[127,59065,51843],{"class":143},[127,59067,51846],{"class":147},[127,59069,59070,59072,59074,59076,59078,59080],{"class":129,"line":137},[127,59071,1584],{"class":147},[127,59073,51175],{"class":140},[127,59075,51855],{"class":143},[127,59077,725],{"class":147},[127,59079,51860],{"class":781},[127,59081,51846],{"class":147},[127,59083,59084],{"class":129,"line":151},[127,59085,2942],{"emptyLinePlaceholder":606},[127,59087,59088,59090,59092],{"class":129,"line":167},[127,59089,1584],{"class":147},[127,59091,51873],{"class":140},[127,59093,51846],{"class":147},[127,59095,59096,59098,59100,59102,59104,59106],{"class":129,"line":415},[127,59097,52679],{"class":147},[127,59099,51883],{"class":140},[127,59101,51886],{"class":143},[127,59103,725],{"class":147},[127,59105,51891],{"class":781},[127,59107,51846],{"class":147},[127,59109,59110,59112,59114,59116,59118,59120,59122,59124,59126],{"class":129,"line":421},[127,59111,52679],{"class":147},[127,59113,51883],{"class":140},[127,59115,15462],{"class":143},[127,59117,725],{"class":147},[127,59119,51930],{"class":781},[127,59121,51910],{"class":143},[127,59123,725],{"class":147},[127,59125,51937],{"class":781},[127,59127,51846],{"class":147},[127,59129,59130,59132,59134,59136,59138],{"class":129,"line":1766},[127,59131,52679],{"class":147},[127,59133,51946],{"class":140},[127,59135,51949],{"class":147},[127,59137,51946],{"class":140},[127,59139,51846],{"class":147},[127,59141,59142,59144,59146],{"class":129,"line":1856},[127,59143,52321],{"class":147},[127,59145,51873],{"class":140},[127,59147,51846],{"class":147},[127,59149,59150],{"class":129,"line":1862},[127,59151,2942],{"emptyLinePlaceholder":606},[127,59153,59154,59156,59158],{"class":129,"line":1874},[127,59155,1584],{"class":147},[127,59157,275],{"class":140},[127,59159,51846],{"class":147},[127,59161,59162,59164,59166,59168,59170],{"class":129,"line":2155},[127,59163,52679],{"class":147},[127,59165,54422],{"class":140},[127,59167,54428],{"class":147},[127,59169,54422],{"class":140},[127,59171,51846],{"class":147},[127,59173,59174,59176,59178],{"class":129,"line":2160},[127,59175,52679],{"class":147},[127,59177,52348],{"class":140},[127,59179,51846],{"class":147},[127,59181,59182,59184,59186,59188],{"class":129,"line":2166},[127,59183,11763],{"class":290},[127,59185,2782],{"class":154},[127,59187,14106],{"class":290},[127,59189,58961],{"class":154},[127,59191,59192,59194,59196,59198,59200,59202,59204,59206],{"class":129,"line":2171},[127,59193,11763],{"class":290},[127,59195,54926],{"class":154},[127,59197,14106],{"class":290},[127,59199,54931],{"class":147},[127,59201,54934],{"class":143},[127,59203,681],{"class":147},[127,59205,58737],{"class":781},[127,59207,687],{"class":147},[127,59209,59210,59212,59214,59216,59218,59220,59222],{"class":129,"line":2185},[127,59211,58744],{"class":147},[127,59213,58346],{"class":143},[127,59215,681],{"class":147},[127,59217,58351],{"class":781},[127,59219,12977],{"class":147},[127,59221,54984],{"class":290},[127,59223,54987],{"class":147},[127,59225,59226,59229,59231,59233,59235],{"class":129,"line":2190},[127,59227,59228],{"class":147},"      num ",[127,59230,725],{"class":290},[127,59232,58768],{"class":147},[127,59234,58393],{"class":143},[127,59236,2518],{"class":147},[127,59238,59239,59241,59243],{"class":129,"line":2196},[127,59240,58777],{"class":147},[127,59242,58780],{"class":143},[127,59244,694],{"class":147},[127,59246,59247],{"class":129,"line":2217},[127,59248,34001],{"class":147},[127,59250,59251,59253,59255],{"class":129,"line":2222},[127,59252,52952],{"class":147},[127,59254,52348],{"class":140},[127,59256,51846],{"class":147},[127,59258,59259,59261,59263],{"class":129,"line":2236},[127,59260,52321],{"class":147},[127,59262,275],{"class":140},[127,59264,51846],{"class":147},[127,59266,59267],{"class":129,"line":2241},[127,59268,2942],{"emptyLinePlaceholder":606},[127,59270,59271,59273,59275],{"class":129,"line":2270},[127,59272,52321],{"class":147},[127,59274,51175],{"class":140},[127,59276,51846],{"class":147},[19,59278,59279],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[62,59281,59283],{"id":59282},"_324-事件监听版本","3.2.4 事件监听版本",[19,59285,59286],{},[23,59287],{"alt":122,"src":59288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59290,59291],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59293,59294],{},"这种方式会覆盖前边的事件监听:",[117,59296,59298],{"className":51173,"code":59297,"language":51175,"meta":122,"style":122},"\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",[124,59299,59300,59310,59324,59328,59336,59350,59370,59382,59390,59394,59402,59414,59422,59440,59454,59465,59469,59481,59491,59495,59503,59511,59515],{"__ignoreMap":122},[127,59301,59302,59304,59306,59308],{"class":129,"line":130},[127,59303,51837],{"class":147},[127,59305,51840],{"class":140},[127,59307,51843],{"class":143},[127,59309,51846],{"class":147},[127,59311,59312,59314,59316,59318,59320,59322],{"class":129,"line":137},[127,59313,1584],{"class":147},[127,59315,51175],{"class":140},[127,59317,51855],{"class":143},[127,59319,725],{"class":147},[127,59321,51860],{"class":781},[127,59323,51846],{"class":147},[127,59325,59326],{"class":129,"line":151},[127,59327,2942],{"emptyLinePlaceholder":606},[127,59329,59330,59332,59334],{"class":129,"line":167},[127,59331,1584],{"class":147},[127,59333,51873],{"class":140},[127,59335,51846],{"class":147},[127,59337,59338,59340,59342,59344,59346,59348],{"class":129,"line":415},[127,59339,52679],{"class":147},[127,59341,51883],{"class":140},[127,59343,51886],{"class":143},[127,59345,725],{"class":147},[127,59347,51891],{"class":781},[127,59349,51846],{"class":147},[127,59351,59352,59354,59356,59358,59360,59362,59364,59366,59368],{"class":129,"line":421},[127,59353,52679],{"class":147},[127,59355,51883],{"class":140},[127,59357,15462],{"class":143},[127,59359,725],{"class":147},[127,59361,51930],{"class":781},[127,59363,51910],{"class":143},[127,59365,725],{"class":147},[127,59367,51937],{"class":781},[127,59369,51846],{"class":147},[127,59371,59372,59374,59376,59378,59380],{"class":129,"line":1766},[127,59373,52679],{"class":147},[127,59375,51946],{"class":140},[127,59377,51949],{"class":147},[127,59379,51946],{"class":140},[127,59381,51846],{"class":147},[127,59383,59384,59386,59388],{"class":129,"line":1856},[127,59385,52321],{"class":147},[127,59387,51873],{"class":140},[127,59389,51846],{"class":147},[127,59391,59392],{"class":129,"line":1862},[127,59393,2942],{"emptyLinePlaceholder":606},[127,59395,59396,59398,59400],{"class":129,"line":1874},[127,59397,1584],{"class":147},[127,59399,275],{"class":140},[127,59401,51846],{"class":147},[127,59403,59404,59406,59408,59410,59412],{"class":129,"line":2155},[127,59405,52679],{"class":147},[127,59407,54422],{"class":140},[127,59409,54428],{"class":147},[127,59411,54422],{"class":140},[127,59413,51846],{"class":147},[127,59415,59416,59418,59420],{"class":129,"line":2160},[127,59417,52679],{"class":147},[127,59419,52348],{"class":140},[127,59421,51846],{"class":147},[127,59423,59424,59426,59428,59430,59432,59434,59436,59438],{"class":129,"line":2166},[127,59425,11763],{"class":290},[127,59427,54926],{"class":154},[127,59429,14106],{"class":290},[127,59431,54931],{"class":147},[127,59433,54934],{"class":143},[127,59435,681],{"class":147},[127,59437,58737],{"class":781},[127,59439,687],{"class":147},[127,59441,59442,59444,59447,59449,59452],{"class":129,"line":2171},[127,59443,58744],{"class":147},[127,59445,59446],{"class":143},"onclick",[127,59448,14106],{"class":290},[127,59450,59451],{"class":290}," function",[127,59453,54987],{"class":147},[127,59455,59456,59459,59461,59463],{"class":129,"line":2185},[127,59457,59458],{"class":143},"      alert",[127,59460,681],{"class":147},[127,59462,1147],{"class":154},[127,59464,687],{"class":147},[127,59466,59467],{"class":129,"line":2190},[127,59468,2729],{"class":147},[127,59470,59471,59473,59475,59477,59479],{"class":129,"line":2196},[127,59472,58744],{"class":147},[127,59474,59446],{"class":143},[127,59476,14106],{"class":290},[127,59478,59451],{"class":290},[127,59480,54987],{"class":147},[127,59482,59483,59485,59487,59489],{"class":129,"line":2217},[127,59484,59458],{"class":143},[127,59486,681],{"class":147},[127,59488,1424],{"class":154},[127,59490,687],{"class":147},[127,59492,59493],{"class":129,"line":2222},[127,59494,2729],{"class":147},[127,59496,59497,59499,59501],{"class":129,"line":2236},[127,59498,52952],{"class":147},[127,59500,52348],{"class":140},[127,59502,51846],{"class":147},[127,59504,59505,59507,59509],{"class":129,"line":2241},[127,59506,52321],{"class":147},[127,59508,275],{"class":140},[127,59510,51846],{"class":147},[127,59512,59513],{"class":129,"line":2270},[127,59514,2942],{"emptyLinePlaceholder":606},[127,59516,59517,59519,59521],{"class":129,"line":2275},[127,59518,52321],{"class":147},[127,59520,51175],{"class":140},[127,59522,51846],{"class":147},[19,59524,59525],{},"只要点击就输出结果为22,前边11被覆盖了",[117,59527,59529],{"className":51173,"code":59528,"language":51175,"meta":122,"style":122},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[124,59530,59531,59536,59541,59545,59550,59555],{"__ignoreMap":122},[127,59532,59533],{"class":129,"line":130},[127,59534,59535],{"class":147},"  btn.addEventListener('click', function () {\n",[127,59537,59538],{"class":129,"line":137},[127,59539,59540],{"class":147},"      alert(11)\n",[127,59542,59543],{"class":129,"line":151},[127,59544,34001],{"class":147},[127,59546,59547],{"class":129,"line":167},[127,59548,59549],{"class":147},"    btn.addEventListener('click', function () {\n",[127,59551,59552],{"class":129,"line":415},[127,59553,59554],{"class":147},"      alert(22)\n",[127,59556,59557],{"class":129,"line":421},[127,59558,34001],{"class":147},[19,59560,59561],{},"点击第一次输出11,第二次点击为22",[62,59563,59565],{"id":59564},"_325-事件类型","3.2.5 事件类型",[19,59567,59568],{},[23,59569],{"alt":122,"src":59570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22539,59572,59574],{"id":59573},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59576,59577],{},"补充知识:",[19,59579,59580],{},"轮播图自动播放模块,可以使用",[19,59582,59583],{},"let timerId = setInterval(function () {",[19,59585,59586],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59588,59589],{},"用js方法模拟进行点击事件,click必须加()",[19,59591,59592],{},"next.click()",[19,59594,59595],{},"}, 1000)",[19,59597,59598],{},[23,59599],{"alt":122,"src":59600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[117,59602,59604],{"className":53602,"code":59603,"language":53604,"meta":122,"style":122},"\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",[124,59605,59606,59610,59620,59634,59638,59646,59661,59681,59701,59714,59722,59727,59732,59736,59740,59745,59750,59755,59760,59764,59768,59773,59778,59783,59787,59791,59796,59800,59805,59810,59814,59818,59823,59828,59833,59838,59843,59847,59851,59856,59861,59866,59871,59876,59880,59884,59889,59894,59899,59904,59909,59914,59919,59924,59929,59934,59938,59942,59947,59952,59956,59960,59965,59970,59974,59979,59984,59988,59992,59997,60001,60006,60011,60015,60020,60024,60028,60033,60038,60043,60048,60053,60058,60063,60067,60071,60075,60080,60085,60090,60095,60099,60107,60115,60119,60127,60142,60156,60177,60185,60199,60212,60227,60246,60258,60270,60282,60294,60306,60318,60330,60338,60353,60377,60401,60409,60417,60425,60433,60438,60443,60448,60453,60458,60463,60468,60473,60478,60483,60487,60492,60497,60502,60507,60512,60517,60522,60527,60532,60536,60541,60546,60551,60556,60561,60566,60571,60576,60581,60586,60591,60596,60600,60604,60609,60614,60619,60623,60628,60633,60638,60643,60648,60652,60657,60661,60665,60669,60673,60677,60681,60686,60691,60696,60701,60706,60711,60716,60721,60726,60730,60734,60739,60744,60749,60754,60759,60763,60768,60773,60778,60783,60788,60793,60797,60801,60806,60810,60815,60819,60824,60829,60834,60839,60844,60849,60853,60861,60869,60873],{"__ignoreMap":122},[127,59607,59608],{"class":129,"line":130},[127,59609,2942],{"emptyLinePlaceholder":606},[127,59611,59612,59614,59616,59618],{"class":129,"line":137},[127,59613,51837],{"class":147},[127,59615,51840],{"class":290},[127,59617,51843],{"class":154},[127,59619,51846],{"class":147},[127,59621,59622,59624,59626,59628,59630,59632],{"class":129,"line":151},[127,59623,1584],{"class":147},[127,59625,51175],{"class":140},[127,59627,51855],{"class":143},[127,59629,725],{"class":147},[127,59631,51860],{"class":781},[127,59633,51846],{"class":147},[127,59635,59636],{"class":129,"line":167},[127,59637,2942],{"emptyLinePlaceholder":606},[127,59639,59640,59642,59644],{"class":129,"line":415},[127,59641,1584],{"class":147},[127,59643,51873],{"class":140},[127,59645,51846],{"class":147},[127,59647,59648,59650,59652,59654,59656,59658],{"class":129,"line":421},[127,59649,52679],{"class":147},[127,59651,51883],{"class":140},[127,59653,51886],{"class":143},[127,59655,725],{"class":147},[127,59657,51891],{"class":781},[127,59659,59660],{"class":147}," \u002F>\n",[127,59662,59663,59665,59667,59669,59671,59673,59675,59677,59679],{"class":129,"line":1766},[127,59664,52679],{"class":147},[127,59666,51883],{"class":140},[127,59668,51902],{"class":143},[127,59670,725],{"class":147},[127,59672,51907],{"class":781},[127,59674,51910],{"class":143},[127,59676,725],{"class":147},[127,59678,51915],{"class":781},[127,59680,59660],{"class":147},[127,59682,59683,59685,59687,59689,59691,59693,59695,59697,59699],{"class":129,"line":1856},[127,59684,52679],{"class":147},[127,59686,51883],{"class":140},[127,59688,15462],{"class":143},[127,59690,725],{"class":147},[127,59692,51930],{"class":781},[127,59694,51910],{"class":143},[127,59696,725],{"class":147},[127,59698,51937],{"class":781},[127,59700,59660],{"class":147},[127,59702,59703,59705,59707,59710,59712],{"class":129,"line":1862},[127,59704,52679],{"class":147},[127,59706,51946],{"class":140},[127,59708,59709],{"class":147},">轮播图点击切换\u003C\u002F",[127,59711,51946],{"class":140},[127,59713,51846],{"class":147},[127,59715,59716,59718,59720],{"class":129,"line":1874},[127,59717,52679],{"class":147},[127,59719,575],{"class":140},[127,59721,51846],{"class":147},[127,59723,59724],{"class":129,"line":2155},[127,59725,59726],{"class":147},"    * {\n",[127,59728,59729],{"class":129,"line":2160},[127,59730,59731],{"class":147},"      box-sizing: border-box;\n",[127,59733,59734],{"class":129,"line":2166},[127,59735,2729],{"class":147},[127,59737,59738],{"class":129,"line":2171},[127,59739,2942],{"emptyLinePlaceholder":606},[127,59741,59742],{"class":129,"line":2185},[127,59743,59744],{"class":147},"    .slider {\n",[127,59746,59747],{"class":129,"line":2190},[127,59748,59749],{"class":147},"      width: 560px;\n",[127,59751,59752],{"class":129,"line":2196},[127,59753,59754],{"class":147},"      height: 400px;\n",[127,59756,59757],{"class":129,"line":2217},[127,59758,59759],{"class":147},"      overflow: hidden;\n",[127,59761,59762],{"class":129,"line":2222},[127,59763,2729],{"class":147},[127,59765,59766],{"class":129,"line":2236},[127,59767,2942],{"emptyLinePlaceholder":606},[127,59769,59770],{"class":129,"line":2241},[127,59771,59772],{"class":147},"    .slider-wrapper {\n",[127,59774,59775],{"class":129,"line":2270},[127,59776,59777],{"class":147},"      width: 100%;\n",[127,59779,59780],{"class":129,"line":2275},[127,59781,59782],{"class":147},"      height: 320px;\n",[127,59784,59785],{"class":129,"line":2292},[127,59786,2729],{"class":147},[127,59788,59789],{"class":129,"line":2297},[127,59790,2942],{"emptyLinePlaceholder":606},[127,59792,59793],{"class":129,"line":2302},[127,59794,59795],{"class":147},"    .slider-wrapper img {\n",[127,59797,59798],{"class":129,"line":2307},[127,59799,59777],{"class":147},[127,59801,59802],{"class":129,"line":2321},[127,59803,59804],{"class":147},"      height: 100%;\n",[127,59806,59807],{"class":129,"line":2326},[127,59808,59809],{"class":147},"      display: block;\n",[127,59811,59812],{"class":129,"line":3119},[127,59813,2729],{"class":147},[127,59815,59816],{"class":129,"line":3133},[127,59817,2942],{"emptyLinePlaceholder":606},[127,59819,59820],{"class":129,"line":3141},[127,59821,59822],{"class":147},"    .slider-footer {\n",[127,59824,59825],{"class":129,"line":3146},[127,59826,59827],{"class":147},"      height: 80px;\n",[127,59829,59830],{"class":129,"line":3152},[127,59831,59832],{"class":147},"      background-color: rgb(100, 67, 68);\n",[127,59834,59835],{"class":129,"line":3158},[127,59836,59837],{"class":147},"      padding: 12px 12px 0 12px;\n",[127,59839,59840],{"class":129,"line":3163},[127,59841,59842],{"class":147},"      position: relative;\n",[127,59844,59845],{"class":129,"line":8490},[127,59846,2729],{"class":147},[127,59848,59849],{"class":129,"line":8514},[127,59850,2942],{"emptyLinePlaceholder":606},[127,59852,59853],{"class":129,"line":8519},[127,59854,59855],{"class":147},"    .slider-footer .toggle {\n",[127,59857,59858],{"class":129,"line":8525},[127,59859,59860],{"class":147},"      position: absolute;\n",[127,59862,59863],{"class":129,"line":8552},[127,59864,59865],{"class":147},"      right: 0;\n",[127,59867,59868],{"class":129,"line":8557},[127,59869,59870],{"class":147},"      top: 12px;\n",[127,59872,59873],{"class":129,"line":8563},[127,59874,59875],{"class":147},"      display: flex;\n",[127,59877,59878],{"class":129,"line":8575},[127,59879,2729],{"class":147},[127,59881,59882],{"class":129,"line":8587},[127,59883,2942],{"emptyLinePlaceholder":606},[127,59885,59886],{"class":129,"line":8599},[127,59887,59888],{"class":147},"    .slider-footer .toggle button {\n",[127,59890,59891],{"class":129,"line":10258},[127,59892,59893],{"class":147},"      margin-right: 12px;\n",[127,59895,59896],{"class":129,"line":10283},[127,59897,59898],{"class":147},"      width: 28px;\n",[127,59900,59901],{"class":129,"line":10306},[127,59902,59903],{"class":147},"      height: 28px;\n",[127,59905,59906],{"class":129,"line":10330},[127,59907,59908],{"class":147},"      appearance: none;\n",[127,59910,59911],{"class":129,"line":10335},[127,59912,59913],{"class":147},"      border: none;\n",[127,59915,59916],{"class":129,"line":10340},[127,59917,59918],{"class":147},"      background: rgba(255, 255, 255, 0.1);\n",[127,59920,59921],{"class":129,"line":10345},[127,59922,59923],{"class":147},"      color: #fff;\n",[127,59925,59926],{"class":129,"line":10354},[127,59927,59928],{"class":147},"      border-radius: 4px;\n",[127,59930,59931],{"class":129,"line":10359},[127,59932,59933],{"class":147},"      cursor: pointer;\n",[127,59935,59936],{"class":129,"line":10365},[127,59937,2729],{"class":147},[127,59939,59940],{"class":129,"line":10386},[127,59941,2942],{"emptyLinePlaceholder":606},[127,59943,59944],{"class":129,"line":10392},[127,59945,59946],{"class":147},"    .slider-footer .toggle button:hover {\n",[127,59948,59949],{"class":129,"line":10406},[127,59950,59951],{"class":147},"      background: rgba(255, 255, 255, 0.2);\n",[127,59953,59954],{"class":129,"line":10412},[127,59955,2729],{"class":147},[127,59957,59958],{"class":129,"line":10439},[127,59959,2942],{"emptyLinePlaceholder":606},[127,59961,59962],{"class":129,"line":10448},[127,59963,59964],{"class":147},"    .slider-footer p {\n",[127,59966,59967],{"class":129,"line":10454},[127,59968,59969],{"class":147},"      margin: 0;\n",[127,59971,59972],{"class":129,"line":10462},[127,59973,59923],{"class":147},[127,59975,59976],{"class":129,"line":10467},[127,59977,59978],{"class":147},"      font-size: 18px;\n",[127,59980,59981],{"class":129,"line":17145},[127,59982,59983],{"class":147},"      margin-bottom: 10px;\n",[127,59985,59986],{"class":129,"line":17151},[127,59987,2729],{"class":147},[127,59989,59990],{"class":129,"line":17174},[127,59991,2942],{"emptyLinePlaceholder":606},[127,59993,59994],{"class":129,"line":17180},[127,59995,59996],{"class":147},"    .slider-indicator {\n",[127,59998,59999],{"class":129,"line":17203},[127,60000,59969],{"class":147},[127,60002,60003],{"class":129,"line":17217},[127,60004,60005],{"class":147},"      padding: 0;\n",[127,60007,60008],{"class":129,"line":17237},[127,60009,60010],{"class":147},"      list-style: none;\n",[127,60012,60013],{"class":129,"line":17243},[127,60014,59875],{"class":147},[127,60016,60017],{"class":129,"line":17254},[127,60018,60019],{"class":147},"      align-items: center;\n",[127,60021,60022],{"class":129,"line":17277},[127,60023,2729],{"class":147},[127,60025,60026],{"class":129,"line":17299},[127,60027,2942],{"emptyLinePlaceholder":606},[127,60029,60030],{"class":129,"line":17304},[127,60031,60032],{"class":147},"    .slider-indicator li {\n",[127,60034,60035],{"class":129,"line":17310},[127,60036,60037],{"class":147},"      width: 8px;\n",[127,60039,60040],{"class":129,"line":17324},[127,60041,60042],{"class":147},"      height: 8px;\n",[127,60044,60045],{"class":129,"line":17337},[127,60046,60047],{"class":147},"      margin: 4px;\n",[127,60049,60050],{"class":129,"line":17342},[127,60051,60052],{"class":147},"      border-radius: 50%;\n",[127,60054,60055],{"class":129,"line":17356},[127,60056,60057],{"class":147},"      background: #fff;\n",[127,60059,60060],{"class":129,"line":17361},[127,60061,60062],{"class":147},"      opacity: 0.4;\n",[127,60064,60065],{"class":129,"line":17367},[127,60066,59933],{"class":147},[127,60068,60069],{"class":129,"line":17372},[127,60070,2729],{"class":147},[127,60072,60073],{"class":129,"line":17386},[127,60074,2942],{"emptyLinePlaceholder":606},[127,60076,60077],{"class":129,"line":17391},[127,60078,60079],{"class":147},"    .slider-indicator li.active {\n",[127,60081,60082],{"class":129,"line":17396},[127,60083,60084],{"class":147},"      width: 12px;\n",[127,60086,60087],{"class":129,"line":17410},[127,60088,60089],{"class":147},"      height: 12px;\n",[127,60091,60092],{"class":129,"line":17422},[127,60093,60094],{"class":147},"      opacity: 1;\n",[127,60096,60097],{"class":129,"line":17427},[127,60098,2729],{"class":147},[127,60100,60101,60103,60105],{"class":129,"line":17440},[127,60102,52952],{"class":147},[127,60104,575],{"class":140},[127,60106,51846],{"class":147},[127,60108,60109,60111,60113],{"class":129,"line":17445},[127,60110,52321],{"class":147},[127,60112,51873],{"class":140},[127,60114,51846],{"class":147},[127,60116,60117],{"class":129,"line":17450},[127,60118,2942],{"emptyLinePlaceholder":606},[127,60120,60121,60123,60125],{"class":129,"line":17455},[127,60122,1584],{"class":147},[127,60124,275],{"class":140},[127,60126,51846],{"class":147},[127,60128,60129,60131,60133,60135,60137,60140],{"class":129,"line":17468},[127,60130,52679],{"class":147},[127,60132,52147],{"class":140},[127,60134,54021],{"class":143},[127,60136,725],{"class":147},[127,60138,60139],{"class":781},"\"slider\"",[127,60141,51846],{"class":147},[127,60143,60144,60146,60148,60150,60152,60154],{"class":129,"line":17473},[127,60145,51880],{"class":147},[127,60147,52147],{"class":140},[127,60149,54021],{"class":143},[127,60151,725],{"class":147},[127,60153,55761],{"class":781},[127,60155,51846],{"class":147},[127,60157,60158,60160,60162,60164,60166,60169,60171,60173,60175],{"class":129,"line":33173},[127,60159,55768],{"class":147},[127,60161,23],{"class":140},[127,60163,55773],{"class":143},[127,60165,725],{"class":147},[127,60167,60168],{"class":781},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[127,60170,55781],{"class":143},[127,60172,725],{"class":147},[127,60174,8194],{"class":781},[127,60176,59660],{"class":147},[127,60178,60179,60181,60183],{"class":129,"line":33179},[127,60180,52312],{"class":147},[127,60182,52147],{"class":140},[127,60184,51846],{"class":147},[127,60186,60187,60189,60191,60193,60195,60197],{"class":129,"line":33185},[127,60188,51880],{"class":147},[127,60190,52147],{"class":140},[127,60192,54021],{"class":143},[127,60194,725],{"class":147},[127,60196,55808],{"class":781},[127,60198,51846],{"class":147},[127,60200,60201,60203,60205,60208,60210],{"class":129,"line":33191},[127,60202,55768],{"class":147},[127,60204,19],{"class":140},[127,60206,60207],{"class":147},">对人类来说会不会太超前了？\u003C\u002F",[127,60209,19],{"class":140},[127,60211,51846],{"class":147},[127,60213,60214,60216,60218,60220,60222,60225],{"class":129,"line":33197},[127,60215,55768],{"class":147},[127,60217,1681],{"class":140},[127,60219,54021],{"class":143},[127,60221,725],{"class":147},[127,60223,60224],{"class":781},"\"slider-indicator\"",[127,60226,51846],{"class":147},[127,60228,60229,60231,60233,60235,60237,60240,60242,60244],{"class":129,"line":33208},[127,60230,55836],{"class":147},[127,60232,635],{"class":140},[127,60234,54021],{"class":143},[127,60236,725],{"class":147},[127,60238,60239],{"class":781},"\"active\"",[127,60241,55848],{"class":147},[127,60243,635],{"class":140},[127,60245,51846],{"class":147},[127,60247,60248,60250,60252,60254,60256],{"class":129,"line":33214},[127,60249,55836],{"class":147},[127,60251,635],{"class":140},[127,60253,55848],{"class":147},[127,60255,635],{"class":140},[127,60257,51846],{"class":147},[127,60259,60260,60262,60264,60266,60268],{"class":129,"line":33234},[127,60261,55836],{"class":147},[127,60263,635],{"class":140},[127,60265,55848],{"class":147},[127,60267,635],{"class":140},[127,60269,51846],{"class":147},[127,60271,60272,60274,60276,60278,60280],{"class":129,"line":33240},[127,60273,55836],{"class":147},[127,60275,635],{"class":140},[127,60277,55848],{"class":147},[127,60279,635],{"class":140},[127,60281,51846],{"class":147},[127,60283,60284,60286,60288,60290,60292],{"class":129,"line":33251},[127,60285,55836],{"class":147},[127,60287,635],{"class":140},[127,60289,55848],{"class":147},[127,60291,635],{"class":140},[127,60293,51846],{"class":147},[127,60295,60296,60298,60300,60302,60304],{"class":129,"line":33257},[127,60297,55836],{"class":147},[127,60299,635],{"class":140},[127,60301,55848],{"class":147},[127,60303,635],{"class":140},[127,60305,51846],{"class":147},[127,60307,60308,60310,60312,60314,60316],{"class":129,"line":33263},[127,60309,55836],{"class":147},[127,60311,635],{"class":140},[127,60313,55848],{"class":147},[127,60315,635],{"class":140},[127,60317,51846],{"class":147},[127,60319,60320,60322,60324,60326,60328],{"class":129,"line":33269},[127,60321,55836],{"class":147},[127,60323,635],{"class":140},[127,60325,55848],{"class":147},[127,60327,635],{"class":140},[127,60329,51846],{"class":147},[127,60331,60332,60334,60336],{"class":129,"line":33275},[127,60333,55941],{"class":147},[127,60335,1681],{"class":140},[127,60337,51846],{"class":147},[127,60339,60340,60342,60344,60346,60348,60351],{"class":129,"line":33281},[127,60341,55768],{"class":147},[127,60343,52147],{"class":140},[127,60345,54021],{"class":143},[127,60347,725],{"class":147},[127,60349,60350],{"class":781},"\"toggle\"",[127,60352,51846],{"class":147},[127,60354,60355,60357,60359,60361,60363,60366,60368,60371,60373,60375],{"class":129,"line":33287},[127,60356,55836],{"class":147},[127,60358,54422],{"class":140},[127,60360,54021],{"class":143},[127,60362,725],{"class":147},[127,60364,60365],{"class":781},"\"prev\"",[127,60367,1634],{"class":147},[127,60369,60370],{"class":154},"&lt;",[127,60372,52321],{"class":147},[127,60374,54422],{"class":140},[127,60376,51846],{"class":147},[127,60378,60379,60381,60383,60385,60387,60390,60392,60395,60397,60399],{"class":129,"line":33293},[127,60380,55836],{"class":147},[127,60382,54422],{"class":140},[127,60384,54021],{"class":143},[127,60386,725],{"class":147},[127,60388,60389],{"class":781},"\"next\"",[127,60391,1634],{"class":147},[127,60393,60394],{"class":154},"&gt;",[127,60396,52321],{"class":147},[127,60398,54422],{"class":140},[127,60400,51846],{"class":147},[127,60402,60403,60405,60407],{"class":129,"line":33313},[127,60404,55941],{"class":147},[127,60406,52147],{"class":140},[127,60408,51846],{"class":147},[127,60410,60411,60413,60415],{"class":129,"line":33319},[127,60412,52312],{"class":147},[127,60414,52147],{"class":140},[127,60416,51846],{"class":147},[127,60418,60419,60421,60423],{"class":129,"line":33335},[127,60420,52952],{"class":147},[127,60422,52147],{"class":140},[127,60424,51846],{"class":147},[127,60426,60427,60429,60431],{"class":129,"line":33341},[127,60428,52679],{"class":147},[127,60430,52348],{"class":140},[127,60432,51846],{"class":147},[127,60434,60435],{"class":129,"line":33355},[127,60436,60437],{"class":147},"    \u002F\u002F 1. 初始数据\n",[127,60439,60440],{"class":129,"line":33361},[127,60441,60442],{"class":147},"    const data = [\n",[127,60444,60445],{"class":129,"line":33376},[127,60446,60447],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[127,60449,60450],{"class":129,"line":33382},[127,60451,60452],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[127,60454,60455],{"class":129,"line":33391},[127,60456,60457],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[127,60459,60460],{"class":129,"line":33397},[127,60461,60462],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[127,60464,60465],{"class":129,"line":33406},[127,60466,60467],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[127,60469,60470],{"class":129,"line":33412},[127,60471,60472],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[127,60474,60475],{"class":129,"line":33418},[127,60476,60477],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[127,60479,60480],{"class":129,"line":33427},[127,60481,60482],{"class":147},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[127,60484,60485],{"class":129,"line":33433},[127,60486,53644],{"class":147},[127,60488,60489],{"class":129,"line":33444},[127,60490,60491],{"class":147},"    \u002F\u002F 获取元素\n",[127,60493,60494],{"class":129,"line":33450},[127,60495,60496],{"class":147},"    const img = document.querySelector('.slider-wrapper img')\n",[127,60498,60499],{"class":129,"line":33469},[127,60500,60501],{"class":147},"    const p = document.querySelector('.slider-footer p')\n",[127,60503,60504],{"class":129,"line":33475},[127,60505,60506],{"class":147},"    const footer = document.querySelector('.slider-footer')\n",[127,60508,60509],{"class":129,"line":33486},[127,60510,60511],{"class":147},"    \u002F\u002F 1. 右按钮业务\n",[127,60513,60514],{"class":129,"line":33492},[127,60515,60516],{"class":147},"    \u002F\u002F 1.1 获取右侧按钮 \n",[127,60518,60519],{"class":129,"line":33512},[127,60520,60521],{"class":147},"    const next = document.querySelector('.next')\n",[127,60523,60524],{"class":129,"line":33528},[127,60525,60526],{"class":147},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[127,60528,60529],{"class":129,"line":33534},[127,60530,60531],{"class":147},"    \u002F\u002F 1.2 注册点击事件\n",[127,60533,60534],{"class":129,"line":33548},[127,60535,2942],{"emptyLinePlaceholder":606},[127,60537,60538],{"class":129,"line":33554},[127,60539,60540],{"class":147},"    next.addEventListener('click', function () {\n",[127,60542,60543],{"class":129,"line":33560},[127,60544,60545],{"class":147},"      \u002F\u002F console.log(11)\n",[127,60547,60548],{"class":129,"line":33571},[127,60549,60550],{"class":147},"      i++\n",[127,60552,60553],{"class":129,"line":33577},[127,60554,60555],{"class":147},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[127,60557,60558],{"class":129,"line":33583},[127,60559,60560],{"class":147},"      \u002F\u002F if (i >= 8) {\n",[127,60562,60563],{"class":129,"line":33593},[127,60564,60565],{"class":147},"      \u002F\u002F   i = 0\n",[127,60567,60568],{"class":129,"line":33599},[127,60569,60570],{"class":147},"      \u002F\u002F }\n",[127,60572,60573],{"class":129,"line":33610},[127,60574,60575],{"class":147},"      i = i >= data.length ? 0 : i\n",[127,60577,60578],{"class":129,"line":33616},[127,60579,60580],{"class":147},"      \u002F\u002F 1.3 得到对应的对象\n",[127,60582,60583],{"class":129,"line":33626},[127,60584,60585],{"class":147},"      \u002F\u002F console.log(data[i])\n",[127,60587,60588],{"class":129,"line":33631},[127,60589,60590],{"class":147},"      \u002F\u002F 调用函数\n",[127,60592,60593],{"class":129,"line":33637},[127,60594,60595],{"class":147},"      toggle()\n",[127,60597,60598],{"class":129,"line":33686},[127,60599,34001],{"class":147},[127,60601,60602],{"class":129,"line":33733},[127,60603,2942],{"emptyLinePlaceholder":606},[127,60605,60606],{"class":129,"line":33738},[127,60607,60608],{"class":147},"    \u002F\u002F 2. 左侧按钮业务\n",[127,60610,60611],{"class":129,"line":33744},[127,60612,60613],{"class":147},"    \u002F\u002F 2.1 获取左侧按钮 \n",[127,60615,60616],{"class":129,"line":33763},[127,60617,60618],{"class":147},"    const prev = document.querySelector('.prev')\n",[127,60620,60621],{"class":129,"line":33769},[127,60622,60531],{"class":147},[127,60624,60625],{"class":129,"line":33789},[127,60626,60627],{"class":147},"    prev.addEventListener('click', function () {\n",[127,60629,60630],{"class":129,"line":33795},[127,60631,60632],{"class":147},"      i--\n",[127,60634,60635],{"class":129,"line":33801},[127,60636,60637],{"class":147},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[127,60639,60640],{"class":129,"line":33811},[127,60641,60642],{"class":147},"      \u002F\u002F if (i \u003C 0) {\n",[127,60644,60645],{"class":129,"line":33816},[127,60646,60647],{"class":147},"      \u002F\u002F   i = 7\n",[127,60649,60650],{"class":129,"line":33822},[127,60651,60570],{"class":147},[127,60653,60654],{"class":129,"line":33838},[127,60655,60656],{"class":147},"      i = i \u003C 0 ? data.length - 1 : i\n",[127,60658,60659],{"class":129,"line":33883},[127,60660,60580],{"class":147},[127,60662,60663],{"class":129,"line":33889},[127,60664,60585],{"class":147},[127,60666,60667],{"class":129,"line":33895},[127,60668,60590],{"class":147},[127,60670,60671],{"class":129,"line":33901},[127,60672,60595],{"class":147},[127,60674,60675],{"class":129,"line":33912},[127,60676,34001],{"class":147},[127,60678,60679],{"class":129,"line":33918},[127,60680,2942],{"emptyLinePlaceholder":606},[127,60682,60683],{"class":129,"line":33924},[127,60684,60685],{"class":147},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[127,60687,60688],{"class":129,"line":33930},[127,60689,60690],{"class":147},"    function toggle() {\n",[127,60692,60693],{"class":129,"line":33948},[127,60694,60695],{"class":147},"      \u002F\u002F 1.4 渲染对应的数据\n",[127,60697,60698],{"class":129,"line":33962},[127,60699,60700],{"class":147},"      img.src = data[i].url\n",[127,60702,60703],{"class":129,"line":33971},[127,60704,60705],{"class":147},"      p.innerHTML = data[i].title\n",[127,60707,60708],{"class":129,"line":33980},[127,60709,60710],{"class":147},"      footer.style.backgroundColor = data[i].color\n",[127,60712,60713],{"class":129,"line":33989},[127,60714,60715],{"class":147},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[127,60717,60718],{"class":129,"line":33998},[127,60719,60720],{"class":147},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[127,60722,60723],{"class":129,"line":34004},[127,60724,60725],{"class":147},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[127,60727,60728],{"class":129,"line":34010},[127,60729,2729],{"class":147},[127,60731,60732],{"class":129,"line":34018},[127,60733,2942],{"emptyLinePlaceholder":606},[127,60735,60736],{"class":129,"line":34023},[127,60737,60738],{"class":147},"    \u002F\u002F 3. 自动播放模块\n",[127,60740,60741],{"class":129,"line":34029},[127,60742,60743],{"class":147},"    let timerId = setInterval(function () {\n",[127,60745,60746],{"class":129,"line":34040},[127,60747,60748],{"class":147},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[127,60750,60751],{"class":129,"line":34046},[127,60752,60753],{"class":147},"      next.click()\n",[127,60755,60756],{"class":129,"line":34066},[127,60757,60758],{"class":147},"    }, 1000)\n",[127,60760,60761],{"class":129,"line":34072},[127,60762,2942],{"emptyLinePlaceholder":606},[127,60764,60765],{"class":129,"line":34078},[127,60766,60767],{"class":147},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[127,60769,60770],{"class":129,"line":34084},[127,60771,60772],{"class":147},"    const slider = document.querySelector('.slider')\n",[127,60774,60775],{"class":129,"line":34101},[127,60776,60777],{"class":147},"    \u002F\u002F 注册事件\n",[127,60779,60780],{"class":129,"line":34107},[127,60781,60782],{"class":147},"    slider.addEventListener('mouseenter', function () {\n",[127,60784,60785],{"class":129,"line":34113},[127,60786,60787],{"class":147},"      \u002F\u002F 停止定时器\n",[127,60789,60790],{"class":129,"line":34119},[127,60791,60792],{"class":147},"      clearInterval(timerId)\n",[127,60794,60795],{"class":129,"line":34125},[127,60796,34001],{"class":147},[127,60798,60799],{"class":129,"line":34131},[127,60800,2942],{"emptyLinePlaceholder":606},[127,60802,60803],{"class":129,"line":34158},[127,60804,60805],{"class":147},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[127,60807,60808],{"class":129,"line":34182},[127,60809,60777],{"class":147},[127,60811,60812],{"class":129,"line":34188},[127,60813,60814],{"class":147},"    slider.addEventListener('mouseleave', function () {\n",[127,60816,60817],{"class":129,"line":34194},[127,60818,60787],{"class":147},[127,60820,60821],{"class":129,"line":34200},[127,60822,60823],{"class":147},"      if (timerId) clearInterval(timerId)\n",[127,60825,60826],{"class":129,"line":34211},[127,60827,60828],{"class":147},"      \u002F\u002F 开启定时器\n",[127,60830,60831],{"class":129,"line":34222},[127,60832,60833],{"class":147},"      timerId = setInterval(function () {\n",[127,60835,60836],{"class":129,"line":34228},[127,60837,60838],{"class":147},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[127,60840,60841],{"class":129,"line":34245},[127,60842,60843],{"class":147},"        next.click()\n",[127,60845,60846],{"class":129,"line":34268},[127,60847,60848],{"class":147},"      }, 1000)\n",[127,60850,60851],{"class":129,"line":34291},[127,60852,34001],{"class":147},[127,60854,60855,60857,60859],{"class":129,"line":34297},[127,60856,52952],{"class":147},[127,60858,52348],{"class":140},[127,60860,51846],{"class":147},[127,60862,60863,60865,60867],{"class":129,"line":34302},[127,60864,52321],{"class":147},[127,60866,275],{"class":140},[127,60868,51846],{"class":147},[127,60870,60871],{"class":129,"line":34311},[127,60872,2942],{"emptyLinePlaceholder":606},[127,60874,60875,60877,60879],{"class":129,"line":34321},[127,60876,52321],{"class":147},[127,60878,51175],{"class":140},[127,60880,51846],{"class":147},[22539,60882,60884],{"id":60883},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60886,60887],{},"小米搜索框案例：",[117,60889,60891],{"className":51173,"code":60890,"language":51175,"meta":122,"style":122},"\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",[124,60892,60893,60903,60917,60921,60929,60943,60963,60983,60995,61003,61009,61019,61029,61041,61045,61049,61056,61060,61071,61075,61079,61086,61097,61110,61124,61128,61132,61141,61153,61165,61179,61192,61205,61223,61234,61238,61242,61251,61268,61272,61276,61283,61293,61303,61314,61327,61339,61355,61366,61378,61382,61386,61394,61405,61422,61434,61446,61457,61461,61465,61476,61487,61491,61499,61503,61511,61515,61523,61538,61561,61576,61607,61634,61661,61688,61715,61742,61769,61778,61786,61794,61799,61819,61839,61844,61849,61867,61872,61882,61887,61901,61906,61911,61928,61937,61949,61953,61961,61969,61973],{"__ignoreMap":122},[127,60894,60895,60897,60899,60901],{"class":129,"line":130},[127,60896,51837],{"class":147},[127,60898,51840],{"class":140},[127,60900,51843],{"class":143},[127,60902,51846],{"class":147},[127,60904,60905,60907,60909,60911,60913,60915],{"class":129,"line":137},[127,60906,1584],{"class":147},[127,60908,51175],{"class":140},[127,60910,51855],{"class":143},[127,60912,725],{"class":147},[127,60914,51860],{"class":781},[127,60916,51846],{"class":147},[127,60918,60919],{"class":129,"line":151},[127,60920,2942],{"emptyLinePlaceholder":606},[127,60922,60923,60925,60927],{"class":129,"line":167},[127,60924,1584],{"class":147},[127,60926,51873],{"class":140},[127,60928,51846],{"class":147},[127,60930,60931,60933,60935,60937,60939,60941],{"class":129,"line":415},[127,60932,51880],{"class":147},[127,60934,51883],{"class":140},[127,60936,51886],{"class":143},[127,60938,725],{"class":147},[127,60940,51891],{"class":781},[127,60942,51846],{"class":147},[127,60944,60945,60947,60949,60951,60953,60955,60957,60959,60961],{"class":129,"line":421},[127,60946,51880],{"class":147},[127,60948,51883],{"class":140},[127,60950,51902],{"class":143},[127,60952,725],{"class":147},[127,60954,51907],{"class":781},[127,60956,51910],{"class":143},[127,60958,725],{"class":147},[127,60960,51915],{"class":781},[127,60962,51846],{"class":147},[127,60964,60965,60967,60969,60971,60973,60975,60977,60979,60981],{"class":129,"line":1766},[127,60966,51880],{"class":147},[127,60968,51883],{"class":140},[127,60970,15462],{"class":143},[127,60972,725],{"class":147},[127,60974,51930],{"class":781},[127,60976,51910],{"class":143},[127,60978,725],{"class":147},[127,60980,51937],{"class":781},[127,60982,51846],{"class":147},[127,60984,60985,60987,60989,60991,60993],{"class":129,"line":1856},[127,60986,51880],{"class":147},[127,60988,51946],{"class":140},[127,60990,51949],{"class":147},[127,60992,51946],{"class":140},[127,60994,51846],{"class":147},[127,60996,60997,60999,61001],{"class":129,"line":1862},[127,60998,51880],{"class":147},[127,61000,575],{"class":140},[127,61002,51846],{"class":147},[127,61004,61005,61007],{"class":129,"line":1874},[127,61006,51966],{"class":140},[127,61008,148],{"class":147},[127,61010,61011,61013,61015,61017],{"class":129,"line":2155},[127,61012,51973],{"class":154},[127,61014,158],{"class":147},[127,61016,867],{"class":154},[127,61018,164],{"class":147},[127,61020,61021,61023,61025,61027],{"class":129,"line":2160},[127,61022,51984],{"class":154},[127,61024,158],{"class":147},[127,61026,867],{"class":154},[127,61028,164],{"class":147},[127,61030,61031,61034,61036,61039],{"class":129,"line":2166},[127,61032,61033],{"class":154},"            box-sizing",[127,61035,158],{"class":147},[127,61037,61038],{"class":154},"border-box",[127,61040,164],{"class":147},[127,61042,61043],{"class":129,"line":2171},[127,61044,3071],{"class":147},[127,61046,61047],{"class":129,"line":2185},[127,61048,2942],{"emptyLinePlaceholder":606},[127,61050,61051,61054],{"class":129,"line":2190},[127,61052,61053],{"class":140},"        ul",[127,61055,148],{"class":147},[127,61057,61058],{"class":129,"line":2196},[127,61059,2942],{"emptyLinePlaceholder":606},[127,61061,61062,61065,61067,61069],{"class":129,"line":2217},[127,61063,61064],{"class":154},"            list-style",[127,61066,158],{"class":147},[127,61068,469],{"class":154},[127,61070,164],{"class":147},[127,61072,61073],{"class":129,"line":2222},[127,61074,3071],{"class":147},[127,61076,61077],{"class":129,"line":2236},[127,61078,2942],{"emptyLinePlaceholder":606},[127,61080,61081,61084],{"class":129,"line":2241},[127,61082,61083],{"class":143},"        .mi",[127,61085,148],{"class":147},[127,61087,61088,61091,61093,61095],{"class":129,"line":2270},[127,61089,61090],{"class":154},"            position",[127,61092,158],{"class":147},[127,61094,55298],{"class":154},[127,61096,164],{"class":147},[127,61098,61099,61101,61103,61106,61108],{"class":129,"line":2275},[127,61100,52022],{"class":154},[127,61102,158],{"class":147},[127,61104,61105],{"class":154},"223",[127,61107,291],{"class":290},[127,61109,164],{"class":147},[127,61111,61112,61114,61116,61118,61120,61122],{"class":129,"line":2292},[127,61113,51973],{"class":154},[127,61115,158],{"class":147},[127,61117,986],{"class":154},[127,61119,291],{"class":290},[127,61121,52093],{"class":154},[127,61123,164],{"class":147},[127,61125,61126],{"class":129,"line":2297},[127,61127,3071],{"class":147},[127,61129,61130],{"class":129,"line":2302},[127,61131,2942],{"emptyLinePlaceholder":606},[127,61133,61134,61136,61139],{"class":129,"line":2307},[127,61135,61083],{"class":143},[127,61137,61138],{"class":140}," input",[127,61140,148],{"class":147},[127,61142,61143,61145,61147,61149,61151],{"class":129,"line":2321},[127,61144,52022],{"class":154},[127,61146,158],{"class":147},[127,61148,61105],{"class":154},[127,61150,291],{"class":290},[127,61152,164],{"class":147},[127,61154,61155,61157,61159,61161,61163],{"class":129,"line":2326},[127,61156,52036],{"class":154},[127,61158,158],{"class":147},[127,61160,1281],{"class":154},[127,61162,291],{"class":290},[127,61164,164],{"class":147},[127,61166,61167,61169,61171,61173,61175,61177],{"class":129,"line":3119},[127,61168,51984],{"class":154},[127,61170,158],{"class":147},[127,61172,867],{"class":154},[127,61174,2580],{"class":154},[127,61176,291],{"class":290},[127,61178,164],{"class":147},[127,61180,61181,61184,61186,61188,61190],{"class":129,"line":3133},[127,61182,61183],{"class":154},"            font-size",[127,61185,158],{"class":147},[127,61187,1224],{"class":154},[127,61189,291],{"class":290},[127,61191,164],{"class":147},[127,61193,61194,61197,61199,61201,61203],{"class":129,"line":3141},[127,61195,61196],{"class":154},"            line-height",[127,61198,158],{"class":147},[127,61200,1281],{"class":154},[127,61202,291],{"class":290},[127,61204,164],{"class":147},[127,61206,61207,61210,61212,61214,61216,61218,61221],{"class":129,"line":3146},[127,61208,61209],{"class":154},"            border",[127,61211,158],{"class":147},[127,61213,893],{"class":154},[127,61215,291],{"class":290},[127,61217,52058],{"class":154},[127,61219,61220],{"class":154}," #e0e0e0",[127,61222,164],{"class":147},[127,61224,61225,61228,61230,61232],{"class":129,"line":3152},[127,61226,61227],{"class":154},"            outline",[127,61229,158],{"class":147},[127,61231,469],{"class":154},[127,61233,164],{"class":147},[127,61235,61236],{"class":129,"line":3158},[127,61237,3071],{"class":147},[127,61239,61240],{"class":129,"line":3163},[127,61241,2942],{"emptyLinePlaceholder":606},[127,61243,61244,61246,61249],{"class":129,"line":8490},[127,61245,61083],{"class":143},[127,61247,61248],{"class":143}," .search",[127,61250,148],{"class":147},[127,61252,61253,61255,61257,61259,61261,61263,61266],{"class":129,"line":8514},[127,61254,61209],{"class":154},[127,61256,158],{"class":147},[127,61258,893],{"class":154},[127,61260,291],{"class":290},[127,61262,52058],{"class":154},[127,61264,61265],{"class":154}," #ff6700",[127,61267,164],{"class":147},[127,61269,61270],{"class":129,"line":8519},[127,61271,3071],{"class":147},[127,61273,61274],{"class":129,"line":8525},[127,61275,2942],{"emptyLinePlaceholder":606},[127,61277,61278,61281],{"class":129,"line":8552},[127,61279,61280],{"class":143},"        .result-list",[127,61282,148],{"class":147},[127,61284,61285,61287,61289,61291],{"class":129,"line":8557},[127,61286,52010],{"class":154},[127,61288,158],{"class":147},[127,61290,469],{"class":154},[127,61292,164],{"class":147},[127,61294,61295,61297,61299,61301],{"class":129,"line":8563},[127,61296,61090],{"class":154},[127,61298,158],{"class":147},[127,61300,55365],{"class":154},[127,61302,164],{"class":147},[127,61304,61305,61308,61310,61312],{"class":129,"line":8575},[127,61306,61307],{"class":154},"            left",[127,61309,158],{"class":147},[127,61311,867],{"class":154},[127,61313,164],{"class":147},[127,61315,61316,61319,61321,61323,61325],{"class":129,"line":8587},[127,61317,61318],{"class":154},"            top",[127,61320,158],{"class":147},[127,61322,1281],{"class":154},[127,61324,291],{"class":290},[127,61326,164],{"class":147},[127,61328,61329,61331,61333,61335,61337],{"class":129,"line":8599},[127,61330,52022],{"class":154},[127,61332,158],{"class":147},[127,61334,61105],{"class":154},[127,61336,291],{"class":290},[127,61338,164],{"class":147},[127,61340,61341,61343,61345,61347,61349,61351,61353],{"class":129,"line":10258},[127,61342,61209],{"class":154},[127,61344,158],{"class":147},[127,61346,893],{"class":154},[127,61348,291],{"class":290},[127,61350,52058],{"class":154},[127,61352,61265],{"class":154},[127,61354,164],{"class":147},[127,61356,61357,61360,61362,61364],{"class":129,"line":10283},[127,61358,61359],{"class":154},"            border-top",[127,61361,158],{"class":147},[127,61363,867],{"class":154},[127,61365,164],{"class":147},[127,61367,61368,61371,61373,61376],{"class":129,"line":10306},[127,61369,61370],{"class":154},"            background",[127,61372,158],{"class":147},[127,61374,61375],{"class":154},"#fff",[127,61377,164],{"class":147},[127,61379,61380],{"class":129,"line":10330},[127,61381,3071],{"class":147},[127,61383,61384],{"class":129,"line":10335},[127,61385,2942],{"emptyLinePlaceholder":606},[127,61387,61388,61390,61392],{"class":129,"line":10340},[127,61389,61280],{"class":143},[127,61391,1943],{"class":140},[127,61393,148],{"class":147},[127,61395,61396,61398,61400,61403],{"class":129,"line":10345},[127,61397,52010],{"class":154},[127,61399,158],{"class":147},[127,61401,61402],{"class":154},"block",[127,61404,164],{"class":147},[127,61406,61407,61409,61411,61413,61415,61418,61420],{"class":129,"line":10354},[127,61408,51984],{"class":154},[127,61410,158],{"class":147},[127,61412,1019],{"class":154},[127,61414,291],{"class":290},[127,61416,61417],{"class":154}," 15",[127,61419,291],{"class":290},[127,61421,164],{"class":147},[127,61423,61424,61426,61428,61430,61432],{"class":129,"line":10359},[127,61425,61183],{"class":154},[127,61427,158],{"class":147},[127,61429,1173],{"class":154},[127,61431,291],{"class":290},[127,61433,164],{"class":147},[127,61435,61436,61439,61441,61444],{"class":129,"line":10365},[127,61437,61438],{"class":154},"            color",[127,61440,158],{"class":147},[127,61442,61443],{"class":154},"#424242",[127,61445,164],{"class":147},[127,61447,61448,61451,61453,61455],{"class":129,"line":10386},[127,61449,61450],{"class":154},"            text-decoration",[127,61452,158],{"class":147},[127,61454,469],{"class":154},[127,61456,164],{"class":147},[127,61458,61459],{"class":129,"line":10392},[127,61460,3071],{"class":147},[127,61462,61463],{"class":129,"line":10406},[127,61464,2942],{"emptyLinePlaceholder":606},[127,61466,61467,61469,61471,61474],{"class":129,"line":10412},[127,61468,61280],{"class":143},[127,61470,1943],{"class":140},[127,61472,61473],{"class":143},":hover",[127,61475,148],{"class":147},[127,61477,61478,61480,61482,61485],{"class":129,"line":10439},[127,61479,52176],{"class":154},[127,61481,158],{"class":147},[127,61483,61484],{"class":154},"#eee",[127,61486,164],{"class":147},[127,61488,61489],{"class":129,"line":10448},[127,61490,3071],{"class":147},[127,61492,61493,61495,61497],{"class":129,"line":10454},[127,61494,52312],{"class":147},[127,61496,575],{"class":140},[127,61498,51846],{"class":147},[127,61500,61501],{"class":129,"line":10462},[127,61502,2942],{"emptyLinePlaceholder":606},[127,61504,61505,61507,61509],{"class":129,"line":10467},[127,61506,52321],{"class":147},[127,61508,51873],{"class":140},[127,61510,51846],{"class":147},[127,61512,61513],{"class":129,"line":17145},[127,61514,2942],{"emptyLinePlaceholder":606},[127,61516,61517,61519,61521],{"class":129,"line":17151},[127,61518,1584],{"class":147},[127,61520,275],{"class":140},[127,61522,51846],{"class":147},[127,61524,61525,61527,61529,61531,61533,61536],{"class":129,"line":17174},[127,61526,51880],{"class":147},[127,61528,52147],{"class":140},[127,61530,54021],{"class":143},[127,61532,725],{"class":147},[127,61534,61535],{"class":781},"\"mi\"",[127,61537,51846],{"class":147},[127,61539,61540,61542,61544,61546,61548,61551,61554,61556,61559],{"class":129,"line":17180},[127,61541,55836],{"class":147},[127,61543,54356],{"class":140},[127,61545,54359],{"class":143},[127,61547,725],{"class":147},[127,61549,61550],{"class":781},"\"search\"",[127,61552,61553],{"class":143}," placeholder",[127,61555,725],{"class":147},[127,61557,61558],{"class":781},"\"小米笔记本\"",[127,61560,51846],{"class":147},[127,61562,61563,61565,61567,61569,61571,61574],{"class":129,"line":17203},[127,61564,55836],{"class":147},[127,61566,1681],{"class":140},[127,61568,54021],{"class":143},[127,61570,725],{"class":147},[127,61572,61573],{"class":781},"\"result-list\"",[127,61575,51846],{"class":147},[127,61577,61578,61581,61583,61586,61588,61591,61593,61596,61599,61601,61603,61605],{"class":129,"line":17217},[127,61579,61580],{"class":147},"            \u003C",[127,61582,635],{"class":140},[127,61584,61585],{"class":147},">\u003C",[127,61587,457],{"class":140},[127,61589,61590],{"class":143}," href",[127,61592,725],{"class":147},[127,61594,61595],{"class":781},"\"#\"",[127,61597,61598],{"class":147},">全部商品\u003C\u002F",[127,61600,457],{"class":140},[127,61602,55848],{"class":147},[127,61604,635],{"class":140},[127,61606,51846],{"class":147},[127,61608,61609,61611,61613,61615,61617,61619,61621,61623,61626,61628,61630,61632],{"class":129,"line":17237},[127,61610,61580],{"class":147},[127,61612,635],{"class":140},[127,61614,61585],{"class":147},[127,61616,457],{"class":140},[127,61618,61590],{"class":143},[127,61620,725],{"class":147},[127,61622,61595],{"class":781},[127,61624,61625],{"class":147},">小米11\u003C\u002F",[127,61627,457],{"class":140},[127,61629,55848],{"class":147},[127,61631,635],{"class":140},[127,61633,51846],{"class":147},[127,61635,61636,61638,61640,61642,61644,61646,61648,61650,61653,61655,61657,61659],{"class":129,"line":17243},[127,61637,61580],{"class":147},[127,61639,635],{"class":140},[127,61641,61585],{"class":147},[127,61643,457],{"class":140},[127,61645,61590],{"class":143},[127,61647,725],{"class":147},[127,61649,61595],{"class":781},[127,61651,61652],{"class":147},">小米10S\u003C\u002F",[127,61654,457],{"class":140},[127,61656,55848],{"class":147},[127,61658,635],{"class":140},[127,61660,51846],{"class":147},[127,61662,61663,61665,61667,61669,61671,61673,61675,61677,61680,61682,61684,61686],{"class":129,"line":17254},[127,61664,61580],{"class":147},[127,61666,635],{"class":140},[127,61668,61585],{"class":147},[127,61670,457],{"class":140},[127,61672,61590],{"class":143},[127,61674,725],{"class":147},[127,61676,61595],{"class":781},[127,61678,61679],{"class":147},">小米笔记本\u003C\u002F",[127,61681,457],{"class":140},[127,61683,55848],{"class":147},[127,61685,635],{"class":140},[127,61687,51846],{"class":147},[127,61689,61690,61692,61694,61696,61698,61700,61702,61704,61707,61709,61711,61713],{"class":129,"line":17277},[127,61691,61580],{"class":147},[127,61693,635],{"class":140},[127,61695,61585],{"class":147},[127,61697,457],{"class":140},[127,61699,61590],{"class":143},[127,61701,725],{"class":147},[127,61703,61595],{"class":781},[127,61705,61706],{"class":147},">小米手机\u003C\u002F",[127,61708,457],{"class":140},[127,61710,55848],{"class":147},[127,61712,635],{"class":140},[127,61714,51846],{"class":147},[127,61716,61717,61719,61721,61723,61725,61727,61729,61731,61734,61736,61738,61740],{"class":129,"line":17299},[127,61718,61580],{"class":147},[127,61720,635],{"class":140},[127,61722,61585],{"class":147},[127,61724,457],{"class":140},[127,61726,61590],{"class":143},[127,61728,725],{"class":147},[127,61730,61595],{"class":781},[127,61732,61733],{"class":147},">黑鲨4\u003C\u002F",[127,61735,457],{"class":140},[127,61737,55848],{"class":147},[127,61739,635],{"class":140},[127,61741,51846],{"class":147},[127,61743,61744,61746,61748,61750,61752,61754,61756,61758,61761,61763,61765,61767],{"class":129,"line":17304},[127,61745,61580],{"class":147},[127,61747,635],{"class":140},[127,61749,61585],{"class":147},[127,61751,457],{"class":140},[127,61753,61590],{"class":143},[127,61755,725],{"class":147},[127,61757,61595],{"class":781},[127,61759,61760],{"class":147},">空调\u003C\u002F",[127,61762,457],{"class":140},[127,61764,55848],{"class":147},[127,61766,635],{"class":140},[127,61768,51846],{"class":147},[127,61770,61771,61774,61776],{"class":129,"line":17310},[127,61772,61773],{"class":147},"        \u003C\u002F",[127,61775,1681],{"class":140},[127,61777,51846],{"class":147},[127,61779,61780,61782,61784],{"class":129,"line":17324},[127,61781,52312],{"class":147},[127,61783,52147],{"class":140},[127,61785,51846],{"class":147},[127,61787,61788,61790,61792],{"class":129,"line":17337},[127,61789,51880],{"class":147},[127,61791,52348],{"class":140},[127,61793,51846],{"class":147},[127,61795,61796],{"class":129,"line":17342},[127,61797,61798],{"class":133},"        \u002F\u002F 1. 获取元素\n",[127,61800,61801,61804,61806,61808,61810,61812,61814,61817],{"class":129,"line":17356},[127,61802,61803],{"class":290},"        const",[127,61805,61138],{"class":154},[127,61807,14106],{"class":290},[127,61809,54931],{"class":147},[127,61811,54934],{"class":143},[127,61813,681],{"class":147},[127,61815,61816],{"class":781},"'[type=search]'",[127,61818,687],{"class":147},[127,61820,61821,61823,61826,61828,61830,61832,61834,61837],{"class":129,"line":17361},[127,61822,61803],{"class":290},[127,61824,61825],{"class":154}," ul",[127,61827,14106],{"class":290},[127,61829,54931],{"class":147},[127,61831,54934],{"class":143},[127,61833,681],{"class":147},[127,61835,61836],{"class":781},"'.result-list'",[127,61838,687],{"class":147},[127,61840,61841],{"class":129,"line":17367},[127,61842,61843],{"class":133},"        \u002F\u002F console.log(input)\n",[127,61845,61846],{"class":129,"line":17372},[127,61847,61848],{"class":133},"        \u002F\u002F 2. 监听事件 获得焦点\n",[127,61850,61851,61854,61856,61858,61861,61863,61865],{"class":129,"line":17386},[127,61852,61853],{"class":147},"        input.",[127,61855,58346],{"class":143},[127,61857,681],{"class":147},[127,61859,61860],{"class":781},"'focus'",[127,61862,12977],{"class":147},[127,61864,54984],{"class":290},[127,61866,54987],{"class":147},[127,61868,61869],{"class":129,"line":17391},[127,61870,61871],{"class":133},"            \u002F\u002F ul显示\n",[127,61873,61874,61877,61879],{"class":129,"line":17396},[127,61875,61876],{"class":147},"            ul.style.display ",[127,61878,725],{"class":290},[127,61880,61881],{"class":781}," 'block'\n",[127,61883,61884],{"class":129,"line":17410},[127,61885,61886],{"class":133},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[127,61888,61889,61892,61894,61896,61899],{"class":129,"line":17422},[127,61890,61891],{"class":147},"            input.classList.",[127,61893,5876],{"class":143},[127,61895,681],{"class":147},[127,61897,61898],{"class":781},"'search'",[127,61900,687],{"class":147},[127,61902,61903],{"class":129,"line":17427},[127,61904,61905],{"class":147},"        })\n",[127,61907,61908],{"class":129,"line":17440},[127,61909,61910],{"class":133},"        \u002F\u002F 3. 监听事件 失去焦点\n",[127,61912,61913,61915,61917,61919,61922,61924,61926],{"class":129,"line":17445},[127,61914,61853],{"class":147},[127,61916,58346],{"class":143},[127,61918,681],{"class":147},[127,61920,61921],{"class":781},"'blur'",[127,61923,12977],{"class":147},[127,61925,54984],{"class":290},[127,61927,54987],{"class":147},[127,61929,61930,61932,61934],{"class":129,"line":17450},[127,61931,61876],{"class":147},[127,61933,725],{"class":290},[127,61935,61936],{"class":781}," 'none'\n",[127,61938,61939,61941,61943,61945,61947],{"class":129,"line":17455},[127,61940,61891],{"class":147},[127,61942,57540],{"class":143},[127,61944,681],{"class":147},[127,61946,61898],{"class":781},[127,61948,687],{"class":147},[127,61950,61951],{"class":129,"line":17468},[127,61952,61905],{"class":147},[127,61954,61955,61957,61959],{"class":129,"line":17473},[127,61956,52312],{"class":147},[127,61958,52348],{"class":140},[127,61960,51846],{"class":147},[127,61962,61963,61965,61967],{"class":129,"line":33173},[127,61964,52321],{"class":147},[127,61966,275],{"class":140},[127,61968,51846],{"class":147},[127,61970,61971],{"class":129,"line":33179},[127,61972,2942],{"emptyLinePlaceholder":606},[127,61974,61975,61977,61979],{"class":129,"line":33185},[127,61976,52321],{"class":147},[127,61978,51175],{"class":140},[127,61980,51846],{"class":147},[22539,61982,61984],{"id":61983},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61986,61987],{},"评论字数统计案例",[19,61989,61990],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61992,61993],{},"牢记focus伪类选择器",[51883,61995],{"charSet":61996},"UTF-8",[51883,61998],{"name":61999,"content":62000},"viewport","width=device-width, initial-scale=1.0",[51946,62002,62003],{},"Document",[575,62005,62006],{},"\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",[54356,62008],{"type":5729},[1681,62010,62011,62014],{},[635,62012,62013],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[635,62015,62016],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[117,62018,62020],{"className":51173,"code":62019,"language":51175,"meta":122,"style":122},"\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",[124,62021,62022,62032,62046,62050,62058,62072,62092,62112,62125,62133,62140,62153,62167,62177,62187,62191,62195,62202,62214,62226,62238,62250,62279,62292,62296,62300,62309,62320,62332,62343,62354,62366,62377,62389,62405,62417,62421,62425,62436,62447,62457,62469,62473,62477,62485,62496,62506,62517,62529,62542,62554,62566,62570,62574,62583,62595,62606,62619,62630,62644,62648,62652,62659,62671,62683,62693,62697,62701,62710,62722,62732,62736,62740,62751,62761,62780,62793,62797,62801,62811,62821,62825,62829,62840,62851,62863,62875,62879,62883,62894,62905,62919,62923,62927,62938,62948,62960,62964,62972,62980,62984,62992,63007,63026,63066,63079,63087,63101,63121,63129,63144,63167,63185,63200,63220,63240,63260,63268,63276,63284,63292,63312,63332,63337,63354,63363,63367,63372,63388,63396,63400,63405,63422,63427,63452,63456,63460,63465,63470,63478,63486,63490],{"__ignoreMap":122},[127,62023,62024,62026,62028,62030],{"class":129,"line":130},[127,62025,51837],{"class":147},[127,62027,51840],{"class":140},[127,62029,51843],{"class":143},[127,62031,51846],{"class":147},[127,62033,62034,62036,62038,62040,62042,62044],{"class":129,"line":137},[127,62035,1584],{"class":147},[127,62037,51175],{"class":140},[127,62039,51855],{"class":143},[127,62041,725],{"class":147},[127,62043,51860],{"class":781},[127,62045,51846],{"class":147},[127,62047,62048],{"class":129,"line":151},[127,62049,2942],{"emptyLinePlaceholder":606},[127,62051,62052,62054,62056],{"class":129,"line":167},[127,62053,1584],{"class":147},[127,62055,51873],{"class":140},[127,62057,51846],{"class":147},[127,62059,62060,62062,62064,62066,62068,62070],{"class":129,"line":415},[127,62061,52679],{"class":147},[127,62063,51883],{"class":140},[127,62065,51886],{"class":143},[127,62067,725],{"class":147},[127,62069,51891],{"class":781},[127,62071,51846],{"class":147},[127,62073,62074,62076,62078,62080,62082,62084,62086,62088,62090],{"class":129,"line":421},[127,62075,52679],{"class":147},[127,62077,51883],{"class":140},[127,62079,51902],{"class":143},[127,62081,725],{"class":147},[127,62083,51907],{"class":781},[127,62085,51910],{"class":143},[127,62087,725],{"class":147},[127,62089,51915],{"class":781},[127,62091,51846],{"class":147},[127,62093,62094,62096,62098,62100,62102,62104,62106,62108,62110],{"class":129,"line":1766},[127,62095,52679],{"class":147},[127,62097,51883],{"class":140},[127,62099,15462],{"class":143},[127,62101,725],{"class":147},[127,62103,51930],{"class":781},[127,62105,51910],{"class":143},[127,62107,725],{"class":147},[127,62109,51937],{"class":781},[127,62111,51846],{"class":147},[127,62113,62114,62116,62118,62121,62123],{"class":129,"line":1856},[127,62115,52679],{"class":147},[127,62117,51946],{"class":140},[127,62119,62120],{"class":147},">评论回车发布\u003C\u002F",[127,62122,51946],{"class":140},[127,62124,51846],{"class":147},[127,62126,62127,62129,62131],{"class":129,"line":1862},[127,62128,52679],{"class":147},[127,62130,575],{"class":140},[127,62132,51846],{"class":147},[127,62134,62135,62138],{"class":129,"line":1874},[127,62136,62137],{"class":143},"    .wrapper",[127,62139,148],{"class":147},[127,62141,62142,62145,62147,62149,62151],{"class":129,"line":2155},[127,62143,62144],{"class":154},"      min-width",[127,62146,158],{"class":147},[127,62148,4529],{"class":154},[127,62150,291],{"class":290},[127,62152,164],{"class":147},[127,62154,62155,62158,62160,62163,62165],{"class":129,"line":2160},[127,62156,62157],{"class":154},"      max-width",[127,62159,158],{"class":147},[127,62161,62162],{"class":154},"800",[127,62164,291],{"class":290},[127,62166,164],{"class":147},[127,62168,62169,62171,62173,62175],{"class":129,"line":2166},[127,62170,55543],{"class":154},[127,62172,158],{"class":147},[127,62174,52015],{"class":154},[127,62176,164],{"class":147},[127,62178,62179,62181,62183,62185],{"class":129,"line":2171},[127,62180,55554],{"class":154},[127,62182,158],{"class":147},[127,62184,52117],{"class":154},[127,62186,164],{"class":147},[127,62188,62189],{"class":129,"line":2185},[127,62190,2729],{"class":147},[127,62192,62193],{"class":129,"line":2190},[127,62194,2942],{"emptyLinePlaceholder":606},[127,62196,62197,62200],{"class":129,"line":2196},[127,62198,62199],{"class":143},"    .avatar",[127,62201,148],{"class":147},[127,62203,62204,62206,62208,62210,62212],{"class":129,"line":2217},[127,62205,55305],{"class":154},[127,62207,158],{"class":147},[127,62209,1281],{"class":154},[127,62211,291],{"class":290},[127,62213,164],{"class":147},[127,62215,62216,62218,62220,62222,62224],{"class":129,"line":2222},[127,62217,55319],{"class":154},[127,62219,158],{"class":147},[127,62221,1281],{"class":154},[127,62223,291],{"class":290},[127,62225,164],{"class":147},[127,62227,62228,62230,62232,62234,62236],{"class":129,"line":2236},[127,62229,55668],{"class":154},[127,62231,158],{"class":147},[127,62233,1330],{"class":154},[127,62235,1003],{"class":290},[127,62237,164],{"class":147},[127,62239,62240,62243,62245,62248],{"class":129,"line":2241},[127,62241,62242],{"class":154},"      overflow",[127,62244,158],{"class":147},[127,62246,62247],{"class":154},"hidden",[127,62249,164],{"class":147},[127,62251,62252,62255,62257,62260,62262,62265,62267,62270,62272,62274,62277],{"class":129,"line":2270},[127,62253,62254],{"class":154},"      background",[127,62256,158],{"class":147},[127,62258,62259],{"class":154},"url",[127,62261,681],{"class":147},[127,62263,62264],{"class":5758},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[127,62266,14256],{"class":147},[127,62268,62269],{"class":154},"no-repeat",[127,62271,17685],{"class":154},[127,62273,25519],{"class":147},[127,62275,62276],{"class":154},"cover",[127,62278,164],{"class":147},[127,62280,62281,62284,62286,62288,62290],{"class":129,"line":2275},[127,62282,62283],{"class":154},"      margin-right",[127,62285,158],{"class":147},[127,62287,1374],{"class":154},[127,62289,291],{"class":290},[127,62291,164],{"class":147},[127,62293,62294],{"class":129,"line":2292},[127,62295,2729],{"class":147},[127,62297,62298],{"class":129,"line":2297},[127,62299,2942],{"emptyLinePlaceholder":606},[127,62301,62302,62304,62307],{"class":129,"line":2302},[127,62303,62137],{"class":143},[127,62305,62306],{"class":140}," textarea",[127,62308,148],{"class":147},[127,62310,62311,62314,62316,62318],{"class":129,"line":2307},[127,62312,62313],{"class":154},"      outline",[127,62315,158],{"class":147},[127,62317,469],{"class":154},[127,62319,164],{"class":147},[127,62321,62322,62325,62327,62330],{"class":129,"line":2321},[127,62323,62324],{"class":154},"      border-color",[127,62326,158],{"class":147},[127,62328,62329],{"class":154},"transparent",[127,62331,164],{"class":147},[127,62333,62334,62337,62339,62341],{"class":129,"line":2326},[127,62335,62336],{"class":154},"      resize",[127,62338,158],{"class":147},[127,62340,469],{"class":154},[127,62342,164],{"class":147},[127,62344,62345,62347,62349,62352],{"class":129,"line":3119},[127,62346,62254],{"class":154},[127,62348,158],{"class":147},[127,62350,62351],{"class":154},"#f5f5f5",[127,62353,164],{"class":147},[127,62355,62356,62358,62360,62362,62364],{"class":129,"line":3133},[127,62357,55668],{"class":154},[127,62359,158],{"class":147},[127,62361,968],{"class":154},[127,62363,291],{"class":290},[127,62365,164],{"class":147},[127,62367,62368,62371,62373,62375],{"class":129,"line":3141},[127,62369,62370],{"class":154},"      flex",[127,62372,158],{"class":147},[127,62374,893],{"class":154},[127,62376,164],{"class":147},[127,62378,62379,62381,62383,62385,62387],{"class":129,"line":3146},[127,62380,55230],{"class":154},[127,62382,158],{"class":147},[127,62384,1121],{"class":154},[127,62386,291],{"class":290},[127,62388,164],{"class":147},[127,62390,62391,62394,62396,62398,62401,62403],{"class":129,"line":3152},[127,62392,62393],{"class":154},"      transition",[127,62395,158],{"class":147},[127,62397,28661],{"class":154},[127,62399,62400],{"class":154}," 0.5",[127,62402,1369],{"class":290},[127,62404,164],{"class":147},[127,62406,62407,62409,62411,62413,62415],{"class":129,"line":3158},[127,62408,55319],{"class":154},[127,62410,158],{"class":147},[127,62412,1625],{"class":154},[127,62414,291],{"class":290},[127,62416,164],{"class":147},[127,62418,62419],{"class":129,"line":3163},[127,62420,2729],{"class":147},[127,62422,62423],{"class":129,"line":8490},[127,62424,2942],{"emptyLinePlaceholder":606},[127,62426,62427,62429,62431,62434],{"class":129,"line":8514},[127,62428,62137],{"class":143},[127,62430,62306],{"class":140},[127,62432,62433],{"class":143},":focus",[127,62435,148],{"class":147},[127,62437,62438,62440,62442,62445],{"class":129,"line":8519},[127,62439,62324],{"class":154},[127,62441,158],{"class":147},[127,62443,62444],{"class":154},"#e4e4e4",[127,62446,164],{"class":147},[127,62448,62449,62451,62453,62455],{"class":129,"line":8525},[127,62450,62254],{"class":154},[127,62452,158],{"class":147},[127,62454,61375],{"class":154},[127,62456,164],{"class":147},[127,62458,62459,62461,62463,62465,62467],{"class":129,"line":8552},[127,62460,55319],{"class":154},[127,62462,158],{"class":147},[127,62464,1330],{"class":154},[127,62466,291],{"class":290},[127,62468,164],{"class":147},[127,62470,62471],{"class":129,"line":8557},[127,62472,2729],{"class":147},[127,62474,62475],{"class":129,"line":8563},[127,62476,2942],{"emptyLinePlaceholder":606},[127,62478,62479,62481,62483],{"class":129,"line":8575},[127,62480,62137],{"class":143},[127,62482,58000],{"class":140},[127,62484,148],{"class":147},[127,62486,62487,62489,62491,62494],{"class":129,"line":8587},[127,62488,62254],{"class":154},[127,62490,158],{"class":147},[127,62492,62493],{"class":154},"#00aeec",[127,62495,164],{"class":147},[127,62497,62498,62500,62502,62504],{"class":129,"line":8599},[127,62499,57950],{"class":154},[127,62501,158],{"class":147},[127,62503,61375],{"class":154},[127,62505,164],{"class":147},[127,62507,62508,62511,62513,62515],{"class":129,"line":10258},[127,62509,62510],{"class":154},"      border",[127,62512,158],{"class":147},[127,62514,469],{"class":154},[127,62516,164],{"class":147},[127,62518,62519,62521,62523,62525,62527],{"class":129,"line":10283},[127,62520,55668],{"class":154},[127,62522,158],{"class":147},[127,62524,968],{"class":154},[127,62526,291],{"class":290},[127,62528,164],{"class":147},[127,62530,62531,62534,62536,62538,62540],{"class":129,"line":10306},[127,62532,62533],{"class":154},"      margin-left",[127,62535,158],{"class":147},[127,62537,1121],{"class":154},[127,62539,291],{"class":290},[127,62541,164],{"class":147},[127,62543,62544,62546,62548,62550,62552],{"class":129,"line":10330},[127,62545,55305],{"class":154},[127,62547,158],{"class":147},[127,62549,1031],{"class":154},[127,62551,291],{"class":290},[127,62553,164],{"class":147},[127,62555,62556,62559,62561,62564],{"class":129,"line":10335},[127,62557,62558],{"class":154},"      cursor",[127,62560,158],{"class":147},[127,62562,62563],{"class":154},"pointer",[127,62565,164],{"class":147},[127,62567,62568],{"class":129,"line":10340},[127,62569,2729],{"class":147},[127,62571,62572],{"class":129,"line":10345},[127,62573,2942],{"emptyLinePlaceholder":606},[127,62575,62576,62578,62581],{"class":129,"line":10354},[127,62577,62137],{"class":143},[127,62579,62580],{"class":143}," .total",[127,62582,148],{"class":147},[127,62584,62585,62587,62589,62591,62593],{"class":129,"line":10359},[127,62586,62283],{"class":154},[127,62588,158],{"class":147},[127,62590,1286],{"class":154},[127,62592,291],{"class":290},[127,62594,164],{"class":147},[127,62596,62597,62599,62601,62604],{"class":129,"line":10365},[127,62598,57950],{"class":154},[127,62600,158],{"class":147},[127,62602,62603],{"class":154},"#999",[127,62605,164],{"class":147},[127,62607,62608,62611,62613,62615,62617],{"class":129,"line":10386},[127,62609,62610],{"class":154},"      margin-top",[127,62612,158],{"class":147},[127,62614,994],{"class":154},[127,62616,291],{"class":290},[127,62618,164],{"class":147},[127,62620,62621,62624,62626,62628],{"class":129,"line":10392},[127,62622,62623],{"class":154},"      opacity",[127,62625,158],{"class":147},[127,62627,867],{"class":154},[127,62629,164],{"class":147},[127,62631,62632,62634,62636,62638,62640,62642],{"class":129,"line":10406},[127,62633,62393],{"class":154},[127,62635,158],{"class":147},[127,62637,28661],{"class":154},[127,62639,62400],{"class":154},[127,62641,1369],{"class":290},[127,62643,164],{"class":147},[127,62645,62646],{"class":129,"line":10412},[127,62647,2729],{"class":147},[127,62649,62650],{"class":129,"line":10439},[127,62651,2942],{"emptyLinePlaceholder":606},[127,62653,62654,62657],{"class":129,"line":10448},[127,62655,62656],{"class":143},"    .list",[127,62658,148],{"class":147},[127,62660,62661,62663,62665,62667,62669],{"class":129,"line":10454},[127,62662,62144],{"class":154},[127,62664,158],{"class":147},[127,62666,4529],{"class":154},[127,62668,291],{"class":290},[127,62670,164],{"class":147},[127,62672,62673,62675,62677,62679,62681],{"class":129,"line":10462},[127,62674,62157],{"class":154},[127,62676,158],{"class":147},[127,62678,62162],{"class":154},[127,62680,291],{"class":290},[127,62682,164],{"class":147},[127,62684,62685,62687,62689,62691],{"class":129,"line":10467},[127,62686,55543],{"class":154},[127,62688,158],{"class":147},[127,62690,52015],{"class":154},[127,62692,164],{"class":147},[127,62694,62695],{"class":129,"line":17145},[127,62696,2729],{"class":147},[127,62698,62699],{"class":129,"line":17151},[127,62700,2942],{"emptyLinePlaceholder":606},[127,62702,62703,62705,62708],{"class":129,"line":17174},[127,62704,62656],{"class":143},[127,62706,62707],{"class":143}," .item",[127,62709,148],{"class":147},[127,62711,62712,62714,62716,62718,62720],{"class":129,"line":17180},[127,62713,55305],{"class":154},[127,62715,158],{"class":147},[127,62717,986],{"class":154},[127,62719,1003],{"class":290},[127,62721,164],{"class":147},[127,62723,62724,62726,62728,62730],{"class":129,"line":17203},[127,62725,55543],{"class":154},[127,62727,158],{"class":147},[127,62729,52015],{"class":154},[127,62731,164],{"class":147},[127,62733,62734],{"class":129,"line":17217},[127,62735,2729],{"class":147},[127,62737,62738],{"class":129,"line":17237},[127,62739,2942],{"emptyLinePlaceholder":606},[127,62741,62742,62744,62746,62749],{"class":129,"line":17243},[127,62743,62656],{"class":143},[127,62745,62707],{"class":143},[127,62747,62748],{"class":143}," .info",[127,62750,148],{"class":147},[127,62752,62753,62755,62757,62759],{"class":129,"line":17254},[127,62754,62370],{"class":154},[127,62756,158],{"class":147},[127,62758,893],{"class":154},[127,62760,164],{"class":147},[127,62762,62763,62766,62768,62770,62772,62775,62778],{"class":129,"line":17277},[127,62764,62765],{"class":154},"      border-bottom",[127,62767,158],{"class":147},[127,62769,893],{"class":154},[127,62771,291],{"class":290},[127,62773,62774],{"class":154}," dashed",[127,62776,62777],{"class":154}," #e4e4e4",[127,62779,164],{"class":147},[127,62781,62782,62785,62787,62789,62791],{"class":129,"line":17299},[127,62783,62784],{"class":154},"      padding-bottom",[127,62786,158],{"class":147},[127,62788,1121],{"class":154},[127,62790,291],{"class":290},[127,62792,164],{"class":147},[127,62794,62795],{"class":129,"line":17304},[127,62796,2729],{"class":147},[127,62798,62799],{"class":129,"line":17310},[127,62800,2942],{"emptyLinePlaceholder":606},[127,62802,62803,62805,62807,62809],{"class":129,"line":17324},[127,62804,62656],{"class":143},[127,62806,62707],{"class":143},[127,62808,7367],{"class":140},[127,62810,148],{"class":147},[127,62812,62813,62815,62817,62819],{"class":129,"line":17337},[127,62814,55241],{"class":154},[127,62816,158],{"class":147},[127,62818,867],{"class":154},[127,62820,164],{"class":147},[127,62822,62823],{"class":129,"line":17342},[127,62824,2729],{"class":147},[127,62826,62827],{"class":129,"line":17356},[127,62828,2942],{"emptyLinePlaceholder":606},[127,62830,62831,62833,62835,62838],{"class":129,"line":17361},[127,62832,62656],{"class":143},[127,62834,62707],{"class":143},[127,62836,62837],{"class":143}," .name",[127,62839,148],{"class":147},[127,62841,62842,62844,62846,62849],{"class":129,"line":17367},[127,62843,57950],{"class":154},[127,62845,158],{"class":147},[127,62847,62848],{"class":154},"#FB7299",[127,62850,164],{"class":147},[127,62852,62853,62855,62857,62859,62861],{"class":129,"line":17372},[127,62854,55456],{"class":154},[127,62856,158],{"class":147},[127,62858,1224],{"class":154},[127,62860,291],{"class":290},[127,62862,164],{"class":147},[127,62864,62865,62868,62870,62873],{"class":129,"line":17386},[127,62866,62867],{"class":154},"      font-weight",[127,62869,158],{"class":147},[127,62871,62872],{"class":154},"bold",[127,62874,164],{"class":147},[127,62876,62877],{"class":129,"line":17391},[127,62878,2729],{"class":147},[127,62880,62881],{"class":129,"line":17396},[127,62882,2942],{"emptyLinePlaceholder":606},[127,62884,62885,62887,62889,62892],{"class":129,"line":17410},[127,62886,62656],{"class":143},[127,62888,62707],{"class":143},[127,62890,62891],{"class":143}," .text",[127,62893,148],{"class":147},[127,62895,62896,62898,62900,62903],{"class":129,"line":17422},[127,62897,57950],{"class":154},[127,62899,158],{"class":147},[127,62901,62902],{"class":154},"#333",[127,62904,164],{"class":147},[127,62906,62907,62909,62911,62913,62915,62917],{"class":129,"line":17427},[127,62908,55230],{"class":154},[127,62910,158],{"class":147},[127,62912,1121],{"class":154},[127,62914,291],{"class":290},[127,62916,4635],{"class":154},[127,62918,164],{"class":147},[127,62920,62921],{"class":129,"line":17440},[127,62922,2729],{"class":147},[127,62924,62925],{"class":129,"line":17445},[127,62926,2942],{"emptyLinePlaceholder":606},[127,62928,62929,62931,62933,62936],{"class":129,"line":17450},[127,62930,62656],{"class":143},[127,62932,62707],{"class":143},[127,62934,62935],{"class":143}," .time",[127,62937,148],{"class":147},[127,62939,62940,62942,62944,62946],{"class":129,"line":17455},[127,62941,57950],{"class":154},[127,62943,158],{"class":147},[127,62945,62603],{"class":154},[127,62947,164],{"class":147},[127,62949,62950,62952,62954,62956,62958],{"class":129,"line":17468},[127,62951,55456],{"class":154},[127,62953,158],{"class":147},[127,62955,1173],{"class":154},[127,62957,291],{"class":290},[127,62959,164],{"class":147},[127,62961,62962],{"class":129,"line":17473},[127,62963,2729],{"class":147},[127,62965,62966,62968,62970],{"class":129,"line":33173},[127,62967,52952],{"class":147},[127,62969,575],{"class":140},[127,62971,51846],{"class":147},[127,62973,62974,62976,62978],{"class":129,"line":33179},[127,62975,52321],{"class":147},[127,62977,51873],{"class":140},[127,62979,51846],{"class":147},[127,62981,62982],{"class":129,"line":33185},[127,62983,2942],{"emptyLinePlaceholder":606},[127,62985,62986,62988,62990],{"class":129,"line":33191},[127,62987,1584],{"class":147},[127,62989,275],{"class":140},[127,62991,51846],{"class":147},[127,62993,62994,62996,62998,63000,63002,63005],{"class":129,"line":33197},[127,62995,52679],{"class":147},[127,62997,52147],{"class":140},[127,62999,54021],{"class":143},[127,63001,725],{"class":147},[127,63003,63004],{"class":781},"\"wrapper\"",[127,63006,51846],{"class":147},[127,63008,63009,63011,63013,63015,63017,63020,63022,63024],{"class":129,"line":33208},[127,63010,51880],{"class":147},[127,63012,1116],{"class":140},[127,63014,54021],{"class":143},[127,63016,725],{"class":147},[127,63018,63019],{"class":781},"\"avatar\"",[127,63021,55848],{"class":147},[127,63023,1116],{"class":140},[127,63025,51846],{"class":147},[127,63027,63028,63030,63032,63034,63036,63039,63041,63043,63046,63048,63050,63052,63055,63057,63060,63062,63064],{"class":129,"line":33214},[127,63029,51880],{"class":147},[127,63031,54823],{"class":140},[127,63033,15501],{"class":143},[127,63035,725],{"class":147},[127,63037,63038],{"class":781},"\"tx\"",[127,63040,61553],{"class":143},[127,63042,725],{"class":147},[127,63044,63045],{"class":781},"\"发一条友善的评论\"",[127,63047,54846],{"class":143},[127,63049,725],{"class":147},[127,63051,4243],{"class":781},[127,63053,63054],{"class":143}," maxlength",[127,63056,725],{"class":147},[127,63058,63059],{"class":781},"\"200\"",[127,63061,55848],{"class":147},[127,63063,54823],{"class":140},[127,63065,51846],{"class":147},[127,63067,63068,63070,63072,63075,63077],{"class":129,"line":33234},[127,63069,51880],{"class":147},[127,63071,54422],{"class":140},[127,63073,63074],{"class":147},">发布\u003C\u002F",[127,63076,54422],{"class":140},[127,63078,51846],{"class":147},[127,63080,63081,63083,63085],{"class":129,"line":33240},[127,63082,52952],{"class":147},[127,63084,52147],{"class":140},[127,63086,51846],{"class":147},[127,63088,63089,63091,63093,63095,63097,63099],{"class":129,"line":33251},[127,63090,52679],{"class":147},[127,63092,52147],{"class":140},[127,63094,54021],{"class":143},[127,63096,725],{"class":147},[127,63098,63004],{"class":781},[127,63100,51846],{"class":147},[127,63102,63103,63105,63107,63109,63111,63114,63117,63119],{"class":129,"line":33257},[127,63104,51880],{"class":147},[127,63106,127],{"class":140},[127,63108,54021],{"class":143},[127,63110,725],{"class":147},[127,63112,63113],{"class":781},"\"total\"",[127,63115,63116],{"class":147},">0\u002F200字\u003C\u002F",[127,63118,127],{"class":140},[127,63120,51846],{"class":147},[127,63122,63123,63125,63127],{"class":129,"line":33263},[127,63124,52952],{"class":147},[127,63126,52147],{"class":140},[127,63128,51846],{"class":147},[127,63130,63131,63133,63135,63137,63139,63142],{"class":129,"line":33269},[127,63132,52679],{"class":147},[127,63134,52147],{"class":140},[127,63136,54021],{"class":143},[127,63138,725],{"class":147},[127,63140,63141],{"class":781},"\"list\"",[127,63143,51846],{"class":147},[127,63145,63146,63148,63150,63152,63154,63157,63160,63162,63165],{"class":129,"line":33275},[127,63147,51880],{"class":147},[127,63149,52147],{"class":140},[127,63151,54021],{"class":143},[127,63153,725],{"class":147},[127,63155,63156],{"class":781},"\"item\"",[127,63158,63159],{"class":143}," style",[127,63161,725],{"class":147},[127,63163,63164],{"class":781},"\"display: none;\"",[127,63166,51846],{"class":147},[127,63168,63169,63171,63173,63175,63177,63179,63181,63183],{"class":129,"line":33281},[127,63170,55768],{"class":147},[127,63172,1116],{"class":140},[127,63174,54021],{"class":143},[127,63176,725],{"class":147},[127,63178,63019],{"class":781},[127,63180,55848],{"class":147},[127,63182,1116],{"class":140},[127,63184,51846],{"class":147},[127,63186,63187,63189,63191,63193,63195,63198],{"class":129,"line":33287},[127,63188,55768],{"class":147},[127,63190,52147],{"class":140},[127,63192,54021],{"class":143},[127,63194,725],{"class":147},[127,63196,63197],{"class":781},"\"info\"",[127,63199,51846],{"class":147},[127,63201,63202,63204,63206,63208,63210,63213,63216,63218],{"class":129,"line":33293},[127,63203,55836],{"class":147},[127,63205,19],{"class":140},[127,63207,54021],{"class":143},[127,63209,725],{"class":147},[127,63211,63212],{"class":781},"\"name\"",[127,63214,63215],{"class":147},">清风徐来\u003C\u002F",[127,63217,19],{"class":140},[127,63219,51846],{"class":147},[127,63221,63222,63224,63226,63228,63230,63233,63236,63238],{"class":129,"line":33313},[127,63223,55836],{"class":147},[127,63225,19],{"class":140},[127,63227,54021],{"class":143},[127,63229,725],{"class":147},[127,63231,63232],{"class":781},"\"text\"",[127,63234,63235],{"class":147},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[127,63237,19],{"class":140},[127,63239,51846],{"class":147},[127,63241,63242,63244,63246,63248,63250,63253,63256,63258],{"class":129,"line":33319},[127,63243,55836],{"class":147},[127,63245,19],{"class":140},[127,63247,54021],{"class":143},[127,63249,725],{"class":147},[127,63251,63252],{"class":781},"\"time\"",[127,63254,63255],{"class":147},">2022-10-10 20:29:21\u003C\u002F",[127,63257,19],{"class":140},[127,63259,51846],{"class":147},[127,63261,63262,63264,63266],{"class":129,"line":33335},[127,63263,55941],{"class":147},[127,63265,52147],{"class":140},[127,63267,51846],{"class":147},[127,63269,63270,63272,63274],{"class":129,"line":33341},[127,63271,52312],{"class":147},[127,63273,52147],{"class":140},[127,63275,51846],{"class":147},[127,63277,63278,63280,63282],{"class":129,"line":33355},[127,63279,52952],{"class":147},[127,63281,52147],{"class":140},[127,63283,51846],{"class":147},[127,63285,63286,63288,63290],{"class":129,"line":33361},[127,63287,52679],{"class":147},[127,63289,52348],{"class":140},[127,63291,51846],{"class":147},[127,63293,63294,63296,63299,63301,63303,63305,63307,63310],{"class":129,"line":33376},[127,63295,11763],{"class":290},[127,63297,63298],{"class":154}," tx",[127,63300,14106],{"class":290},[127,63302,54931],{"class":147},[127,63304,54934],{"class":143},[127,63306,681],{"class":147},[127,63308,63309],{"class":781},"'#tx'",[127,63311,687],{"class":147},[127,63313,63314,63316,63319,63321,63323,63325,63327,63330],{"class":129,"line":33382},[127,63315,11763],{"class":290},[127,63317,63318],{"class":154}," total",[127,63320,14106],{"class":290},[127,63322,54931],{"class":147},[127,63324,54934],{"class":143},[127,63326,681],{"class":147},[127,63328,63329],{"class":781},"'.total'",[127,63331,687],{"class":147},[127,63333,63334],{"class":129,"line":33391},[127,63335,63336],{"class":133},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[127,63338,63339,63342,63344,63346,63348,63350,63352],{"class":129,"line":33397},[127,63340,63341],{"class":147},"    tx.",[127,63343,58346],{"class":143},[127,63345,681],{"class":147},[127,63347,61860],{"class":781},[127,63349,12977],{"class":147},[127,63351,54984],{"class":290},[127,63353,54987],{"class":147},[127,63355,63356,63359,63361],{"class":129,"line":33406},[127,63357,63358],{"class":147},"      total.style.opacity ",[127,63360,725],{"class":290},[127,63362,56233],{"class":154},[127,63364,63365],{"class":129,"line":33412},[127,63366,34001],{"class":147},[127,63368,63369],{"class":129,"line":33418},[127,63370,63371],{"class":133},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[127,63373,63374,63376,63378,63380,63382,63384,63386],{"class":129,"line":33427},[127,63375,63341],{"class":147},[127,63377,58346],{"class":143},[127,63379,681],{"class":147},[127,63381,61921],{"class":781},[127,63383,12977],{"class":147},[127,63385,54984],{"class":290},[127,63387,54987],{"class":147},[127,63389,63390,63392,63394],{"class":129,"line":33433},[127,63391,63358],{"class":147},[127,63393,725],{"class":290},[127,63395,47873],{"class":154},[127,63397,63398],{"class":129,"line":33444},[127,63399,34001],{"class":147},[127,63401,63402],{"class":129,"line":33450},[127,63403,63404],{"class":133},"    \u002F\u002F 3. 检测用户输入\n",[127,63406,63407,63409,63411,63413,63416,63418,63420],{"class":129,"line":33469},[127,63408,63341],{"class":147},[127,63410,58346],{"class":143},[127,63412,681],{"class":147},[127,63414,63415],{"class":781},"'input'",[127,63417,12977],{"class":147},[127,63419,54984],{"class":290},[127,63421,54987],{"class":147},[127,63423,63424],{"class":129,"line":33475},[127,63425,63426],{"class":133},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[127,63428,63429,63432,63434,63437,63440,63442,63445,63447,63449],{"class":129,"line":33486},[127,63430,63431],{"class":147},"      total.innerHTML ",[127,63433,725],{"class":290},[127,63435,63436],{"class":781}," `${",[127,63438,63439],{"class":147},"tx",[127,63441,1233],{"class":781},[127,63443,63444],{"class":147},"value",[127,63446,1233],{"class":781},[127,63448,52503],{"class":154},[127,63450,63451],{"class":781},"}\u002F200字`\n",[127,63453,63454],{"class":129,"line":33492},[127,63455,34001],{"class":147},[127,63457,63458],{"class":129,"line":33512},[127,63459,2942],{"emptyLinePlaceholder":606},[127,63461,63462],{"class":129,"line":33528},[127,63463,63464],{"class":133},"    \u002F\u002F const str = 'andy'\n",[127,63466,63467],{"class":129,"line":33534},[127,63468,63469],{"class":133},"    \u002F\u002F console.log(str.length)\n",[127,63471,63472,63474,63476],{"class":129,"line":33548},[127,63473,52952],{"class":147},[127,63475,52348],{"class":140},[127,63477,51846],{"class":147},[127,63479,63480,63482,63484],{"class":129,"line":33554},[127,63481,52321],{"class":147},[127,63483,275],{"class":140},[127,63485,51846],{"class":147},[127,63487,63488],{"class":129,"line":33560},[127,63489,2942],{"emptyLinePlaceholder":606},[127,63491,63492,63494,63496],{"class":129,"line":33571},[127,63493,52321],{"class":147},[127,63495,51175],{"class":140},[127,63497,51846],{"class":147},[22539,63499,63501],{"id":63500},"_3254-change事件","3.2.5.4 change事件",[19,63503,63504],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63506,63507],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63509,63510],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[117,63512,63514],{"className":51173,"code":63513,"language":51175,"meta":122,"style":122},"\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",[124,63515,63516,63526,63540,63544,63552,63566,63586,63598,63606,63610,63618,63632,63640,63658,63676,63688,63692,63700,63708,63712],{"__ignoreMap":122},[127,63517,63518,63520,63522,63524],{"class":129,"line":130},[127,63519,51837],{"class":147},[127,63521,51840],{"class":140},[127,63523,51843],{"class":143},[127,63525,51846],{"class":147},[127,63527,63528,63530,63532,63534,63536,63538],{"class":129,"line":137},[127,63529,1584],{"class":147},[127,63531,51175],{"class":140},[127,63533,51855],{"class":143},[127,63535,725],{"class":147},[127,63537,51860],{"class":781},[127,63539,51846],{"class":147},[127,63541,63542],{"class":129,"line":151},[127,63543,2942],{"emptyLinePlaceholder":606},[127,63545,63546,63548,63550],{"class":129,"line":167},[127,63547,1584],{"class":147},[127,63549,51873],{"class":140},[127,63551,51846],{"class":147},[127,63553,63554,63556,63558,63560,63562,63564],{"class":129,"line":415},[127,63555,52679],{"class":147},[127,63557,51883],{"class":140},[127,63559,51886],{"class":143},[127,63561,725],{"class":147},[127,63563,51891],{"class":781},[127,63565,51846],{"class":147},[127,63567,63568,63570,63572,63574,63576,63578,63580,63582,63584],{"class":129,"line":421},[127,63569,52679],{"class":147},[127,63571,51883],{"class":140},[127,63573,15462],{"class":143},[127,63575,725],{"class":147},[127,63577,51930],{"class":781},[127,63579,51910],{"class":143},[127,63581,725],{"class":147},[127,63583,51937],{"class":781},[127,63585,51846],{"class":147},[127,63587,63588,63590,63592,63594,63596],{"class":129,"line":1766},[127,63589,52679],{"class":147},[127,63591,51946],{"class":140},[127,63593,51949],{"class":147},[127,63595,51946],{"class":140},[127,63597,51846],{"class":147},[127,63599,63600,63602,63604],{"class":129,"line":1856},[127,63601,52321],{"class":147},[127,63603,51873],{"class":140},[127,63605,51846],{"class":147},[127,63607,63608],{"class":129,"line":1862},[127,63609,2942],{"emptyLinePlaceholder":606},[127,63611,63612,63614,63616],{"class":129,"line":1874},[127,63613,1584],{"class":147},[127,63615,275],{"class":140},[127,63617,51846],{"class":147},[127,63619,63620,63622,63624,63626,63628,63630],{"class":129,"line":2155},[127,63621,52679],{"class":147},[127,63623,54356],{"class":140},[127,63625,54359],{"class":143},[127,63627,725],{"class":147},[127,63629,63232],{"class":781},[127,63631,51846],{"class":147},[127,63633,63634,63636,63638],{"class":129,"line":2160},[127,63635,52679],{"class":147},[127,63637,52348],{"class":140},[127,63639,51846],{"class":147},[127,63641,63642,63644,63646,63648,63650,63652,63654,63656],{"class":129,"line":2166},[127,63643,11763],{"class":290},[127,63645,61138],{"class":154},[127,63647,14106],{"class":290},[127,63649,54931],{"class":147},[127,63651,54934],{"class":143},[127,63653,681],{"class":147},[127,63655,63415],{"class":781},[127,63657,687],{"class":147},[127,63659,63660,63663,63665,63667,63670,63672,63674],{"class":129,"line":2171},[127,63661,63662],{"class":147},"    input.",[127,63664,58346],{"class":143},[127,63666,681],{"class":147},[127,63668,63669],{"class":781},"'change'",[127,63671,12977],{"class":147},[127,63673,54984],{"class":290},[127,63675,54987],{"class":147},[127,63677,63678,63680,63682,63684,63686],{"class":129,"line":2185},[127,63679,58777],{"class":147},[127,63681,58780],{"class":143},[127,63683,681],{"class":147},[127,63685,1268],{"class":154},[127,63687,687],{"class":147},[127,63689,63690],{"class":129,"line":2190},[127,63691,34001],{"class":147},[127,63693,63694,63696,63698],{"class":129,"line":2196},[127,63695,52952],{"class":147},[127,63697,52348],{"class":140},[127,63699,51846],{"class":147},[127,63701,63702,63704,63706],{"class":129,"line":2217},[127,63703,52321],{"class":147},[127,63705,275],{"class":140},[127,63707,51846],{"class":147},[127,63709,63710],{"class":129,"line":2222},[127,63711,2942],{"emptyLinePlaceholder":606},[127,63713,63714,63716,63718],{"class":129,"line":2236},[127,63715,52321],{"class":147},[127,63717,51175],{"class":140},[127,63719,51846],{"class":147},[19,63721,63722],{},"总结：内容发生改变才回去触发",[62,63724,63726],{"id":63725},"_326-事件对象","3.2.6 事件对象",[22539,63728,63730],{"id":63729},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63732,63733],{},[23,63734],{"alt":122,"src":63735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63737,63738],{},[23,63739],{"alt":122,"src":63740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63742,63743],{},"点击一次，就输出了事件对象，它是个对象",[19,63745,63746],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63748,63749],{},[23,63750],{"alt":122,"src":63751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22539,63753,63755],{"id":63754},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63757,63758],{},[23,63759],{"alt":122,"src":63760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63762,63763],{},"实现按特殊字符才是实现打印输出效果：",[117,63765,63767],{"className":53602,"code":63766,"language":53604,"meta":122,"style":122},"\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",[124,63768,63769,63777,63782,63796,63804,63809,63814,63819,63824,63829,63834,63839,63844,63849,63853,63857,63865],{"__ignoreMap":122},[127,63770,63771,63773,63775],{"class":129,"line":130},[127,63772,1584],{"class":147},[127,63774,275],{"class":140},[127,63776,51846],{"class":147},[127,63778,63779],{"class":129,"line":137},[127,63780,63781],{"class":133},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[127,63783,63784,63786,63788,63790,63792,63794],{"class":129,"line":151},[127,63785,52679],{"class":147},[127,63787,54356],{"class":140},[127,63789,54359],{"class":143},[127,63791,725],{"class":147},[127,63793,63232],{"class":781},[127,63795,51846],{"class":147},[127,63797,63798,63800,63802],{"class":129,"line":167},[127,63799,52679],{"class":147},[127,63801,52348],{"class":140},[127,63803,51846],{"class":147},[127,63805,63806],{"class":129,"line":415},[127,63807,63808],{"class":147},"    \u002F\u002F const btn = document.querySelector('button')\n",[127,63810,63811],{"class":129,"line":421},[127,63812,63813],{"class":147},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[127,63815,63816],{"class":129,"line":1766},[127,63817,63818],{"class":147},"    \u002F\u002F   console.log(e);\n",[127,63820,63821],{"class":129,"line":1856},[127,63822,63823],{"class":147},"    \u002F\u002F })\n",[127,63825,63826],{"class":129,"line":1862},[127,63827,63828],{"class":147},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[127,63830,63831],{"class":129,"line":1874},[127,63832,63833],{"class":147},"    const input = document.querySelector('input')\n",[127,63835,63836],{"class":129,"line":2155},[127,63837,63838],{"class":147},"    input.addEventListener('keyup', function (e) {\n",[127,63840,63841],{"class":129,"line":2160},[127,63842,63843],{"class":147},"      if (e.key === 'Enter') {\n",[127,63845,63846],{"class":129,"line":2166},[127,63847,63848],{"class":147},"        console.log('我按下了回车键')\n",[127,63850,63851],{"class":129,"line":2171},[127,63852,52933],{"class":147},[127,63854,63855],{"class":129,"line":2185},[127,63856,34001],{"class":147},[127,63858,63859,63861,63863],{"class":129,"line":2190},[127,63860,52952],{"class":147},[127,63862,52348],{"class":140},[127,63864,51846],{"class":147},[127,63866,63867,63869,63871],{"class":129,"line":2196},[127,63868,52321],{"class":147},[127,63870,275],{"class":140},[127,63872,51846],{"class":147},[22539,63874,63876],{"id":63875},"_3263-trim方法","3.2.6.3 trim方法",[19,63878,63879],{},[23,63880],{"alt":122,"src":63881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63883,63884],{},[23,63885],{"alt":122,"src":63886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63888,63889],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63891,63892],{},"str.trim()",[62,63894,63896],{"id":63895},"_327-环境对象","3.2.7 环境对象",[19,63898,63899],{},[23,63900],{"alt":122,"src":63901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63903,63904],{},[23,63905],{"alt":122,"src":63906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63908,63909],{},[23,63910],{"alt":122,"src":63911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63913,63914],{},"实际函数调用是window.fn()",[19,63916,63917],{},"普通函数里面this指向的是window",[1681,63919,63920,63923,63926],{},[635,63921,63922],{},"在普通函数下，this指向的是window",[635,63924,63925],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[635,63927,63928],{},"箭头函数没有this",[19,63930,63931],{},"粗略记法就是：谁调用，this就指向谁",[19,63933,63934],{},[23,63935],{"alt":122,"src":63936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63938,63939],{},[23,63940],{"alt":122,"src":63941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63943,63944],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63946,63947],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[117,63949,63951],{"className":53602,"code":63950,"language":53604,"meta":122,"style":122},"\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",[124,63952,63953,63961,63973,63981,63986,63991,63996,64001,64005,64013],{"__ignoreMap":122},[127,63954,63955,63957,63959],{"class":129,"line":130},[127,63956,1584],{"class":147},[127,63958,275],{"class":140},[127,63960,51846],{"class":147},[127,63962,63963,63965,63967,63969,63971],{"class":129,"line":137},[127,63964,52679],{"class":147},[127,63966,54422],{"class":140},[127,63968,54428],{"class":147},[127,63970,54422],{"class":140},[127,63972,51846],{"class":147},[127,63974,63975,63977,63979],{"class":129,"line":151},[127,63976,52679],{"class":147},[127,63978,52348],{"class":140},[127,63980,51846],{"class":147},[127,63982,63983],{"class":129,"line":167},[127,63984,63985],{"class":147},"    const button = document.querySelector('button')\n",[127,63987,63988],{"class":129,"line":415},[127,63989,63990],{"class":147},"    button.addEventListener('click', function () {\n",[127,63992,63993],{"class":129,"line":421},[127,63994,63995],{"class":147},"      \u002F\u002F console.log(this);\n",[127,63997,63998],{"class":129,"line":1766},[127,63999,64000],{"class":147},"      this.style.color = 'pink'\n",[127,64002,64003],{"class":129,"line":1856},[127,64004,34001],{"class":147},[127,64006,64007,64009,64011],{"class":129,"line":1862},[127,64008,52952],{"class":147},[127,64010,52348],{"class":140},[127,64012,51846],{"class":147},[127,64014,64015,64017,64019],{"class":129,"line":1874},[127,64016,52321],{"class":147},[127,64018,275],{"class":140},[127,64020,51846],{"class":147},[62,64022,64024],{"id":64023},"_328-回调函数","3.2.8 回调函数",[19,64026,64027],{},[23,64028],{"alt":122,"src":64029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64031,64032],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64034,11874],{},[1681,64036,64037,64040,64043],{},[635,64038,64039],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[635,64041,64042],{},"回调函数本质还是函数，只不过把它当成参数使用",[635,64044,64045],{},"使用匿名函数做为回调函数比较常见",[62,64047,64049],{"id":64048},"_329-tab栏切换","3.2.9 tab栏切换",[19,64051,64052],{},[23,64053],{"alt":122,"src":64054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[117,64056,64058],{"className":51173,"code":64057,"language":51175,"meta":122,"style":122},"\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",[124,64059,64060,64070,64084,64088,64096,64110,64130,64150,64163,64171,64177,64187,64197,64201,64205,64212,64225,64238,64250,64266,64270,64274,64281,64293,64305,64317,64327,64337,64341,64345,64354,64366,64377,64389,64393,64397,64405,64415,64425,64435,64439,64443,64453,64467,64479,64483,64487,64499,64510,64527,64537,64541,64545,64560,64571,64581,64585,64589,64596,64611,64615,64619,64627,64637,64641,64645,64654,64664,64668,64676,64684,64688,64696,64711,64726,64739,64747,64781,64808,64835,64862,64889,64897,64905,64920,64957,64992,65027,65062,65097,65105,65113,65121,65126,65131,65151,65156,65185,65190,65195,65213,65218,65223,65228,65250,65255,65271,65275,65280,65285,65306,65311,65340,65344,65349,65353,65361,65369,65373],{"__ignoreMap":122},[127,64061,64062,64064,64066,64068],{"class":129,"line":130},[127,64063,51837],{"class":147},[127,64065,51840],{"class":140},[127,64067,51843],{"class":143},[127,64069,51846],{"class":147},[127,64071,64072,64074,64076,64078,64080,64082],{"class":129,"line":137},[127,64073,1584],{"class":147},[127,64075,51175],{"class":140},[127,64077,51855],{"class":143},[127,64079,725],{"class":147},[127,64081,51860],{"class":781},[127,64083,51846],{"class":147},[127,64085,64086],{"class":129,"line":151},[127,64087,2942],{"emptyLinePlaceholder":606},[127,64089,64090,64092,64094],{"class":129,"line":167},[127,64091,1584],{"class":147},[127,64093,51873],{"class":140},[127,64095,51846],{"class":147},[127,64097,64098,64100,64102,64104,64106,64108],{"class":129,"line":415},[127,64099,52679],{"class":147},[127,64101,51883],{"class":140},[127,64103,51886],{"class":143},[127,64105,725],{"class":147},[127,64107,51891],{"class":781},[127,64109,59660],{"class":147},[127,64111,64112,64114,64116,64118,64120,64122,64124,64126,64128],{"class":129,"line":421},[127,64113,52679],{"class":147},[127,64115,51883],{"class":140},[127,64117,51902],{"class":143},[127,64119,725],{"class":147},[127,64121,51907],{"class":781},[127,64123,51910],{"class":143},[127,64125,725],{"class":147},[127,64127,51915],{"class":781},[127,64129,59660],{"class":147},[127,64131,64132,64134,64136,64138,64140,64142,64144,64146,64148],{"class":129,"line":1766},[127,64133,52679],{"class":147},[127,64135,51883],{"class":140},[127,64137,15462],{"class":143},[127,64139,725],{"class":147},[127,64141,51930],{"class":781},[127,64143,51910],{"class":143},[127,64145,725],{"class":147},[127,64147,51937],{"class":781},[127,64149,59660],{"class":147},[127,64151,64152,64154,64156,64159,64161],{"class":129,"line":1856},[127,64153,52679],{"class":147},[127,64155,51946],{"class":140},[127,64157,64158],{"class":147},">tab栏切换\u003C\u002F",[127,64160,51946],{"class":140},[127,64162,51846],{"class":147},[127,64164,64165,64167,64169],{"class":129,"line":1862},[127,64166,52679],{"class":147},[127,64168,575],{"class":140},[127,64170,51846],{"class":147},[127,64172,64173,64175],{"class":129,"line":1874},[127,64174,6945],{"class":140},[127,64176,148],{"class":147},[127,64178,64179,64181,64183,64185],{"class":129,"line":2155},[127,64180,55241],{"class":154},[127,64182,158],{"class":147},[127,64184,867],{"class":154},[127,64186,164],{"class":147},[127,64188,64189,64191,64193,64195],{"class":129,"line":2160},[127,64190,55230],{"class":154},[127,64192,158],{"class":147},[127,64194,867],{"class":154},[127,64196,164],{"class":147},[127,64198,64199],{"class":129,"line":2166},[127,64200,2729],{"class":147},[127,64202,64203],{"class":129,"line":2171},[127,64204,2942],{"emptyLinePlaceholder":606},[127,64206,64207,64210],{"class":129,"line":2185},[127,64208,64209],{"class":143},"    .tab",[127,64211,148],{"class":147},[127,64213,64214,64216,64218,64221,64223],{"class":129,"line":2190},[127,64215,55305],{"class":154},[127,64217,158],{"class":147},[127,64219,64220],{"class":154},"590",[127,64222,291],{"class":290},[127,64224,164],{"class":147},[127,64226,64227,64229,64231,64234,64236],{"class":129,"line":2196},[127,64228,55319],{"class":154},[127,64230,158],{"class":147},[127,64232,64233],{"class":154},"340",[127,64235,291],{"class":290},[127,64237,164],{"class":147},[127,64239,64240,64242,64244,64246,64248],{"class":129,"line":2217},[127,64241,55241],{"class":154},[127,64243,158],{"class":147},[127,64245,1374],{"class":154},[127,64247,291],{"class":290},[127,64249,164],{"class":147},[127,64251,64252,64254,64256,64258,64260,64262,64264],{"class":129,"line":2222},[127,64253,62510],{"class":154},[127,64255,158],{"class":147},[127,64257,893],{"class":154},[127,64259,291],{"class":290},[127,64261,52058],{"class":154},[127,64263,62777],{"class":154},[127,64265,164],{"class":147},[127,64267,64268],{"class":129,"line":2236},[127,64269,2729],{"class":147},[127,64271,64272],{"class":129,"line":2241},[127,64273,2942],{"emptyLinePlaceholder":606},[127,64275,64276,64279],{"class":129,"line":2270},[127,64277,64278],{"class":143},"    .tab-nav",[127,64280,148],{"class":147},[127,64282,64283,64285,64287,64289,64291],{"class":129,"line":2275},[127,64284,55305],{"class":154},[127,64286,158],{"class":147},[127,64288,986],{"class":154},[127,64290,1003],{"class":290},[127,64292,164],{"class":147},[127,64294,64295,64297,64299,64301,64303],{"class":129,"line":2292},[127,64296,55319],{"class":154},[127,64298,158],{"class":147},[127,64300,1581],{"class":154},[127,64302,291],{"class":290},[127,64304,164],{"class":147},[127,64306,64307,64309,64311,64313,64315],{"class":129,"line":2297},[127,64308,57893],{"class":154},[127,64310,158],{"class":147},[127,64312,1581],{"class":154},[127,64314,291],{"class":290},[127,64316,164],{"class":147},[127,64318,64319,64321,64323,64325],{"class":129,"line":2302},[127,64320,55543],{"class":154},[127,64322,158],{"class":147},[127,64324,52015],{"class":154},[127,64326,164],{"class":147},[127,64328,64329,64331,64333,64335],{"class":129,"line":2307},[127,64330,55554],{"class":154},[127,64332,158],{"class":147},[127,64334,52204],{"class":154},[127,64336,164],{"class":147},[127,64338,64339],{"class":129,"line":2321},[127,64340,2729],{"class":147},[127,64342,64343],{"class":129,"line":2326},[127,64344,2942],{"emptyLinePlaceholder":606},[127,64346,64347,64349,64352],{"class":129,"line":3119},[127,64348,64278],{"class":143},[127,64350,64351],{"class":140}," h3",[127,64353,148],{"class":147},[127,64355,64356,64358,64360,64362,64364],{"class":129,"line":3133},[127,64357,55456],{"class":154},[127,64359,158],{"class":147},[127,64361,1474],{"class":154},[127,64363,291],{"class":290},[127,64365,164],{"class":147},[127,64367,64368,64370,64372,64375],{"class":129,"line":3141},[127,64369,62867],{"class":154},[127,64371,158],{"class":147},[127,64373,64374],{"class":154},"normal",[127,64376,164],{"class":147},[127,64378,64379,64381,64383,64385,64387],{"class":129,"line":3146},[127,64380,62533],{"class":154},[127,64382,158],{"class":147},[127,64384,1374],{"class":154},[127,64386,291],{"class":290},[127,64388,164],{"class":147},[127,64390,64391],{"class":129,"line":3152},[127,64392,2729],{"class":147},[127,64394,64395],{"class":129,"line":3158},[127,64396,2942],{"emptyLinePlaceholder":606},[127,64398,64399,64401,64403],{"class":129,"line":3163},[127,64400,64278],{"class":143},[127,64402,61825],{"class":140},[127,64404,148],{"class":147},[127,64406,64407,64409,64411,64413],{"class":129,"line":8490},[127,64408,55267],{"class":154},[127,64410,158],{"class":147},[127,64412,469],{"class":154},[127,64414,164],{"class":147},[127,64416,64417,64419,64421,64423],{"class":129,"line":8514},[127,64418,55543],{"class":154},[127,64420,158],{"class":147},[127,64422,52015],{"class":154},[127,64424,164],{"class":147},[127,64426,64427,64429,64431,64433],{"class":129,"line":8519},[127,64428,55554],{"class":154},[127,64430,158],{"class":147},[127,64432,52117],{"class":154},[127,64434,164],{"class":147},[127,64436,64437],{"class":129,"line":8525},[127,64438,2729],{"class":147},[127,64440,64441],{"class":129,"line":8552},[127,64442,2942],{"emptyLinePlaceholder":606},[127,64444,64445,64447,64449,64451],{"class":129,"line":8557},[127,64446,64278],{"class":143},[127,64448,61825],{"class":140},[127,64450,55609],{"class":140},[127,64452,148],{"class":147},[127,64454,64455,64457,64459,64461,64463,64465],{"class":129,"line":8563},[127,64456,55241],{"class":154},[127,64458,158],{"class":147},[127,64460,867],{"class":154},[127,64462,9492],{"class":154},[127,64464,291],{"class":290},[127,64466,164],{"class":147},[127,64468,64469,64471,64473,64475,64477],{"class":129,"line":8575},[127,64470,55456],{"class":154},[127,64472,158],{"class":147},[127,64474,1224],{"class":154},[127,64476,291],{"class":290},[127,64478,164],{"class":147},[127,64480,64481],{"class":129,"line":8587},[127,64482,2729],{"class":147},[127,64484,64485],{"class":129,"line":8599},[127,64486,2942],{"emptyLinePlaceholder":606},[127,64488,64489,64491,64493,64495,64497],{"class":129,"line":10258},[127,64490,64278],{"class":143},[127,64492,61825],{"class":140},[127,64494,55609],{"class":140},[127,64496,1943],{"class":140},[127,64498,148],{"class":147},[127,64500,64501,64504,64506,64508],{"class":129,"line":10283},[127,64502,64503],{"class":154},"      text-decoration",[127,64505,158],{"class":147},[127,64507,469],{"class":154},[127,64509,164],{"class":147},[127,64511,64512,64514,64516,64518,64520,64522,64525],{"class":129,"line":10306},[127,64513,62765],{"class":154},[127,64515,158],{"class":147},[127,64517,530],{"class":154},[127,64519,291],{"class":290},[127,64521,52058],{"class":154},[127,64523,64524],{"class":154}," transparent",[127,64526,164],{"class":147},[127,64528,64529,64531,64533,64535],{"class":129,"line":10330},[127,64530,57950],{"class":154},[127,64532,158],{"class":147},[127,64534,62902],{"class":154},[127,64536,164],{"class":147},[127,64538,64539],{"class":129,"line":10335},[127,64540,2729],{"class":147},[127,64542,64543],{"class":129,"line":10340},[127,64544,2942],{"emptyLinePlaceholder":606},[127,64546,64547,64549,64551,64553,64555,64558],{"class":129,"line":10345},[127,64548,64278],{"class":143},[127,64550,61825],{"class":140},[127,64552,55609],{"class":140},[127,64554,1943],{"class":140},[127,64556,64557],{"class":143},".active",[127,64559,148],{"class":147},[127,64561,64562,64564,64566,64569],{"class":129,"line":10354},[127,64563,62324],{"class":154},[127,64565,158],{"class":147},[127,64567,64568],{"class":154},"#e1251b",[127,64570,164],{"class":147},[127,64572,64573,64575,64577,64579],{"class":129,"line":10359},[127,64574,57950],{"class":154},[127,64576,158],{"class":147},[127,64578,64568],{"class":154},[127,64580,164],{"class":147},[127,64582,64583],{"class":129,"line":10365},[127,64584,2729],{"class":147},[127,64586,64587],{"class":129,"line":10386},[127,64588,2942],{"emptyLinePlaceholder":606},[127,64590,64591,64594],{"class":129,"line":10392},[127,64592,64593],{"class":143},"    .tab-content",[127,64595,148],{"class":147},[127,64597,64598,64600,64602,64604,64607,64609],{"class":129,"line":10406},[127,64599,55230],{"class":154},[127,64601,158],{"class":147},[127,64603,867],{"class":154},[127,64605,64606],{"class":154}," 16",[127,64608,291],{"class":290},[127,64610,164],{"class":147},[127,64612,64613],{"class":129,"line":10412},[127,64614,2729],{"class":147},[127,64616,64617],{"class":129,"line":10439},[127,64618,2942],{"emptyLinePlaceholder":606},[127,64620,64621,64623,64625],{"class":129,"line":10448},[127,64622,64593],{"class":143},[127,64624,62707],{"class":143},[127,64626,148],{"class":147},[127,64628,64629,64631,64633,64635],{"class":129,"line":10454},[127,64630,55543],{"class":154},[127,64632,158],{"class":147},[127,64634,469],{"class":154},[127,64636,164],{"class":147},[127,64638,64639],{"class":129,"line":10462},[127,64640,2729],{"class":147},[127,64642,64643],{"class":129,"line":10467},[127,64644,2942],{"emptyLinePlaceholder":606},[127,64646,64647,64649,64652],{"class":129,"line":17145},[127,64648,64593],{"class":143},[127,64650,64651],{"class":143}," .item.active",[127,64653,148],{"class":147},[127,64655,64656,64658,64660,64662],{"class":129,"line":17151},[127,64657,55543],{"class":154},[127,64659,158],{"class":147},[127,64661,61402],{"class":154},[127,64663,164],{"class":147},[127,64665,64666],{"class":129,"line":17174},[127,64667,2729],{"class":147},[127,64669,64670,64672,64674],{"class":129,"line":17180},[127,64671,52952],{"class":147},[127,64673,575],{"class":140},[127,64675,51846],{"class":147},[127,64677,64678,64680,64682],{"class":129,"line":17203},[127,64679,52321],{"class":147},[127,64681,51873],{"class":140},[127,64683,51846],{"class":147},[127,64685,64686],{"class":129,"line":17217},[127,64687,2942],{"emptyLinePlaceholder":606},[127,64689,64690,64692,64694],{"class":129,"line":17237},[127,64691,1584],{"class":147},[127,64693,275],{"class":140},[127,64695,51846],{"class":147},[127,64697,64698,64700,64702,64704,64706,64709],{"class":129,"line":17243},[127,64699,52679],{"class":147},[127,64701,52147],{"class":140},[127,64703,54021],{"class":143},[127,64705,725],{"class":147},[127,64707,64708],{"class":781},"\"tab\"",[127,64710,51846],{"class":147},[127,64712,64713,64715,64717,64719,64721,64724],{"class":129,"line":17254},[127,64714,51880],{"class":147},[127,64716,52147],{"class":140},[127,64718,54021],{"class":143},[127,64720,725],{"class":147},[127,64722,64723],{"class":781},"\"tab-nav\"",[127,64725,51846],{"class":147},[127,64727,64728,64730,64732,64735,64737],{"class":129,"line":17277},[127,64729,55768],{"class":147},[127,64731,62],{"class":140},[127,64733,64734],{"class":147},">每日特价\u003C\u002F",[127,64736,62],{"class":140},[127,64738,51846],{"class":147},[127,64740,64741,64743,64745],{"class":129,"line":17299},[127,64742,55768],{"class":147},[127,64744,1681],{"class":140},[127,64746,51846],{"class":147},[127,64748,64749,64751,64753,64755,64757,64759,64761,64763,64765,64767,64770,64773,64775,64777,64779],{"class":129,"line":17304},[127,64750,55836],{"class":147},[127,64752,635],{"class":140},[127,64754,61585],{"class":147},[127,64756,457],{"class":140},[127,64758,54021],{"class":143},[127,64760,725],{"class":147},[127,64762,60239],{"class":781},[127,64764,61590],{"class":143},[127,64766,725],{"class":147},[127,64768,64769],{"class":781},"\"javascript:;\"",[127,64771,64772],{"class":147},">精选\u003C\u002F",[127,64774,457],{"class":140},[127,64776,55848],{"class":147},[127,64778,635],{"class":140},[127,64780,51846],{"class":147},[127,64782,64783,64785,64787,64789,64791,64793,64795,64797,64800,64802,64804,64806],{"class":129,"line":17310},[127,64784,55836],{"class":147},[127,64786,635],{"class":140},[127,64788,61585],{"class":147},[127,64790,457],{"class":140},[127,64792,61590],{"class":143},[127,64794,725],{"class":147},[127,64796,64769],{"class":781},[127,64798,64799],{"class":147},">美食\u003C\u002F",[127,64801,457],{"class":140},[127,64803,55848],{"class":147},[127,64805,635],{"class":140},[127,64807,51846],{"class":147},[127,64809,64810,64812,64814,64816,64818,64820,64822,64824,64827,64829,64831,64833],{"class":129,"line":17324},[127,64811,55836],{"class":147},[127,64813,635],{"class":140},[127,64815,61585],{"class":147},[127,64817,457],{"class":140},[127,64819,61590],{"class":143},[127,64821,725],{"class":147},[127,64823,64769],{"class":781},[127,64825,64826],{"class":147},">百货\u003C\u002F",[127,64828,457],{"class":140},[127,64830,55848],{"class":147},[127,64832,635],{"class":140},[127,64834,51846],{"class":147},[127,64836,64837,64839,64841,64843,64845,64847,64849,64851,64854,64856,64858,64860],{"class":129,"line":17337},[127,64838,55836],{"class":147},[127,64840,635],{"class":140},[127,64842,61585],{"class":147},[127,64844,457],{"class":140},[127,64846,61590],{"class":143},[127,64848,725],{"class":147},[127,64850,64769],{"class":781},[127,64852,64853],{"class":147},">个护\u003C\u002F",[127,64855,457],{"class":140},[127,64857,55848],{"class":147},[127,64859,635],{"class":140},[127,64861,51846],{"class":147},[127,64863,64864,64866,64868,64870,64872,64874,64876,64878,64881,64883,64885,64887],{"class":129,"line":17342},[127,64865,55836],{"class":147},[127,64867,635],{"class":140},[127,64869,61585],{"class":147},[127,64871,457],{"class":140},[127,64873,61590],{"class":143},[127,64875,725],{"class":147},[127,64877,64769],{"class":781},[127,64879,64880],{"class":147},">预告\u003C\u002F",[127,64882,457],{"class":140},[127,64884,55848],{"class":147},[127,64886,635],{"class":140},[127,64888,51846],{"class":147},[127,64890,64891,64893,64895],{"class":129,"line":17356},[127,64892,55941],{"class":147},[127,64894,1681],{"class":140},[127,64896,51846],{"class":147},[127,64898,64899,64901,64903],{"class":129,"line":17361},[127,64900,52312],{"class":147},[127,64902,52147],{"class":140},[127,64904,51846],{"class":147},[127,64906,64907,64909,64911,64913,64915,64918],{"class":129,"line":17367},[127,64908,51880],{"class":147},[127,64910,52147],{"class":140},[127,64912,54021],{"class":143},[127,64914,725],{"class":147},[127,64916,64917],{"class":781},"\"tab-content\"",[127,64919,51846],{"class":147},[127,64921,64922,64924,64926,64928,64930,64933,64935,64937,64939,64941,64944,64946,64948,64950,64953,64955],{"class":129,"line":17372},[127,64923,55768],{"class":147},[127,64925,52147],{"class":140},[127,64927,54021],{"class":143},[127,64929,725],{"class":147},[127,64931,64932],{"class":781},"\"item active\"",[127,64934,61585],{"class":147},[127,64936,23],{"class":140},[127,64938,55773],{"class":143},[127,64940,725],{"class":147},[127,64942,64943],{"class":781},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[127,64945,55781],{"class":143},[127,64947,725],{"class":147},[127,64949,8194],{"class":781},[127,64951,64952],{"class":147}," \u002F>\u003C\u002F",[127,64954,52147],{"class":140},[127,64956,51846],{"class":147},[127,64958,64959,64961,64963,64965,64967,64969,64971,64973,64975,64977,64980,64982,64984,64986,64988,64990],{"class":129,"line":17386},[127,64960,55768],{"class":147},[127,64962,52147],{"class":140},[127,64964,54021],{"class":143},[127,64966,725],{"class":147},[127,64968,63156],{"class":781},[127,64970,61585],{"class":147},[127,64972,23],{"class":140},[127,64974,55773],{"class":143},[127,64976,725],{"class":147},[127,64978,64979],{"class":781},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[127,64981,55781],{"class":143},[127,64983,725],{"class":147},[127,64985,8194],{"class":781},[127,64987,64952],{"class":147},[127,64989,52147],{"class":140},[127,64991,51846],{"class":147},[127,64993,64994,64996,64998,65000,65002,65004,65006,65008,65010,65012,65015,65017,65019,65021,65023,65025],{"class":129,"line":17391},[127,64995,55768],{"class":147},[127,64997,52147],{"class":140},[127,64999,54021],{"class":143},[127,65001,725],{"class":147},[127,65003,63156],{"class":781},[127,65005,61585],{"class":147},[127,65007,23],{"class":140},[127,65009,55773],{"class":143},[127,65011,725],{"class":147},[127,65013,65014],{"class":781},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[127,65016,55781],{"class":143},[127,65018,725],{"class":147},[127,65020,8194],{"class":781},[127,65022,64952],{"class":147},[127,65024,52147],{"class":140},[127,65026,51846],{"class":147},[127,65028,65029,65031,65033,65035,65037,65039,65041,65043,65045,65047,65050,65052,65054,65056,65058,65060],{"class":129,"line":17396},[127,65030,55768],{"class":147},[127,65032,52147],{"class":140},[127,65034,54021],{"class":143},[127,65036,725],{"class":147},[127,65038,63156],{"class":781},[127,65040,61585],{"class":147},[127,65042,23],{"class":140},[127,65044,55773],{"class":143},[127,65046,725],{"class":147},[127,65048,65049],{"class":781},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[127,65051,55781],{"class":143},[127,65053,725],{"class":147},[127,65055,8194],{"class":781},[127,65057,64952],{"class":147},[127,65059,52147],{"class":140},[127,65061,51846],{"class":147},[127,65063,65064,65066,65068,65070,65072,65074,65076,65078,65080,65082,65085,65087,65089,65091,65093,65095],{"class":129,"line":17410},[127,65065,55768],{"class":147},[127,65067,52147],{"class":140},[127,65069,54021],{"class":143},[127,65071,725],{"class":147},[127,65073,63156],{"class":781},[127,65075,61585],{"class":147},[127,65077,23],{"class":140},[127,65079,55773],{"class":143},[127,65081,725],{"class":147},[127,65083,65084],{"class":781},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[127,65086,55781],{"class":143},[127,65088,725],{"class":147},[127,65090,8194],{"class":781},[127,65092,64952],{"class":147},[127,65094,52147],{"class":140},[127,65096,51846],{"class":147},[127,65098,65099,65101,65103],{"class":129,"line":17422},[127,65100,52312],{"class":147},[127,65102,52147],{"class":140},[127,65104,51846],{"class":147},[127,65106,65107,65109,65111],{"class":129,"line":17427},[127,65108,52952],{"class":147},[127,65110,52147],{"class":140},[127,65112,51846],{"class":147},[127,65114,65115,65117,65119],{"class":129,"line":17440},[127,65116,52679],{"class":147},[127,65118,52348],{"class":140},[127,65120,51846],{"class":147},[127,65122,65123],{"class":129,"line":17445},[127,65124,65125],{"class":133},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[127,65127,65128],{"class":129,"line":17450},[127,65129,65130],{"class":133},"    \u002F\u002F 1.1 获取 a 元素 \n",[127,65132,65133,65135,65138,65140,65142,65144,65146,65149],{"class":129,"line":17455},[127,65134,11763],{"class":290},[127,65136,65137],{"class":154}," as",[127,65139,14106],{"class":290},[127,65141,54931],{"class":147},[127,65143,56215],{"class":143},[127,65145,681],{"class":147},[127,65147,65148],{"class":781},"'.tab-nav a'",[127,65150,687],{"class":147},[127,65152,65153],{"class":129,"line":17468},[127,65154,65155],{"class":133},"    \u002F\u002F console.log(as) \n",[127,65157,65158,65160,65162,65164,65166,65168,65170,65172,65174,65177,65179,65181,65183],{"class":129,"line":17473},[127,65159,3743],{"class":290},[127,65161,2201],{"class":147},[127,65163,52382],{"class":290},[127,65165,9980],{"class":147},[127,65167,725],{"class":290},[127,65169,4635],{"class":154},[127,65171,9987],{"class":147},[127,65173,1584],{"class":290},[127,65175,65176],{"class":147}," as.",[127,65178,52503],{"class":154},[127,65180,3756],{"class":147},[127,65182,2834],{"class":290},[127,65184,12984],{"class":147},[127,65186,65187],{"class":129,"line":33173},[127,65188,65189],{"class":133},"      \u002F\u002F console.log(as[i])\n",[127,65191,65192],{"class":129,"line":33179},[127,65193,65194],{"class":133},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[127,65196,65197,65200,65202,65204,65207,65209,65211],{"class":129,"line":33185},[127,65198,65199],{"class":147},"      as[i].",[127,65201,58346],{"class":143},[127,65203,681],{"class":147},[127,65205,65206],{"class":781},"'mouseenter'",[127,65208,12977],{"class":147},[127,65210,54984],{"class":290},[127,65212,54987],{"class":147},[127,65214,65215],{"class":129,"line":33191},[127,65216,65217],{"class":133},"        \u002F\u002F console.log('鼠标经过')\n",[127,65219,65220],{"class":129,"line":33197},[127,65221,65222],{"class":133},"        \u002F\u002F 排他思想  \n",[127,65224,65225],{"class":129,"line":33208},[127,65226,65227],{"class":133},"        \u002F\u002F 干掉别人 移除类active\n",[127,65229,65230,65232,65234,65236,65239,65241,65243,65245,65248],{"class":129,"line":33214},[127,65231,52460],{"class":147},[127,65233,54934],{"class":143},[127,65235,681],{"class":147},[127,65237,65238],{"class":781},"'.tab-nav .active'",[127,65240,57537],{"class":147},[127,65242,57540],{"class":143},[127,65244,681],{"class":147},[127,65246,65247],{"class":781},"'active'",[127,65249,687],{"class":147},[127,65251,65252],{"class":129,"line":33234},[127,65253,65254],{"class":133},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[127,65256,65257,65260,65263,65265,65267,65269],{"class":129,"line":33240},[127,65258,65259],{"class":154},"        this",[127,65261,65262],{"class":147},".classList.",[127,65264,5876],{"class":143},[127,65266,681],{"class":147},[127,65268,65247],{"class":781},[127,65270,687],{"class":147},[127,65272,65273],{"class":129,"line":33251},[127,65274,2942],{"emptyLinePlaceholder":606},[127,65276,65277],{"class":129,"line":33257},[127,65278,65279],{"class":133},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[127,65281,65282],{"class":129,"line":33263},[127,65283,65284],{"class":133},"        \u002F\u002F 干掉别人\n",[127,65286,65287,65289,65291,65293,65296,65298,65300,65302,65304],{"class":129,"line":33269},[127,65288,52460],{"class":147},[127,65290,54934],{"class":143},[127,65292,681],{"class":147},[127,65294,65295],{"class":781},"'.tab-content .active'",[127,65297,57537],{"class":147},[127,65299,57540],{"class":143},[127,65301,681],{"class":147},[127,65303,65247],{"class":781},[127,65305,687],{"class":147},[127,65307,65308],{"class":129,"line":33275},[127,65309,65310],{"class":133},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[127,65312,65313,65315,65317,65319,65322,65324,65326,65328,65330,65332,65334,65336,65338],{"class":129,"line":33281},[127,65314,52460],{"class":147},[127,65316,54934],{"class":143},[127,65318,681],{"class":147},[127,65320,65321],{"class":781},"`.tab-content .item:nth-child(${",[127,65323,1116],{"class":147},[127,65325,46106],{"class":290},[127,65327,25659],{"class":154},[127,65329,57566],{"class":781},[127,65331,57537],{"class":147},[127,65333,5876],{"class":143},[127,65335,681],{"class":147},[127,65337,65247],{"class":781},[127,65339,687],{"class":147},[127,65341,65342],{"class":129,"line":33287},[127,65343,2942],{"emptyLinePlaceholder":606},[127,65345,65346],{"class":129,"line":33293},[127,65347,65348],{"class":147},"      })\n",[127,65350,65351],{"class":129,"line":33313},[127,65352,2729],{"class":147},[127,65354,65355,65357,65359],{"class":129,"line":33319},[127,65356,52952],{"class":147},[127,65358,52348],{"class":140},[127,65360,51846],{"class":147},[127,65362,65363,65365,65367],{"class":129,"line":33335},[127,65364,52321],{"class":147},[127,65366,275],{"class":140},[127,65368,51846],{"class":147},[127,65370,65371],{"class":129,"line":33341},[127,65372,2942],{"emptyLinePlaceholder":606},[127,65374,65375,65377,65379],{"class":129,"line":33355},[127,65376,52321],{"class":147},[127,65378,51175],{"class":140},[127,65380,51846],{"class":147},[19,65382,65383],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65385,65386],{},"在监听事件中，this指向的就是他的调用者",[19,65388,65389],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65391,54255],{},[19,65393,65394],{},"(function () {",[19,65396,65397],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65399,65400],{},"list.addEventListener('click', function (e) {",[19,65402,65403],{},"if (e.target.tagName === 'A') {",[19,65405,65406],{},"\u002F\u002F 排他思想",[19,65408,65409],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65411,65412],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65414,65415],{},"\u002F\u002F console.log(old);",[19,65417,65418],{},"\u002F\u002F 判断",[19,65420,65421],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65423,65424],{},"if (old) old.classList.remove('active')",[19,65426,65427],{},"e.target.classList.add('active')",[19,65429,1620],{},[19,65431,52999],{},[19,65433,65434],{},"})();",[62,65436,65438],{"id":65437},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[117,65440,65442],{"className":51173,"code":65441,"language":51175,"meta":122,"style":122},"\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",[124,65443,65444,65454,65458,65466,65470,65484,65498,65510,65518,65524,65534,65544,65548,65552,65559,65571,65582,65599,65612,65626,65636,65640,65644,65651,65662,65680,65690,65702,65706,65710,65717,65734,65745,65757,65761,65765,65772,65784,65788,65796,65804,65808,65816,65824,65832,65847,65891,65899,65912,65925,65938,65946,65954,65962,65990,65998,66010,66023,66036,66044,66052,66060,66086,66094,66107,66119,66132,66140,66148,66156,66182,66190,66203,66215,66228,66236,66244,66252,66257,66277,66282,66302,66307,66324,66329,66337,66342,66371,66384,66388,66392,66397,66401,66429,66434,66451,66456,66461,66466,66471,66497,66501,66505,66513,66521,66525],{"__ignoreMap":122},[127,65445,65446,65448,65450,65452],{"class":129,"line":130},[127,65447,51837],{"class":147},[127,65449,51840],{"class":140},[127,65451,51843],{"class":143},[127,65453,51846],{"class":147},[127,65455,65456],{"class":129,"line":137},[127,65457,2942],{"emptyLinePlaceholder":606},[127,65459,65460,65462,65464],{"class":129,"line":151},[127,65461,1584],{"class":147},[127,65463,51175],{"class":140},[127,65465,51846],{"class":147},[127,65467,65468],{"class":129,"line":167},[127,65469,2942],{"emptyLinePlaceholder":606},[127,65471,65472,65474,65476,65478,65480,65482],{"class":129,"line":415},[127,65473,1584],{"class":147},[127,65475,51873],{"class":140},[127,65477,51855],{"class":143},[127,65479,725],{"class":147},[127,65481,51860],{"class":781},[127,65483,51846],{"class":147},[127,65485,65486,65488,65490,65492,65494,65496],{"class":129,"line":421},[127,65487,52679],{"class":147},[127,65489,51883],{"class":140},[127,65491,51886],{"class":143},[127,65493,725],{"class":147},[127,65495,51891],{"class":781},[127,65497,51846],{"class":147},[127,65499,65500,65502,65504,65506,65508],{"class":129,"line":1766},[127,65501,52679],{"class":147},[127,65503,51946],{"class":140},[127,65505,55848],{"class":147},[127,65507,51946],{"class":140},[127,65509,51846],{"class":147},[127,65511,65512,65514,65516],{"class":129,"line":1856},[127,65513,52679],{"class":147},[127,65515,575],{"class":140},[127,65517,51846],{"class":147},[127,65519,65520,65522],{"class":129,"line":1862},[127,65521,6945],{"class":140},[127,65523,148],{"class":147},[127,65525,65526,65528,65530,65532],{"class":129,"line":1874},[127,65527,55241],{"class":154},[127,65529,158],{"class":147},[127,65531,867],{"class":154},[127,65533,164],{"class":147},[127,65535,65536,65538,65540,65542],{"class":129,"line":2155},[127,65537,55230],{"class":154},[127,65539,158],{"class":147},[127,65541,867],{"class":154},[127,65543,164],{"class":147},[127,65545,65546],{"class":129,"line":2160},[127,65547,2729],{"class":147},[127,65549,65550],{"class":129,"line":2166},[127,65551,2942],{"emptyLinePlaceholder":606},[127,65553,65554,65557],{"class":129,"line":2171},[127,65555,65556],{"class":140},"    table",[127,65558,148],{"class":147},[127,65560,65561,65564,65566,65569],{"class":129,"line":2185},[127,65562,65563],{"class":154},"      border-collapse",[127,65565,158],{"class":147},[127,65567,65568],{"class":154},"collapse",[127,65570,164],{"class":147},[127,65572,65573,65576,65578,65580],{"class":129,"line":2190},[127,65574,65575],{"class":154},"      border-spacing",[127,65577,158],{"class":147},[127,65579,867],{"class":154},[127,65581,164],{"class":147},[127,65583,65584,65586,65588,65590,65592,65594,65597],{"class":129,"line":2196},[127,65585,62510],{"class":154},[127,65587,158],{"class":147},[127,65589,893],{"class":154},[127,65591,291],{"class":290},[127,65593,52058],{"class":154},[127,65595,65596],{"class":154}," #c0c0c0",[127,65598,164],{"class":147},[127,65600,65601,65603,65605,65608,65610],{"class":129,"line":2217},[127,65602,55305],{"class":154},[127,65604,158],{"class":147},[127,65606,65607],{"class":154},"500",[127,65609,291],{"class":290},[127,65611,164],{"class":147},[127,65613,65614,65616,65618,65620,65622,65624],{"class":129,"line":2222},[127,65615,55241],{"class":154},[127,65617,158],{"class":147},[127,65619,986],{"class":154},[127,65621,291],{"class":290},[127,65623,52093],{"class":154},[127,65625,164],{"class":147},[127,65627,65628,65630,65632,65634],{"class":129,"line":2236},[127,65629,57820],{"class":154},[127,65631,158],{"class":147},[127,65633,161],{"class":154},[127,65635,164],{"class":147},[127,65637,65638],{"class":129,"line":2241},[127,65639,2729],{"class":147},[127,65641,65642],{"class":129,"line":2270},[127,65643,2942],{"emptyLinePlaceholder":606},[127,65645,65646,65649],{"class":129,"line":2275},[127,65647,65648],{"class":140},"    th",[127,65650,148],{"class":147},[127,65652,65653,65655,65657,65660],{"class":129,"line":2292},[127,65654,55418],{"class":154},[127,65656,158],{"class":147},[127,65658,65659],{"class":154},"#09c",[127,65661,164],{"class":147},[127,65663,65664,65667,65669,65671,65673,65675,65678],{"class":129,"line":2297},[127,65665,65666],{"class":154},"      font",[127,65668,158],{"class":147},[127,65670,62872],{"class":154},[127,65672,64606],{"class":154},[127,65674,291],{"class":290},[127,65676,65677],{"class":781}," \"微软雅黑\"",[127,65679,164],{"class":147},[127,65681,65682,65684,65686,65688],{"class":129,"line":2302},[127,65683,57950],{"class":154},[127,65685,158],{"class":147},[127,65687,61375],{"class":154},[127,65689,164],{"class":147},[127,65691,65692,65694,65696,65698,65700],{"class":129,"line":2307},[127,65693,55319],{"class":154},[127,65695,158],{"class":147},[127,65697,1474],{"class":154},[127,65699,291],{"class":290},[127,65701,164],{"class":147},[127,65703,65704],{"class":129,"line":2321},[127,65705,2729],{"class":147},[127,65707,65708],{"class":129,"line":2326},[127,65709,2942],{"emptyLinePlaceholder":606},[127,65711,65712,65715],{"class":129,"line":3119},[127,65713,65714],{"class":140},"    td",[127,65716,148],{"class":147},[127,65718,65719,65721,65723,65725,65727,65729,65732],{"class":129,"line":3133},[127,65720,62510],{"class":154},[127,65722,158],{"class":147},[127,65724,893],{"class":154},[127,65726,291],{"class":290},[127,65728,52058],{"class":154},[127,65730,65731],{"class":154}," #d0d0d0",[127,65733,164],{"class":147},[127,65735,65736,65738,65740,65743],{"class":129,"line":3141},[127,65737,57950],{"class":154},[127,65739,158],{"class":147},[127,65741,65742],{"class":154},"#404060",[127,65744,164],{"class":147},[127,65746,65747,65749,65751,65753,65755],{"class":129,"line":3146},[127,65748,55230],{"class":154},[127,65750,158],{"class":147},[127,65752,1121],{"class":154},[127,65754,291],{"class":290},[127,65756,164],{"class":147},[127,65758,65759],{"class":129,"line":3152},[127,65760,2729],{"class":147},[127,65762,65763],{"class":129,"line":3158},[127,65764,2942],{"emptyLinePlaceholder":606},[127,65766,65767,65770],{"class":129,"line":3163},[127,65768,65769],{"class":143},"    .allCheck",[127,65771,148],{"class":147},[127,65773,65774,65776,65778,65780,65782],{"class":129,"line":8490},[127,65775,55305],{"class":154},[127,65777,158],{"class":147},[127,65779,1286],{"class":154},[127,65781,291],{"class":290},[127,65783,164],{"class":147},[127,65785,65786],{"class":129,"line":8514},[127,65787,2729],{"class":147},[127,65789,65790,65792,65794],{"class":129,"line":8519},[127,65791,52952],{"class":147},[127,65793,575],{"class":140},[127,65795,51846],{"class":147},[127,65797,65798,65800,65802],{"class":129,"line":8525},[127,65799,52321],{"class":147},[127,65801,51873],{"class":140},[127,65803,51846],{"class":147},[127,65805,65806],{"class":129,"line":8552},[127,65807,2942],{"emptyLinePlaceholder":606},[127,65809,65810,65812,65814],{"class":129,"line":8557},[127,65811,1584],{"class":147},[127,65813,275],{"class":140},[127,65815,51846],{"class":147},[127,65817,65818,65820,65822],{"class":129,"line":8563},[127,65819,52679],{"class":147},[127,65821,814],{"class":140},[127,65823,51846],{"class":147},[127,65825,65826,65828,65830],{"class":129,"line":8575},[127,65827,51880],{"class":147},[127,65829,820],{"class":140},[127,65831,51846],{"class":147},[127,65833,65834,65836,65838,65840,65842,65845],{"class":129,"line":8587},[127,65835,55768],{"class":147},[127,65837,823],{"class":140},[127,65839,54021],{"class":143},[127,65841,725],{"class":147},[127,65843,65844],{"class":781},"\"allCheck\"",[127,65846,51846],{"class":147},[127,65848,65849,65851,65853,65855,65857,65859,65861,65863,65865,65867,65869,65872,65875,65877,65879,65881,65884,65887,65889],{"class":129,"line":8599},[127,65850,55836],{"class":147},[127,65852,54356],{"class":140},[127,65854,54359],{"class":143},[127,65856,725],{"class":147},[127,65858,54364],{"class":781},[127,65860,15462],{"class":143},[127,65862,725],{"class":147},[127,65864,8194],{"class":781},[127,65866,15501],{"class":143},[127,65868,725],{"class":147},[127,65870,65871],{"class":781},"\"checkAll\"",[127,65873,65874],{"class":147},"> \u003C",[127,65876,127],{"class":140},[127,65878,54021],{"class":143},[127,65880,725],{"class":147},[127,65882,65883],{"class":781},"\"all\"",[127,65885,65886],{"class":147},">全选\u003C\u002F",[127,65888,127],{"class":140},[127,65890,51846],{"class":147},[127,65892,65893,65895,65897],{"class":129,"line":10258},[127,65894,55941],{"class":147},[127,65896,823],{"class":140},[127,65898,51846],{"class":147},[127,65900,65901,65903,65905,65908,65910],{"class":129,"line":10283},[127,65902,55768],{"class":147},[127,65904,823],{"class":140},[127,65906,65907],{"class":147},">商品\u003C\u002F",[127,65909,823],{"class":140},[127,65911,51846],{"class":147},[127,65913,65914,65916,65918,65921,65923],{"class":129,"line":10306},[127,65915,55768],{"class":147},[127,65917,823],{"class":140},[127,65919,65920],{"class":147},">商家\u003C\u002F",[127,65922,823],{"class":140},[127,65924,51846],{"class":147},[127,65926,65927,65929,65931,65934,65936],{"class":129,"line":10330},[127,65928,55768],{"class":147},[127,65930,823],{"class":140},[127,65932,65933],{"class":147},">价格\u003C\u002F",[127,65935,823],{"class":140},[127,65937,51846],{"class":147},[127,65939,65940,65942,65944],{"class":129,"line":10335},[127,65941,52312],{"class":147},[127,65943,820],{"class":140},[127,65945,51846],{"class":147},[127,65947,65948,65950,65952],{"class":129,"line":10340},[127,65949,51880],{"class":147},[127,65951,820],{"class":140},[127,65953,51846],{"class":147},[127,65955,65956,65958,65960],{"class":129,"line":10345},[127,65957,55768],{"class":147},[127,65959,865],{"class":140},[127,65961,51846],{"class":147},[127,65963,65964,65966,65968,65970,65972,65974,65976,65978,65981,65983,65985,65988],{"class":129,"line":10354},[127,65965,55836],{"class":147},[127,65967,54356],{"class":140},[127,65969,54359],{"class":143},[127,65971,725],{"class":147},[127,65973,54364],{"class":781},[127,65975,15462],{"class":143},[127,65977,725],{"class":147},[127,65979,65980],{"class":781},"\"check\"",[127,65982,54021],{"class":143},[127,65984,725],{"class":147},[127,65986,65987],{"class":781},"\"ck\"",[127,65989,51846],{"class":147},[127,65991,65992,65994,65996],{"class":129,"line":10359},[127,65993,55941],{"class":147},[127,65995,865],{"class":140},[127,65997,51846],{"class":147},[127,65999,66000,66002,66004,66006,66008],{"class":129,"line":10365},[127,66001,55768],{"class":147},[127,66003,865],{"class":140},[127,66005,61706],{"class":147},[127,66007,865],{"class":140},[127,66009,51846],{"class":147},[127,66011,66012,66014,66016,66019,66021],{"class":129,"line":10386},[127,66013,55768],{"class":147},[127,66015,865],{"class":140},[127,66017,66018],{"class":147},">小米\u003C\u002F",[127,66020,865],{"class":140},[127,66022,51846],{"class":147},[127,66024,66025,66027,66029,66032,66034],{"class":129,"line":10392},[127,66026,55768],{"class":147},[127,66028,865],{"class":140},[127,66030,66031],{"class":147},">￥1999\u003C\u002F",[127,66033,865],{"class":140},[127,66035,51846],{"class":147},[127,66037,66038,66040,66042],{"class":129,"line":10406},[127,66039,52312],{"class":147},[127,66041,820],{"class":140},[127,66043,51846],{"class":147},[127,66045,66046,66048,66050],{"class":129,"line":10412},[127,66047,51880],{"class":147},[127,66049,820],{"class":140},[127,66051,51846],{"class":147},[127,66053,66054,66056,66058],{"class":129,"line":10439},[127,66055,55768],{"class":147},[127,66057,865],{"class":140},[127,66059,51846],{"class":147},[127,66061,66062,66064,66066,66068,66070,66072,66074,66076,66078,66080,66082,66084],{"class":129,"line":10448},[127,66063,55836],{"class":147},[127,66065,54356],{"class":140},[127,66067,54359],{"class":143},[127,66069,725],{"class":147},[127,66071,54364],{"class":781},[127,66073,15462],{"class":143},[127,66075,725],{"class":147},[127,66077,65980],{"class":781},[127,66079,54021],{"class":143},[127,66081,725],{"class":147},[127,66083,65987],{"class":781},[127,66085,51846],{"class":147},[127,66087,66088,66090,66092],{"class":129,"line":10454},[127,66089,55941],{"class":147},[127,66091,865],{"class":140},[127,66093,51846],{"class":147},[127,66095,66096,66098,66100,66103,66105],{"class":129,"line":10462},[127,66097,55768],{"class":147},[127,66099,865],{"class":140},[127,66101,66102],{"class":147},">小米净水器\u003C\u002F",[127,66104,865],{"class":140},[127,66106,51846],{"class":147},[127,66108,66109,66111,66113,66115,66117],{"class":129,"line":10467},[127,66110,55768],{"class":147},[127,66112,865],{"class":140},[127,66114,66018],{"class":147},[127,66116,865],{"class":140},[127,66118,51846],{"class":147},[127,66120,66121,66123,66125,66128,66130],{"class":129,"line":17145},[127,66122,55768],{"class":147},[127,66124,865],{"class":140},[127,66126,66127],{"class":147},">￥4999\u003C\u002F",[127,66129,865],{"class":140},[127,66131,51846],{"class":147},[127,66133,66134,66136,66138],{"class":129,"line":17151},[127,66135,52312],{"class":147},[127,66137,820],{"class":140},[127,66139,51846],{"class":147},[127,66141,66142,66144,66146],{"class":129,"line":17174},[127,66143,51880],{"class":147},[127,66145,820],{"class":140},[127,66147,51846],{"class":147},[127,66149,66150,66152,66154],{"class":129,"line":17180},[127,66151,55768],{"class":147},[127,66153,865],{"class":140},[127,66155,51846],{"class":147},[127,66157,66158,66160,66162,66164,66166,66168,66170,66172,66174,66176,66178,66180],{"class":129,"line":17203},[127,66159,55836],{"class":147},[127,66161,54356],{"class":140},[127,66163,54359],{"class":143},[127,66165,725],{"class":147},[127,66167,54364],{"class":781},[127,66169,15462],{"class":143},[127,66171,725],{"class":147},[127,66173,65980],{"class":781},[127,66175,54021],{"class":143},[127,66177,725],{"class":147},[127,66179,65987],{"class":781},[127,66181,51846],{"class":147},[127,66183,66184,66186,66188],{"class":129,"line":17217},[127,66185,55941],{"class":147},[127,66187,865],{"class":140},[127,66189,51846],{"class":147},[127,66191,66192,66194,66196,66199,66201],{"class":129,"line":17237},[127,66193,55768],{"class":147},[127,66195,865],{"class":140},[127,66197,66198],{"class":147},">小米电视\u003C\u002F",[127,66200,865],{"class":140},[127,66202,51846],{"class":147},[127,66204,66205,66207,66209,66211,66213],{"class":129,"line":17243},[127,66206,55768],{"class":147},[127,66208,865],{"class":140},[127,66210,66018],{"class":147},[127,66212,865],{"class":140},[127,66214,51846],{"class":147},[127,66216,66217,66219,66221,66224,66226],{"class":129,"line":17254},[127,66218,55768],{"class":147},[127,66220,865],{"class":140},[127,66222,66223],{"class":147},">￥5999\u003C\u002F",[127,66225,865],{"class":140},[127,66227,51846],{"class":147},[127,66229,66230,66232,66234],{"class":129,"line":17277},[127,66231,52312],{"class":147},[127,66233,820],{"class":140},[127,66235,51846],{"class":147},[127,66237,66238,66240,66242],{"class":129,"line":17299},[127,66239,52952],{"class":147},[127,66241,814],{"class":140},[127,66243,51846],{"class":147},[127,66245,66246,66248,66250],{"class":129,"line":17304},[127,66247,52679],{"class":147},[127,66249,52348],{"class":140},[127,66251,51846],{"class":147},[127,66253,66254],{"class":129,"line":17310},[127,66255,66256],{"class":133},"    \u002F\u002F 1. 获取大复选框\n",[127,66258,66259,66261,66264,66266,66268,66270,66272,66275],{"class":129,"line":17324},[127,66260,11763],{"class":290},[127,66262,66263],{"class":154}," checkAll",[127,66265,14106],{"class":290},[127,66267,54931],{"class":147},[127,66269,54934],{"class":143},[127,66271,681],{"class":147},[127,66273,66274],{"class":781},"'#checkAll'",[127,66276,687],{"class":147},[127,66278,66279],{"class":129,"line":17337},[127,66280,66281],{"class":133},"    \u002F\u002F 2. 获取所有的小复选框\n",[127,66283,66284,66286,66289,66291,66293,66295,66297,66300],{"class":129,"line":17342},[127,66285,11763],{"class":290},[127,66287,66288],{"class":154}," cks",[127,66290,14106],{"class":290},[127,66292,54931],{"class":147},[127,66294,56215],{"class":143},[127,66296,681],{"class":147},[127,66298,66299],{"class":781},"'.ck'",[127,66301,687],{"class":147},[127,66303,66304],{"class":129,"line":17356},[127,66305,66306],{"class":133},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[127,66308,66309,66312,66314,66316,66318,66320,66322],{"class":129,"line":17361},[127,66310,66311],{"class":147},"    checkAll.",[127,66313,58346],{"class":143},[127,66315,681],{"class":147},[127,66317,58351],{"class":781},[127,66319,12977],{"class":147},[127,66321,54984],{"class":290},[127,66323,54987],{"class":147},[127,66325,66326],{"class":129,"line":17367},[127,66327,66328],{"class":133},"      \u002F\u002F 得到当前大复选框的选中状态\n",[127,66330,66331,66334],{"class":129,"line":17372},[127,66332,66333],{"class":133},"      \u002F\u002F console.log(checkAll.checked)",[127,66335,66336],{"class":133},"  \u002F\u002F 得到 是 true 或者是 false\n",[127,66338,66339],{"class":129,"line":17386},[127,66340,66341],{"class":133},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[127,66343,66344,66346,66348,66350,66352,66354,66356,66358,66360,66363,66365,66367,66369],{"class":129,"line":17391},[127,66345,52819],{"class":290},[127,66347,2201],{"class":147},[127,66349,52382],{"class":290},[127,66351,9980],{"class":147},[127,66353,725],{"class":290},[127,66355,4635],{"class":154},[127,66357,9987],{"class":147},[127,66359,1584],{"class":290},[127,66361,66362],{"class":147}," cks.",[127,66364,52503],{"class":154},[127,66366,3756],{"class":147},[127,66368,2834],{"class":290},[127,66370,12984],{"class":147},[127,66372,66373,66376,66378,66381],{"class":129,"line":17396},[127,66374,66375],{"class":147},"        cks[i].checked ",[127,66377,725],{"class":290},[127,66379,66380],{"class":154}," this",[127,66382,66383],{"class":147},".checked\n",[127,66385,66386],{"class":129,"line":17410},[127,66387,52933],{"class":147},[127,66389,66390],{"class":129,"line":17422},[127,66391,34001],{"class":147},[127,66393,66394],{"class":129,"line":17427},[127,66395,66396],{"class":133},"    \u002F\u002F 5. 小复选框控制大复选框\n",[127,66398,66399],{"class":129,"line":17440},[127,66400,2942],{"emptyLinePlaceholder":606},[127,66402,66403,66405,66407,66409,66411,66413,66415,66417,66419,66421,66423,66425,66427],{"class":129,"line":17445},[127,66404,3743],{"class":290},[127,66406,2201],{"class":147},[127,66408,52382],{"class":290},[127,66410,9980],{"class":147},[127,66412,725],{"class":290},[127,66414,4635],{"class":154},[127,66416,9987],{"class":147},[127,66418,1584],{"class":290},[127,66420,66362],{"class":147},[127,66422,52503],{"class":154},[127,66424,3756],{"class":147},[127,66426,2834],{"class":290},[127,66428,12984],{"class":147},[127,66430,66431],{"class":129,"line":17450},[127,66432,66433],{"class":133},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[127,66435,66436,66439,66441,66443,66445,66447,66449],{"class":129,"line":17455},[127,66437,66438],{"class":147},"      cks[i].",[127,66440,58346],{"class":143},[127,66442,681],{"class":147},[127,66444,58351],{"class":781},[127,66446,12977],{"class":147},[127,66448,54984],{"class":290},[127,66450,54987],{"class":147},[127,66452,66453],{"class":129,"line":17468},[127,66454,66455],{"class":133},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[127,66457,66458],{"class":129,"line":17473},[127,66459,66460],{"class":133},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[127,66462,66463],{"class":129,"line":33173},[127,66464,66465],{"class":133},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[127,66467,66468],{"class":129,"line":33179},[127,66469,66470],{"class":133},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[127,66472,66473,66476,66478,66480,66482,66484,66487,66489,66491,66493,66495],{"class":129,"line":33185},[127,66474,66475],{"class":147},"        checkAll.checked ",[127,66477,725],{"class":290},[127,66479,54931],{"class":147},[127,66481,56215],{"class":143},[127,66483,681],{"class":147},[127,66485,66486],{"class":781},"'.ck:checked'",[127,66488,31366],{"class":147},[127,66490,52503],{"class":154},[127,66492,58439],{"class":290},[127,66494,66362],{"class":147},[127,66496,56365],{"class":154},[127,66498,66499],{"class":129,"line":33191},[127,66500,65348],{"class":147},[127,66502,66503],{"class":129,"line":33197},[127,66504,2729],{"class":147},[127,66506,66507,66509,66511],{"class":129,"line":33208},[127,66508,52952],{"class":147},[127,66510,52348],{"class":140},[127,66512,51846],{"class":147},[127,66514,66515,66517,66519],{"class":129,"line":33214},[127,66516,52321],{"class":147},[127,66518,275],{"class":140},[127,66520,51846],{"class":147},[127,66522,66523],{"class":129,"line":33234},[127,66524,2942],{"emptyLinePlaceholder":606},[127,66526,66527,66529,66531],{"class":129,"line":33240},[127,66528,52321],{"class":147},[127,66530,51175],{"class":140},[127,66532,51846],{"class":147},[19,66534,66535],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66537,66538],{},"用好之间比较得到的布尔值！！！",[19,66540,66541,66542,66545,66546,2201,66549,1259,66551,66554],{},"在 JS 里访问的时候，",[124,66543,66544],{},"checkbox.checked"," 是一个 ",[30,66547,66548],{},"布尔值",[124,66550,1907],{},[124,66552,66553],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66556,66557,66558,66561,66562],{},"HTML 的 ",[124,66559,66560],{},"checked=\"checked\""," 只是 ",[30,66563,66564,66565,66568],{},"初始值；JS 的 ",[124,66566,66567],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66570,66571],{},"：checked是一个伪类选择器",[19,66573,66574],{},[23,66575],{"alt":122,"src":66576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66578,66579,66582],{},[66580,66581],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66584,66585],{},[23,66586],{"alt":122,"src":66587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66589,66591],{"id":66590},"_33-dom事件进阶","3.3 DOM事件进阶",[62,66593,66595],{"id":66594},"_331-事件流","3.3.1 事件流",[19,66597,66598],{},[23,66599],{"alt":122,"src":66600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22539,66602,66604],{"id":66603},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66606,66607],{},[23,66608],{"alt":122,"src":66609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[117,66611,66613],{"className":51173,"code":66612,"language":51175,"meta":122,"style":122},"\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",[124,66614,66615,66625,66639,66643,66651,66665,66685,66697,66705,66712,66724,66736,66746,66750,66754,66761,66773,66785,66795,66799,66807,66815,66819,66827,66842,66861,66869,66877,66897,66917,66933,66944,66952,66969,66980,66988,67005,67016,67024,67032,67040,67044],{"__ignoreMap":122},[127,66616,66617,66619,66621,66623],{"class":129,"line":130},[127,66618,51837],{"class":147},[127,66620,51840],{"class":140},[127,66622,51843],{"class":143},[127,66624,51846],{"class":147},[127,66626,66627,66629,66631,66633,66635,66637],{"class":129,"line":137},[127,66628,1584],{"class":147},[127,66630,51175],{"class":140},[127,66632,51855],{"class":143},[127,66634,725],{"class":147},[127,66636,51860],{"class":781},[127,66638,51846],{"class":147},[127,66640,66641],{"class":129,"line":151},[127,66642,2942],{"emptyLinePlaceholder":606},[127,66644,66645,66647,66649],{"class":129,"line":167},[127,66646,1584],{"class":147},[127,66648,51873],{"class":140},[127,66650,51846],{"class":147},[127,66652,66653,66655,66657,66659,66661,66663],{"class":129,"line":415},[127,66654,52679],{"class":147},[127,66656,51883],{"class":140},[127,66658,51886],{"class":143},[127,66660,725],{"class":147},[127,66662,51891],{"class":781},[127,66664,51846],{"class":147},[127,66666,66667,66669,66671,66673,66675,66677,66679,66681,66683],{"class":129,"line":421},[127,66668,52679],{"class":147},[127,66670,51883],{"class":140},[127,66672,15462],{"class":143},[127,66674,725],{"class":147},[127,66676,51930],{"class":781},[127,66678,51910],{"class":143},[127,66680,725],{"class":147},[127,66682,51937],{"class":781},[127,66684,51846],{"class":147},[127,66686,66687,66689,66691,66693,66695],{"class":129,"line":1766},[127,66688,52679],{"class":147},[127,66690,51946],{"class":140},[127,66692,51949],{"class":147},[127,66694,51946],{"class":140},[127,66696,51846],{"class":147},[127,66698,66699,66701,66703],{"class":129,"line":1856},[127,66700,52679],{"class":147},[127,66702,575],{"class":140},[127,66704,51846],{"class":147},[127,66706,66707,66710],{"class":129,"line":1862},[127,66708,66709],{"class":143},"    .father",[127,66711,148],{"class":147},[127,66713,66714,66716,66718,66720,66722],{"class":129,"line":1874},[127,66715,55305],{"class":154},[127,66717,158],{"class":147},[127,66719,65607],{"class":154},[127,66721,291],{"class":290},[127,66723,164],{"class":147},[127,66725,66726,66728,66730,66732,66734],{"class":129,"line":2155},[127,66727,55319],{"class":154},[127,66729,158],{"class":147},[127,66731,65607],{"class":154},[127,66733,291],{"class":290},[127,66735,164],{"class":147},[127,66737,66738,66740,66742,66744],{"class":129,"line":2160},[127,66739,55418],{"class":154},[127,66741,158],{"class":147},[127,66743,52181],{"class":154},[127,66745,164],{"class":147},[127,66747,66748],{"class":129,"line":2166},[127,66749,2729],{"class":147},[127,66751,66752],{"class":129,"line":2171},[127,66753,2942],{"emptyLinePlaceholder":606},[127,66755,66756,66759],{"class":129,"line":2185},[127,66757,66758],{"class":143},"    .son",[127,66760,148],{"class":147},[127,66762,66763,66765,66767,66769,66771],{"class":129,"line":2190},[127,66764,55305],{"class":154},[127,66766,158],{"class":147},[127,66768,2265],{"class":154},[127,66770,291],{"class":290},[127,66772,164],{"class":147},[127,66774,66775,66777,66779,66781,66783],{"class":129,"line":2196},[127,66776,55319],{"class":154},[127,66778,158],{"class":147},[127,66780,2265],{"class":154},[127,66782,291],{"class":290},[127,66784,164],{"class":147},[127,66786,66787,66789,66791,66793],{"class":129,"line":2217},[127,66788,55418],{"class":154},[127,66790,158],{"class":147},[127,66792,55423],{"class":154},[127,66794,164],{"class":147},[127,66796,66797],{"class":129,"line":2222},[127,66798,2729],{"class":147},[127,66800,66801,66803,66805],{"class":129,"line":2236},[127,66802,52952],{"class":147},[127,66804,575],{"class":140},[127,66806,51846],{"class":147},[127,66808,66809,66811,66813],{"class":129,"line":2241},[127,66810,52321],{"class":147},[127,66812,51873],{"class":140},[127,66814,51846],{"class":147},[127,66816,66817],{"class":129,"line":2270},[127,66818,2942],{"emptyLinePlaceholder":606},[127,66820,66821,66823,66825],{"class":129,"line":2275},[127,66822,1584],{"class":147},[127,66824,275],{"class":140},[127,66826,51846],{"class":147},[127,66828,66829,66831,66833,66835,66837,66840],{"class":129,"line":2292},[127,66830,52679],{"class":147},[127,66832,52147],{"class":140},[127,66834,54021],{"class":143},[127,66836,725],{"class":147},[127,66838,66839],{"class":781},"\"father\"",[127,66841,51846],{"class":147},[127,66843,66844,66846,66848,66850,66852,66855,66857,66859],{"class":129,"line":2297},[127,66845,51880],{"class":147},[127,66847,52147],{"class":140},[127,66849,54021],{"class":143},[127,66851,725],{"class":147},[127,66853,66854],{"class":781},"\"son\"",[127,66856,55848],{"class":147},[127,66858,52147],{"class":140},[127,66860,51846],{"class":147},[127,66862,66863,66865,66867],{"class":129,"line":2302},[127,66864,52952],{"class":147},[127,66866,52147],{"class":140},[127,66868,51846],{"class":147},[127,66870,66871,66873,66875],{"class":129,"line":2307},[127,66872,52679],{"class":147},[127,66874,52348],{"class":140},[127,66876,51846],{"class":147},[127,66878,66879,66881,66884,66886,66888,66890,66892,66895],{"class":129,"line":2321},[127,66880,11763],{"class":290},[127,66882,66883],{"class":154}," fa",[127,66885,14106],{"class":290},[127,66887,54931],{"class":147},[127,66889,54934],{"class":143},[127,66891,681],{"class":147},[127,66893,66894],{"class":781},"'.father'",[127,66896,687],{"class":147},[127,66898,66899,66901,66904,66906,66908,66910,66912,66915],{"class":129,"line":2326},[127,66900,11763],{"class":290},[127,66902,66903],{"class":154}," son",[127,66905,14106],{"class":290},[127,66907,54931],{"class":147},[127,66909,54934],{"class":143},[127,66911,681],{"class":147},[127,66913,66914],{"class":781},"'.son'",[127,66916,687],{"class":147},[127,66918,66919,66921,66923,66925,66927,66929,66931],{"class":129,"line":3119},[127,66920,52942],{"class":147},[127,66922,58346],{"class":143},[127,66924,681],{"class":147},[127,66926,58351],{"class":781},[127,66928,12977],{"class":147},[127,66930,54984],{"class":290},[127,66932,54987],{"class":147},[127,66934,66935,66937,66939,66942],{"class":129,"line":3133},[127,66936,59458],{"class":143},[127,66938,681],{"class":147},[127,66940,66941],{"class":781},"'woshiu1'",[127,66943,687],{"class":147},[127,66945,66946,66948,66950],{"class":129,"line":3141},[127,66947,55070],{"class":147},[127,66949,1907],{"class":154},[127,66951,687],{"class":147},[127,66953,66954,66957,66959,66961,66963,66965,66967],{"class":129,"line":3146},[127,66955,66956],{"class":147},"    fa.",[127,66958,58346],{"class":143},[127,66960,681],{"class":147},[127,66962,58351],{"class":781},[127,66964,12977],{"class":147},[127,66966,54984],{"class":290},[127,66968,54987],{"class":147},[127,66970,66971,66973,66975,66978],{"class":129,"line":3152},[127,66972,59458],{"class":143},[127,66974,681],{"class":147},[127,66976,66977],{"class":781},"'1'",[127,66979,687],{"class":147},[127,66981,66982,66984,66986],{"class":129,"line":3158},[127,66983,55070],{"class":147},[127,66985,1907],{"class":154},[127,66987,687],{"class":147},[127,66989,66990,66993,66995,66997,66999,67001,67003],{"class":129,"line":3163},[127,66991,66992],{"class":147},"    son.",[127,66994,58346],{"class":143},[127,66996,681],{"class":147},[127,66998,58351],{"class":781},[127,67000,12977],{"class":147},[127,67002,54984],{"class":290},[127,67004,54987],{"class":147},[127,67006,67007,67009,67011,67014],{"class":129,"line":8490},[127,67008,59458],{"class":143},[127,67010,681],{"class":147},[127,67012,67013],{"class":781},"'2'",[127,67015,687],{"class":147},[127,67017,67018,67020,67022],{"class":129,"line":8514},[127,67019,55070],{"class":147},[127,67021,1907],{"class":154},[127,67023,687],{"class":147},[127,67025,67026,67028,67030],{"class":129,"line":8519},[127,67027,52952],{"class":147},[127,67029,52348],{"class":140},[127,67031,51846],{"class":147},[127,67033,67034,67036,67038],{"class":129,"line":8525},[127,67035,52321],{"class":147},[127,67037,275],{"class":140},[127,67039,51846],{"class":147},[127,67041,67042],{"class":129,"line":8552},[127,67043,2942],{"emptyLinePlaceholder":606},[127,67045,67046,67048,67050],{"class":129,"line":8557},[127,67047,52321],{"class":147},[127,67049,51175],{"class":140},[127,67051,51846],{"class":147},[19,67053,67054],{},[23,67055],{"alt":122,"src":67056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67058,67059],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22539,67061,67063],{"id":67062},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67065,67066],{},[23,67067],{"alt":122,"src":67068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67070,67071],{},"反着来",[19,67073,67074],{},"注意是同名事件，比如都是‘click’",[22539,67076,67078],{"id":67077},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67080,67081],{},[23,67082],{"alt":122,"src":67083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22539,67085,67087],{"id":67086},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67089,67090],{},[23,67091],{"alt":122,"src":67092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67094,67095],{},[23,67096],{"alt":122,"src":67097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22539,67099,67101],{"id":67100},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[632,67103,67104],{},[635,67105,67106],{},"事件类型的区别",[19,67108,67109],{},[23,67110],{"alt":122,"src":67111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67113,67114],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[632,67116,67117],{"start":137},[635,67118,67119],{},"注册事件的区别",[19,67121,67122],{},[23,67123],{"alt":122,"src":67124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22539,67126,67128],{"id":67127},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67130,67131],{},[23,67132],{"alt":122,"src":67133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67135,67136],{},[23,67137],{"alt":122,"src":67138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[117,67140,67142],{"className":53602,"code":67141,"language":53604,"meta":122,"style":122},"\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",[124,67143,67144,67152,67169,67192,67200,67205,67210,67215,67219,67227,67235],{"__ignoreMap":122},[127,67145,67146,67148,67150],{"class":129,"line":130},[127,67147,1584],{"class":147},[127,67149,275],{"class":140},[127,67151,51846],{"class":147},[127,67153,67154,67156,67159,67162,67164,67167],{"class":129,"line":137},[127,67155,52679],{"class":147},[127,67157,67158],{"class":140},"form",[127,67160,67161],{"class":143}," action",[127,67163,725],{"class":147},[127,67165,67166],{"class":781},"\"http:\u002F\u002Fwww.itcast.cn\"",[127,67168,51846],{"class":147},[127,67170,67171,67173,67175,67177,67179,67182,67185,67187,67190],{"class":129,"line":151},[127,67172,51880],{"class":147},[127,67174,54356],{"class":140},[127,67176,54359],{"class":143},[127,67178,725],{"class":147},[127,67180,67181],{"class":781},"\"submit\"",[127,67183,67184],{"class":143}," value",[127,67186,725],{"class":147},[127,67188,67189],{"class":781},"\"免费注册\"",[127,67191,51846],{"class":147},[127,67193,67194,67196,67198],{"class":129,"line":167},[127,67195,51880],{"class":147},[127,67197,52348],{"class":140},[127,67199,51846],{"class":147},[127,67201,67202],{"class":129,"line":415},[127,67203,67204],{"class":147},"      const form = document.querySelector('form')\n",[127,67206,67207],{"class":129,"line":421},[127,67208,67209],{"class":147},"      form.addEventListener('submit', function (e) {\n",[127,67211,67212],{"class":129,"line":1766},[127,67213,67214],{"class":147},"        e.preventDefault()\n",[127,67216,67217],{"class":129,"line":1856},[127,67218,65348],{"class":147},[127,67220,67221,67223,67225],{"class":129,"line":1862},[127,67222,52312],{"class":147},[127,67224,52348],{"class":140},[127,67226,51846],{"class":147},[127,67228,67229,67231,67233],{"class":129,"line":1874},[127,67230,52952],{"class":147},[127,67232,67158],{"class":140},[127,67234,51846],{"class":147},[127,67236,67237,67239,67241],{"class":129,"line":2155},[127,67238,52321],{"class":147},[127,67240,275],{"class":140},[127,67242,51846],{"class":147},[19,67244,67245],{},"点击不在跳转！！！",[62,67247,67249],{"id":67248},"_332-事件委托","3.3.2 事件委托",[19,67251,67252],{},[23,67253],{"alt":122,"src":67254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[117,67256,67258],{"className":51173,"code":67257,"language":51175,"meta":122,"style":122},"\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",[124,67259,67260,67270,67284,67288,67296,67310,67330,67342,67350,67354,67362,67370,67382,67394,67406,67418,67430,67443,67451,67459,67464,67483,67504,67509,67514,67519,67524,67533,67537,67547,67551,67556,67561,67575,67585,67589,67593,67601,67609,67613],{"__ignoreMap":122},[127,67261,67262,67264,67266,67268],{"class":129,"line":130},[127,67263,51837],{"class":147},[127,67265,51840],{"class":140},[127,67267,51843],{"class":143},[127,67269,51846],{"class":147},[127,67271,67272,67274,67276,67278,67280,67282],{"class":129,"line":137},[127,67273,1584],{"class":147},[127,67275,51175],{"class":140},[127,67277,51855],{"class":143},[127,67279,725],{"class":147},[127,67281,51860],{"class":781},[127,67283,51846],{"class":147},[127,67285,67286],{"class":129,"line":151},[127,67287,2942],{"emptyLinePlaceholder":606},[127,67289,67290,67292,67294],{"class":129,"line":167},[127,67291,1584],{"class":147},[127,67293,51873],{"class":140},[127,67295,51846],{"class":147},[127,67297,67298,67300,67302,67304,67306,67308],{"class":129,"line":415},[127,67299,52679],{"class":147},[127,67301,51883],{"class":140},[127,67303,51886],{"class":143},[127,67305,725],{"class":147},[127,67307,51891],{"class":781},[127,67309,51846],{"class":147},[127,67311,67312,67314,67316,67318,67320,67322,67324,67326,67328],{"class":129,"line":421},[127,67313,52679],{"class":147},[127,67315,51883],{"class":140},[127,67317,15462],{"class":143},[127,67319,725],{"class":147},[127,67321,51930],{"class":781},[127,67323,51910],{"class":143},[127,67325,725],{"class":147},[127,67327,51937],{"class":781},[127,67329,51846],{"class":147},[127,67331,67332,67334,67336,67338,67340],{"class":129,"line":1766},[127,67333,52679],{"class":147},[127,67335,51946],{"class":140},[127,67337,51949],{"class":147},[127,67339,51946],{"class":140},[127,67341,51846],{"class":147},[127,67343,67344,67346,67348],{"class":129,"line":1856},[127,67345,52321],{"class":147},[127,67347,51873],{"class":140},[127,67349,51846],{"class":147},[127,67351,67352],{"class":129,"line":1862},[127,67353,2942],{"emptyLinePlaceholder":606},[127,67355,67356,67358,67360],{"class":129,"line":1874},[127,67357,1584],{"class":147},[127,67359,275],{"class":140},[127,67361,51846],{"class":147},[127,67363,67364,67366,67368],{"class":129,"line":2155},[127,67365,52679],{"class":147},[127,67367,1681],{"class":140},[127,67369,51846],{"class":147},[127,67371,67372,67374,67376,67378,67380],{"class":129,"line":2160},[127,67373,51880],{"class":147},[127,67375,635],{"class":140},[127,67377,54501],{"class":147},[127,67379,635],{"class":140},[127,67381,51846],{"class":147},[127,67383,67384,67386,67388,67390,67392],{"class":129,"line":2166},[127,67385,51880],{"class":147},[127,67387,635],{"class":140},[127,67389,54520],{"class":147},[127,67391,635],{"class":140},[127,67393,51846],{"class":147},[127,67395,67396,67398,67400,67402,67404],{"class":129,"line":2171},[127,67397,51880],{"class":147},[127,67399,635],{"class":140},[127,67401,54539],{"class":147},[127,67403,635],{"class":140},[127,67405,51846],{"class":147},[127,67407,67408,67410,67412,67414,67416],{"class":129,"line":2185},[127,67409,51880],{"class":147},[127,67411,635],{"class":140},[127,67413,54558],{"class":147},[127,67415,635],{"class":140},[127,67417,51846],{"class":147},[127,67419,67420,67422,67424,67426,67428],{"class":129,"line":2190},[127,67421,51880],{"class":147},[127,67423,635],{"class":140},[127,67425,54577],{"class":147},[127,67427,635],{"class":140},[127,67429,51846],{"class":147},[127,67431,67432,67434,67436,67439,67441],{"class":129,"line":2196},[127,67433,51880],{"class":147},[127,67435,19],{"class":140},[127,67437,67438],{"class":147},">我不需要变色\u003C\u002F",[127,67440,19],{"class":140},[127,67442,51846],{"class":147},[127,67444,67445,67447,67449],{"class":129,"line":2217},[127,67446,52952],{"class":147},[127,67448,1681],{"class":140},[127,67450,51846],{"class":147},[127,67452,67453,67455,67457],{"class":129,"line":2222},[127,67454,52679],{"class":147},[127,67456,52348],{"class":140},[127,67458,51846],{"class":147},[127,67460,67461],{"class":129,"line":2236},[127,67462,67463],{"class":133},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[127,67465,67466,67468,67470,67472,67474,67476,67478,67481],{"class":129,"line":2241},[127,67467,11763],{"class":290},[127,67469,61825],{"class":154},[127,67471,14106],{"class":290},[127,67473,54931],{"class":147},[127,67475,54934],{"class":143},[127,67477,681],{"class":147},[127,67479,67480],{"class":781},"'ul'",[127,67482,687],{"class":147},[127,67484,67485,67488,67490,67492,67494,67496,67498,67500,67502],{"class":129,"line":2270},[127,67486,67487],{"class":147},"    ul.",[127,67489,58346],{"class":143},[127,67491,681],{"class":147},[127,67493,58351],{"class":781},[127,67495,12977],{"class":147},[127,67497,54984],{"class":290},[127,67499,2201],{"class":147},[127,67501,752],{"class":5758},[127,67503,12984],{"class":147},[127,67505,67506],{"class":129,"line":2275},[127,67507,67508],{"class":133},"      \u002F\u002F alert(1)\n",[127,67510,67511],{"class":129,"line":2292},[127,67512,67513],{"class":133},"      \u002F\u002F e.target就是我们点击的对象\n",[127,67515,67516],{"class":129,"line":2297},[127,67517,67518],{"class":133},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[127,67520,67521],{"class":129,"line":2302},[127,67522,67523],{"class":133},"      \u002F\u002F e.target.style.color = 'red'\n",[127,67525,67526,67528,67530],{"class":129,"line":2307},[127,67527,58777],{"class":147},[127,67529,58780],{"class":143},[127,67531,67532],{"class":147},"(e)\n",[127,67534,67535],{"class":129,"line":2321},[127,67536,2942],{"emptyLinePlaceholder":606},[127,67538,67539,67541,67544],{"class":129,"line":2326},[127,67540,58777],{"class":147},[127,67542,67543],{"class":143},"dir",[127,67545,67546],{"class":147},"(e.target)\n",[127,67548,67549],{"class":129,"line":3119},[127,67550,2942],{"emptyLinePlaceholder":606},[127,67552,67553],{"class":129,"line":3133},[127,67554,67555],{"class":133},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[127,67557,67558],{"class":129,"line":3141},[127,67559,67560],{"class":133},"      \u002F\u002F 通过tagName来进行判断\n",[127,67562,67563,67565,67568,67570,67573],{"class":129,"line":3146},[127,67564,55015],{"class":290},[127,67566,67567],{"class":147}," (e.target.tagName ",[127,67569,55021],{"class":290},[127,67571,67572],{"class":781}," 'LI'",[127,67574,12984],{"class":147},[127,67576,67577,67580,67582],{"class":129,"line":3152},[127,67578,67579],{"class":147},"        e.target.style.color ",[127,67581,725],{"class":290},[127,67583,67584],{"class":781}," 'red'\n",[127,67586,67587],{"class":129,"line":3158},[127,67588,52933],{"class":147},[127,67590,67591],{"class":129,"line":3163},[127,67592,34001],{"class":147},[127,67594,67595,67597,67599],{"class":129,"line":8490},[127,67596,52952],{"class":147},[127,67598,52348],{"class":140},[127,67600,51846],{"class":147},[127,67602,67603,67605,67607],{"class":129,"line":8514},[127,67604,52321],{"class":147},[127,67606,275],{"class":140},[127,67608,51846],{"class":147},[127,67610,67611],{"class":129,"line":8519},[127,67612,2942],{"emptyLinePlaceholder":606},[127,67614,67615,67617,67619],{"class":129,"line":8525},[127,67616,52321],{"class":147},[127,67618,51175],{"class":140},[127,67620,51846],{"class":147},[19,67622,67623],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67625,67626],{},"if(e.target.ragName==='P') {}",[19,67628,67629],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67631,67632],{},"通过事件委托的方式实现tab栏切换改造：",[19,67634,67635],{},"一定要记住自定义属性！！！！！！",[19,67637,67638],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67640,67641],{},"id是自定义的属性名",[19,67643,67644],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[117,67646,67648],{"className":51173,"code":67647,"language":51175,"meta":122,"style":122},"\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",[124,67649,67650,67660,67674,67678,67686,67700,67720,67740,67752,67760,67766,67776,67786,67790,67794,67800,67812,67824,67836,67852,67856,67860,67866,67878,67890,67902,67912,67922,67926,67930,67938,67950,67960,67972,67976,67980,67988,67998,68008,68018,68022,68026,68036,68050,68062,68066,68070,68082,68092,68108,68118,68122,68126,68140,68150,68160,68164,68168,68174,68188,68192,68196,68204,68214,68218,68222,68231,68241,68245,68253,68261,68265,68273,68287,68301,68313,68321,68360,68392,68424,68456,68488,68496,68504,68518,68552,68586,68620,68654,68688,68696,68704,68712,68717,68722,68741,68746,68766,68774,68779,68792,68813,68826,68830,68835,68840,68853,68873,68901,68905,68909,68913,68921,68929,68933],{"__ignoreMap":122},[127,67651,67652,67654,67656,67658],{"class":129,"line":130},[127,67653,51837],{"class":147},[127,67655,51840],{"class":140},[127,67657,51843],{"class":143},[127,67659,51846],{"class":147},[127,67661,67662,67664,67666,67668,67670,67672],{"class":129,"line":137},[127,67663,1584],{"class":147},[127,67665,51175],{"class":140},[127,67667,51855],{"class":143},[127,67669,725],{"class":147},[127,67671,51860],{"class":781},[127,67673,51846],{"class":147},[127,67675,67676],{"class":129,"line":151},[127,67677,2942],{"emptyLinePlaceholder":606},[127,67679,67680,67682,67684],{"class":129,"line":167},[127,67681,1584],{"class":147},[127,67683,51873],{"class":140},[127,67685,51846],{"class":147},[127,67687,67688,67690,67692,67694,67696,67698],{"class":129,"line":415},[127,67689,52679],{"class":147},[127,67691,51883],{"class":140},[127,67693,51886],{"class":143},[127,67695,725],{"class":147},[127,67697,51891],{"class":781},[127,67699,59660],{"class":147},[127,67701,67702,67704,67706,67708,67710,67712,67714,67716,67718],{"class":129,"line":421},[127,67703,52679],{"class":147},[127,67705,51883],{"class":140},[127,67707,51902],{"class":143},[127,67709,725],{"class":147},[127,67711,51907],{"class":781},[127,67713,51910],{"class":143},[127,67715,725],{"class":147},[127,67717,51915],{"class":781},[127,67719,59660],{"class":147},[127,67721,67722,67724,67726,67728,67730,67732,67734,67736,67738],{"class":129,"line":1766},[127,67723,52679],{"class":147},[127,67725,51883],{"class":140},[127,67727,15462],{"class":143},[127,67729,725],{"class":147},[127,67731,51930],{"class":781},[127,67733,51910],{"class":143},[127,67735,725],{"class":147},[127,67737,51937],{"class":781},[127,67739,59660],{"class":147},[127,67741,67742,67744,67746,67748,67750],{"class":129,"line":1856},[127,67743,52679],{"class":147},[127,67745,51946],{"class":140},[127,67747,64158],{"class":147},[127,67749,51946],{"class":140},[127,67751,51846],{"class":147},[127,67753,67754,67756,67758],{"class":129,"line":1862},[127,67755,52679],{"class":147},[127,67757,575],{"class":140},[127,67759,51846],{"class":147},[127,67761,67762,67764],{"class":129,"line":1874},[127,67763,6945],{"class":140},[127,67765,148],{"class":147},[127,67767,67768,67770,67772,67774],{"class":129,"line":2155},[127,67769,55241],{"class":154},[127,67771,158],{"class":147},[127,67773,867],{"class":154},[127,67775,164],{"class":147},[127,67777,67778,67780,67782,67784],{"class":129,"line":2160},[127,67779,55230],{"class":154},[127,67781,158],{"class":147},[127,67783,867],{"class":154},[127,67785,164],{"class":147},[127,67787,67788],{"class":129,"line":2166},[127,67789,2729],{"class":147},[127,67791,67792],{"class":129,"line":2171},[127,67793,2942],{"emptyLinePlaceholder":606},[127,67795,67796,67798],{"class":129,"line":2185},[127,67797,64209],{"class":143},[127,67799,148],{"class":147},[127,67801,67802,67804,67806,67808,67810],{"class":129,"line":2190},[127,67803,55305],{"class":154},[127,67805,158],{"class":147},[127,67807,64220],{"class":154},[127,67809,291],{"class":290},[127,67811,164],{"class":147},[127,67813,67814,67816,67818,67820,67822],{"class":129,"line":2196},[127,67815,55319],{"class":154},[127,67817,158],{"class":147},[127,67819,64233],{"class":154},[127,67821,291],{"class":290},[127,67823,164],{"class":147},[127,67825,67826,67828,67830,67832,67834],{"class":129,"line":2217},[127,67827,55241],{"class":154},[127,67829,158],{"class":147},[127,67831,1374],{"class":154},[127,67833,291],{"class":290},[127,67835,164],{"class":147},[127,67837,67838,67840,67842,67844,67846,67848,67850],{"class":129,"line":2222},[127,67839,62510],{"class":154},[127,67841,158],{"class":147},[127,67843,893],{"class":154},[127,67845,291],{"class":290},[127,67847,52058],{"class":154},[127,67849,62777],{"class":154},[127,67851,164],{"class":147},[127,67853,67854],{"class":129,"line":2236},[127,67855,2729],{"class":147},[127,67857,67858],{"class":129,"line":2241},[127,67859,2942],{"emptyLinePlaceholder":606},[127,67861,67862,67864],{"class":129,"line":2270},[127,67863,64278],{"class":143},[127,67865,148],{"class":147},[127,67867,67868,67870,67872,67874,67876],{"class":129,"line":2275},[127,67869,55305],{"class":154},[127,67871,158],{"class":147},[127,67873,986],{"class":154},[127,67875,1003],{"class":290},[127,67877,164],{"class":147},[127,67879,67880,67882,67884,67886,67888],{"class":129,"line":2292},[127,67881,55319],{"class":154},[127,67883,158],{"class":147},[127,67885,1581],{"class":154},[127,67887,291],{"class":290},[127,67889,164],{"class":147},[127,67891,67892,67894,67896,67898,67900],{"class":129,"line":2297},[127,67893,57893],{"class":154},[127,67895,158],{"class":147},[127,67897,1581],{"class":154},[127,67899,291],{"class":290},[127,67901,164],{"class":147},[127,67903,67904,67906,67908,67910],{"class":129,"line":2302},[127,67905,55543],{"class":154},[127,67907,158],{"class":147},[127,67909,52015],{"class":154},[127,67911,164],{"class":147},[127,67913,67914,67916,67918,67920],{"class":129,"line":2307},[127,67915,55554],{"class":154},[127,67917,158],{"class":147},[127,67919,52204],{"class":154},[127,67921,164],{"class":147},[127,67923,67924],{"class":129,"line":2321},[127,67925,2729],{"class":147},[127,67927,67928],{"class":129,"line":2326},[127,67929,2942],{"emptyLinePlaceholder":606},[127,67931,67932,67934,67936],{"class":129,"line":3119},[127,67933,64278],{"class":143},[127,67935,64351],{"class":140},[127,67937,148],{"class":147},[127,67939,67940,67942,67944,67946,67948],{"class":129,"line":3133},[127,67941,55456],{"class":154},[127,67943,158],{"class":147},[127,67945,1474],{"class":154},[127,67947,291],{"class":290},[127,67949,164],{"class":147},[127,67951,67952,67954,67956,67958],{"class":129,"line":3141},[127,67953,62867],{"class":154},[127,67955,158],{"class":147},[127,67957,64374],{"class":154},[127,67959,164],{"class":147},[127,67961,67962,67964,67966,67968,67970],{"class":129,"line":3146},[127,67963,62533],{"class":154},[127,67965,158],{"class":147},[127,67967,1374],{"class":154},[127,67969,291],{"class":290},[127,67971,164],{"class":147},[127,67973,67974],{"class":129,"line":3152},[127,67975,2729],{"class":147},[127,67977,67978],{"class":129,"line":3158},[127,67979,2942],{"emptyLinePlaceholder":606},[127,67981,67982,67984,67986],{"class":129,"line":3163},[127,67983,64278],{"class":143},[127,67985,61825],{"class":140},[127,67987,148],{"class":147},[127,67989,67990,67992,67994,67996],{"class":129,"line":8490},[127,67991,55267],{"class":154},[127,67993,158],{"class":147},[127,67995,469],{"class":154},[127,67997,164],{"class":147},[127,67999,68000,68002,68004,68006],{"class":129,"line":8514},[127,68001,55543],{"class":154},[127,68003,158],{"class":147},[127,68005,52015],{"class":154},[127,68007,164],{"class":147},[127,68009,68010,68012,68014,68016],{"class":129,"line":8519},[127,68011,55554],{"class":154},[127,68013,158],{"class":147},[127,68015,52117],{"class":154},[127,68017,164],{"class":147},[127,68019,68020],{"class":129,"line":8525},[127,68021,2729],{"class":147},[127,68023,68024],{"class":129,"line":8552},[127,68025,2942],{"emptyLinePlaceholder":606},[127,68027,68028,68030,68032,68034],{"class":129,"line":8557},[127,68029,64278],{"class":143},[127,68031,61825],{"class":140},[127,68033,55609],{"class":140},[127,68035,148],{"class":147},[127,68037,68038,68040,68042,68044,68046,68048],{"class":129,"line":8563},[127,68039,55241],{"class":154},[127,68041,158],{"class":147},[127,68043,867],{"class":154},[127,68045,9492],{"class":154},[127,68047,291],{"class":290},[127,68049,164],{"class":147},[127,68051,68052,68054,68056,68058,68060],{"class":129,"line":8575},[127,68053,55456],{"class":154},[127,68055,158],{"class":147},[127,68057,1224],{"class":154},[127,68059,291],{"class":290},[127,68061,164],{"class":147},[127,68063,68064],{"class":129,"line":8587},[127,68065,2729],{"class":147},[127,68067,68068],{"class":129,"line":8599},[127,68069,2942],{"emptyLinePlaceholder":606},[127,68071,68072,68074,68076,68078,68080],{"class":129,"line":10258},[127,68073,64278],{"class":143},[127,68075,61825],{"class":140},[127,68077,55609],{"class":140},[127,68079,1943],{"class":140},[127,68081,148],{"class":147},[127,68083,68084,68086,68088,68090],{"class":129,"line":10283},[127,68085,64503],{"class":154},[127,68087,158],{"class":147},[127,68089,469],{"class":154},[127,68091,164],{"class":147},[127,68093,68094,68096,68098,68100,68102,68104,68106],{"class":129,"line":10306},[127,68095,62765],{"class":154},[127,68097,158],{"class":147},[127,68099,530],{"class":154},[127,68101,291],{"class":290},[127,68103,52058],{"class":154},[127,68105,64524],{"class":154},[127,68107,164],{"class":147},[127,68109,68110,68112,68114,68116],{"class":129,"line":10330},[127,68111,57950],{"class":154},[127,68113,158],{"class":147},[127,68115,62902],{"class":154},[127,68117,164],{"class":147},[127,68119,68120],{"class":129,"line":10335},[127,68121,2729],{"class":147},[127,68123,68124],{"class":129,"line":10340},[127,68125,2942],{"emptyLinePlaceholder":606},[127,68127,68128,68130,68132,68134,68136,68138],{"class":129,"line":10345},[127,68129,64278],{"class":143},[127,68131,61825],{"class":140},[127,68133,55609],{"class":140},[127,68135,1943],{"class":140},[127,68137,64557],{"class":143},[127,68139,148],{"class":147},[127,68141,68142,68144,68146,68148],{"class":129,"line":10354},[127,68143,62324],{"class":154},[127,68145,158],{"class":147},[127,68147,64568],{"class":154},[127,68149,164],{"class":147},[127,68151,68152,68154,68156,68158],{"class":129,"line":10359},[127,68153,57950],{"class":154},[127,68155,158],{"class":147},[127,68157,64568],{"class":154},[127,68159,164],{"class":147},[127,68161,68162],{"class":129,"line":10365},[127,68163,2729],{"class":147},[127,68165,68166],{"class":129,"line":10386},[127,68167,2942],{"emptyLinePlaceholder":606},[127,68169,68170,68172],{"class":129,"line":10392},[127,68171,64593],{"class":143},[127,68173,148],{"class":147},[127,68175,68176,68178,68180,68182,68184,68186],{"class":129,"line":10406},[127,68177,55230],{"class":154},[127,68179,158],{"class":147},[127,68181,867],{"class":154},[127,68183,64606],{"class":154},[127,68185,291],{"class":290},[127,68187,164],{"class":147},[127,68189,68190],{"class":129,"line":10412},[127,68191,2729],{"class":147},[127,68193,68194],{"class":129,"line":10439},[127,68195,2942],{"emptyLinePlaceholder":606},[127,68197,68198,68200,68202],{"class":129,"line":10448},[127,68199,64593],{"class":143},[127,68201,62707],{"class":143},[127,68203,148],{"class":147},[127,68205,68206,68208,68210,68212],{"class":129,"line":10454},[127,68207,55543],{"class":154},[127,68209,158],{"class":147},[127,68211,469],{"class":154},[127,68213,164],{"class":147},[127,68215,68216],{"class":129,"line":10462},[127,68217,2729],{"class":147},[127,68219,68220],{"class":129,"line":10467},[127,68221,2942],{"emptyLinePlaceholder":606},[127,68223,68224,68226,68229],{"class":129,"line":17145},[127,68225,64593],{"class":143},[127,68227,68228],{"class":143}," .active",[127,68230,148],{"class":147},[127,68232,68233,68235,68237,68239],{"class":129,"line":17151},[127,68234,55543],{"class":154},[127,68236,158],{"class":147},[127,68238,61402],{"class":154},[127,68240,164],{"class":147},[127,68242,68243],{"class":129,"line":17174},[127,68244,2729],{"class":147},[127,68246,68247,68249,68251],{"class":129,"line":17180},[127,68248,52952],{"class":147},[127,68250,575],{"class":140},[127,68252,51846],{"class":147},[127,68254,68255,68257,68259],{"class":129,"line":17203},[127,68256,52321],{"class":147},[127,68258,51873],{"class":140},[127,68260,51846],{"class":147},[127,68262,68263],{"class":129,"line":17217},[127,68264,2942],{"emptyLinePlaceholder":606},[127,68266,68267,68269,68271],{"class":129,"line":17237},[127,68268,1584],{"class":147},[127,68270,275],{"class":140},[127,68272,51846],{"class":147},[127,68274,68275,68277,68279,68281,68283,68285],{"class":129,"line":17243},[127,68276,52679],{"class":147},[127,68278,52147],{"class":140},[127,68280,54021],{"class":143},[127,68282,725],{"class":147},[127,68284,64708],{"class":781},[127,68286,51846],{"class":147},[127,68288,68289,68291,68293,68295,68297,68299],{"class":129,"line":17254},[127,68290,51880],{"class":147},[127,68292,52147],{"class":140},[127,68294,54021],{"class":143},[127,68296,725],{"class":147},[127,68298,64723],{"class":781},[127,68300,51846],{"class":147},[127,68302,68303,68305,68307,68309,68311],{"class":129,"line":17277},[127,68304,55768],{"class":147},[127,68306,62],{"class":140},[127,68308,64734],{"class":147},[127,68310,62],{"class":140},[127,68312,51846],{"class":147},[127,68314,68315,68317,68319],{"class":129,"line":17299},[127,68316,55768],{"class":147},[127,68318,1681],{"class":140},[127,68320,51846],{"class":147},[127,68322,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345,68347,68350,68352,68354,68356,68358],{"class":129,"line":17304},[127,68324,55836],{"class":147},[127,68326,635],{"class":140},[127,68328,61585],{"class":147},[127,68330,457],{"class":140},[127,68332,54021],{"class":143},[127,68334,725],{"class":147},[127,68336,60239],{"class":781},[127,68338,61590],{"class":143},[127,68340,725],{"class":147},[127,68342,64769],{"class":781},[127,68344,54486],{"class":143},[127,68346,725],{"class":147},[127,68348,68349],{"class":781},"\"0\"",[127,68351,64772],{"class":147},[127,68353,457],{"class":140},[127,68355,55848],{"class":147},[127,68357,635],{"class":140},[127,68359,51846],{"class":147},[127,68361,68362,68364,68366,68368,68370,68372,68374,68376,68378,68380,68382,68384,68386,68388,68390],{"class":129,"line":17310},[127,68363,55836],{"class":147},[127,68365,635],{"class":140},[127,68367,61585],{"class":147},[127,68369,457],{"class":140},[127,68371,61590],{"class":143},[127,68373,725],{"class":147},[127,68375,64769],{"class":781},[127,68377,54486],{"class":143},[127,68379,725],{"class":147},[127,68381,4220],{"class":781},[127,68383,64799],{"class":147},[127,68385,457],{"class":140},[127,68387,55848],{"class":147},[127,68389,635],{"class":140},[127,68391,51846],{"class":147},[127,68393,68394,68396,68398,68400,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420,68422],{"class":129,"line":17324},[127,68395,55836],{"class":147},[127,68397,635],{"class":140},[127,68399,61585],{"class":147},[127,68401,457],{"class":140},[127,68403,61590],{"class":143},[127,68405,725],{"class":147},[127,68407,64769],{"class":781},[127,68409,54486],{"class":143},[127,68411,725],{"class":147},[127,68413,4243],{"class":781},[127,68415,64826],{"class":147},[127,68417,457],{"class":140},[127,68419,55848],{"class":147},[127,68421,635],{"class":140},[127,68423,51846],{"class":147},[127,68425,68426,68428,68430,68432,68434,68436,68438,68440,68442,68444,68446,68448,68450,68452,68454],{"class":129,"line":17337},[127,68427,55836],{"class":147},[127,68429,635],{"class":140},[127,68431,61585],{"class":147},[127,68433,457],{"class":140},[127,68435,61590],{"class":143},[127,68437,725],{"class":147},[127,68439,64769],{"class":781},[127,68441,54486],{"class":143},[127,68443,725],{"class":147},[127,68445,4256],{"class":781},[127,68447,64853],{"class":147},[127,68449,457],{"class":140},[127,68451,55848],{"class":147},[127,68453,635],{"class":140},[127,68455,51846],{"class":147},[127,68457,68458,68460,68462,68464,68466,68468,68470,68472,68474,68476,68478,68480,68482,68484,68486],{"class":129,"line":17342},[127,68459,55836],{"class":147},[127,68461,635],{"class":140},[127,68463,61585],{"class":147},[127,68465,457],{"class":140},[127,68467,61590],{"class":143},[127,68469,725],{"class":147},[127,68471,64769],{"class":781},[127,68473,54486],{"class":143},[127,68475,725],{"class":147},[127,68477,4269],{"class":781},[127,68479,64880],{"class":147},[127,68481,457],{"class":140},[127,68483,55848],{"class":147},[127,68485,635],{"class":140},[127,68487,51846],{"class":147},[127,68489,68490,68492,68494],{"class":129,"line":17356},[127,68491,55941],{"class":147},[127,68493,1681],{"class":140},[127,68495,51846],{"class":147},[127,68497,68498,68500,68502],{"class":129,"line":17361},[127,68499,52312],{"class":147},[127,68501,52147],{"class":140},[127,68503,51846],{"class":147},[127,68505,68506,68508,68510,68512,68514,68516],{"class":129,"line":17367},[127,68507,51880],{"class":147},[127,68509,52147],{"class":140},[127,68511,54021],{"class":143},[127,68513,725],{"class":147},[127,68515,64917],{"class":781},[127,68517,51846],{"class":147},[127,68519,68520,68522,68524,68526,68528,68530,68532,68534,68536,68538,68540,68542,68544,68546,68548,68550],{"class":129,"line":17372},[127,68521,55768],{"class":147},[127,68523,52147],{"class":140},[127,68525,54021],{"class":143},[127,68527,725],{"class":147},[127,68529,64932],{"class":781},[127,68531,61585],{"class":147},[127,68533,23],{"class":140},[127,68535,55773],{"class":143},[127,68537,725],{"class":147},[127,68539,64943],{"class":781},[127,68541,55781],{"class":143},[127,68543,725],{"class":147},[127,68545,8194],{"class":781},[127,68547,64952],{"class":147},[127,68549,52147],{"class":140},[127,68551,51846],{"class":147},[127,68553,68554,68556,68558,68560,68562,68564,68566,68568,68570,68572,68574,68576,68578,68580,68582,68584],{"class":129,"line":17386},[127,68555,55768],{"class":147},[127,68557,52147],{"class":140},[127,68559,54021],{"class":143},[127,68561,725],{"class":147},[127,68563,63156],{"class":781},[127,68565,61585],{"class":147},[127,68567,23],{"class":140},[127,68569,55773],{"class":143},[127,68571,725],{"class":147},[127,68573,64979],{"class":781},[127,68575,55781],{"class":143},[127,68577,725],{"class":147},[127,68579,8194],{"class":781},[127,68581,64952],{"class":147},[127,68583,52147],{"class":140},[127,68585,51846],{"class":147},[127,68587,68588,68590,68592,68594,68596,68598,68600,68602,68604,68606,68608,68610,68612,68614,68616,68618],{"class":129,"line":17391},[127,68589,55768],{"class":147},[127,68591,52147],{"class":140},[127,68593,54021],{"class":143},[127,68595,725],{"class":147},[127,68597,63156],{"class":781},[127,68599,61585],{"class":147},[127,68601,23],{"class":140},[127,68603,55773],{"class":143},[127,68605,725],{"class":147},[127,68607,65014],{"class":781},[127,68609,55781],{"class":143},[127,68611,725],{"class":147},[127,68613,8194],{"class":781},[127,68615,64952],{"class":147},[127,68617,52147],{"class":140},[127,68619,51846],{"class":147},[127,68621,68622,68624,68626,68628,68630,68632,68634,68636,68638,68640,68642,68644,68646,68648,68650,68652],{"class":129,"line":17396},[127,68623,55768],{"class":147},[127,68625,52147],{"class":140},[127,68627,54021],{"class":143},[127,68629,725],{"class":147},[127,68631,63156],{"class":781},[127,68633,61585],{"class":147},[127,68635,23],{"class":140},[127,68637,55773],{"class":143},[127,68639,725],{"class":147},[127,68641,65049],{"class":781},[127,68643,55781],{"class":143},[127,68645,725],{"class":147},[127,68647,8194],{"class":781},[127,68649,64952],{"class":147},[127,68651,52147],{"class":140},[127,68653,51846],{"class":147},[127,68655,68656,68658,68660,68662,68664,68666,68668,68670,68672,68674,68676,68678,68680,68682,68684,68686],{"class":129,"line":17410},[127,68657,55768],{"class":147},[127,68659,52147],{"class":140},[127,68661,54021],{"class":143},[127,68663,725],{"class":147},[127,68665,63156],{"class":781},[127,68667,61585],{"class":147},[127,68669,23],{"class":140},[127,68671,55773],{"class":143},[127,68673,725],{"class":147},[127,68675,65084],{"class":781},[127,68677,55781],{"class":143},[127,68679,725],{"class":147},[127,68681,8194],{"class":781},[127,68683,64952],{"class":147},[127,68685,52147],{"class":140},[127,68687,51846],{"class":147},[127,68689,68690,68692,68694],{"class":129,"line":17422},[127,68691,52312],{"class":147},[127,68693,52147],{"class":140},[127,68695,51846],{"class":147},[127,68697,68698,68700,68702],{"class":129,"line":17427},[127,68699,52952],{"class":147},[127,68701,52147],{"class":140},[127,68703,51846],{"class":147},[127,68705,68706,68708,68710],{"class":129,"line":17440},[127,68707,52679],{"class":147},[127,68709,52348],{"class":140},[127,68711,51846],{"class":147},[127,68713,68714],{"class":129,"line":17445},[127,68715,68716],{"class":133},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[127,68718,68719],{"class":129,"line":17450},[127,68720,68721],{"class":133},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[127,68723,68724,68726,68728,68730,68732,68734,68736,68739],{"class":129,"line":17455},[127,68725,11763],{"class":290},[127,68727,61825],{"class":154},[127,68729,14106],{"class":290},[127,68731,54931],{"class":147},[127,68733,54934],{"class":143},[127,68735,681],{"class":147},[127,68737,68738],{"class":781},"'.tab-nav ul'",[127,68740,687],{"class":147},[127,68742,68743],{"class":129,"line":17468},[127,68744,68745],{"class":133},"    \u002F\u002F 2.添加事件\n",[127,68747,68748,68750,68752,68754,68756,68758,68760,68762,68764],{"class":129,"line":17473},[127,68749,67487],{"class":147},[127,68751,58346],{"class":143},[127,68753,681],{"class":147},[127,68755,58351],{"class":781},[127,68757,12977],{"class":147},[127,68759,54984],{"class":290},[127,68761,2201],{"class":147},[127,68763,752],{"class":5758},[127,68765,12984],{"class":147},[127,68767,68768,68770,68772],{"class":129,"line":33173},[127,68769,58777],{"class":147},[127,68771,67543],{"class":143},[127,68773,67546],{"class":147},[127,68775,68776],{"class":129,"line":33179},[127,68777,68778],{"class":133},"      \u002F\u002Fe.targer是我们点击的对象\n",[127,68780,68781,68783,68785,68787,68790],{"class":129,"line":33185},[127,68782,55015],{"class":290},[127,68784,67567],{"class":147},[127,68786,55021],{"class":290},[127,68788,68789],{"class":781}," 'A'",[127,68791,12984],{"class":147},[127,68793,68794,68796,68798,68800,68803,68805,68807,68809,68811],{"class":129,"line":33191},[127,68795,52460],{"class":147},[127,68797,54934],{"class":143},[127,68799,681],{"class":147},[127,68801,68802],{"class":781},"'.active'",[127,68804,57537],{"class":147},[127,68806,57540],{"class":143},[127,68808,681],{"class":147},[127,68810,65247],{"class":781},[127,68812,687],{"class":147},[127,68814,68815,68818,68820,68822,68824],{"class":129,"line":33197},[127,68816,68817],{"class":147},"        e.target.classList.",[127,68819,5876],{"class":143},[127,68821,681],{"class":147},[127,68823,65247],{"class":781},[127,68825,687],{"class":147},[127,68827,68828],{"class":129,"line":33208},[127,68829,2942],{"emptyLinePlaceholder":606},[127,68831,68832],{"class":129,"line":33214},[127,68833,68834],{"class":133},"        \u002F\u002F 下面大盒子模块\n",[127,68836,68837],{"class":129,"line":33234},[127,68838,68839],{"class":133},"        \u002F\u002F console.log(e.target.dataset.id)\n",[127,68841,68842,68844,68846,68848,68850],{"class":129,"line":33240},[127,68843,61803],{"class":290},[127,68845,3574],{"class":154},[127,68847,14106],{"class":290},[127,68849,46106],{"class":290},[127,68851,68852],{"class":147},"e.target.dataset.id\n",[127,68854,68855,68857,68859,68861,68863,68865,68867,68869,68871],{"class":129,"line":33251},[127,68856,52460],{"class":147},[127,68858,54934],{"class":143},[127,68860,681],{"class":147},[127,68862,65295],{"class":781},[127,68864,57537],{"class":147},[127,68866,57540],{"class":143},[127,68868,681],{"class":147},[127,68870,65247],{"class":781},[127,68872,687],{"class":147},[127,68874,68875,68877,68879,68881,68883,68885,68887,68889,68891,68893,68895,68897,68899],{"class":129,"line":33257},[127,68876,52460],{"class":147},[127,68878,54934],{"class":143},[127,68880,681],{"class":147},[127,68882,65321],{"class":781},[127,68884,1116],{"class":147},[127,68886,46106],{"class":290},[127,68888,25659],{"class":154},[127,68890,57566],{"class":781},[127,68892,57537],{"class":147},[127,68894,5876],{"class":143},[127,68896,681],{"class":147},[127,68898,65247],{"class":781},[127,68900,687],{"class":147},[127,68902,68903],{"class":129,"line":33263},[127,68904,2942],{"emptyLinePlaceholder":606},[127,68906,68907],{"class":129,"line":33269},[127,68908,52933],{"class":147},[127,68910,68911],{"class":129,"line":33275},[127,68912,34001],{"class":147},[127,68914,68915,68917,68919],{"class":129,"line":33281},[127,68916,52952],{"class":147},[127,68918,52348],{"class":140},[127,68920,51846],{"class":147},[127,68922,68923,68925,68927],{"class":129,"line":33287},[127,68924,52321],{"class":147},[127,68926,275],{"class":140},[127,68928,51846],{"class":147},[127,68930,68931],{"class":129,"line":33293},[127,68932,2942],{"emptyLinePlaceholder":606},[127,68934,68935,68937,68939],{"class":129,"line":33313},[127,68936,52321],{"class":147},[127,68938,51175],{"class":140},[127,68940,51846],{"class":147},[62,68942,68944],{"id":68943},"_333-页面加载事件","3.3.3 页面加载事件",[632,68946,68947],{},[635,68948,68949],{},"load",[19,68951,68952],{},[23,68953],{"alt":122,"src":68954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68956,68957],{},"window代表整个窗口，比document还要大",[19,68959,68960],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68962,68963],{},"img.addEventListener('load', function () {",[19,68965,68966],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68968,52999],{},[632,68970,68971],{"start":137},[635,68972,68973],{},"DOMContentLoaded",[19,68975,68976],{},[23,68977],{"alt":122,"src":68978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68980,68981],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[62,68983,68985],{"id":68984},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68987,68988],{},[23,68989],{"alt":122,"src":68990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68992,68993],{},[23,68994],{"alt":122,"src":68995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68997,68998],{},[23,68999],{"alt":122,"src":69000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69002,69003],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69005,69006],{},"获得的是数字型数据，不带单位",[19,69008,69009],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69011,69012],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69014,69015],{},"它是通过document.documentElement来获取",[19,69017,69018],{},[23,69019],{"alt":122,"src":69020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69022,69023],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[62,69025,69027],{"id":69026},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69029,69030],{},[23,69031],{"alt":122,"src":69032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69034,69035],{},[23,69036],{"alt":122,"src":69037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[62,69039,69041],{"id":69040},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69043,69044],{},[23,69045],{"alt":122,"src":69046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69048,69049],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69051,69052],{},[23,69053],{"alt":122,"src":69054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69056,69057],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69059,69060],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69062,69063],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69065,69066],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69068,69069],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69071,69072],{},[23,69073],{"alt":122,"src":69074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69076,69077],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69079,69080],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69082,69083],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69085,69086],{},"e.pageX-box.getBoundingClientRect()",[62,69088,69090],{"id":69089},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69092,69093],{},[23,69094],{"alt":122,"src":69095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69097,69098],{},"这个是相对于视口来说的，它是个方法，不是属性值",[62,69100,69102],{"id":69101},"_338-总结","3.3.8 总结",[19,69104,69105],{},[23,69106],{"alt":122,"src":69107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69109,69110],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69112,69113],{},"修改盒子的宽高只能通过width和height来实现",[62,69115,69117],{"id":69116},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[117,69119,69121],{"className":51173,"code":69120,"language":51175,"meta":122,"style":122},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[124,69122,69123,69128,69133,69138,69143],{"__ignoreMap":122},[127,69124,69125],{"class":129,"line":130},[127,69126,69127],{"class":147},"\u002F* 页面滑动 *\u002F\n",[127,69129,69130],{"class":129,"line":137},[127,69131,69132],{"class":147},"html {\n",[127,69134,69135],{"class":129,"line":151},[127,69136,69137],{"class":147},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[127,69139,69140],{"class":129,"line":167},[127,69141,69142],{"class":147},"  scroll-behavior: smooth;\n",[127,69144,69145],{"class":129,"line":415},[127,69146,170],{"class":147},[19,69148,69149],{},"默认是auto",[62,69151,69153],{"id":69152},"_3310-日期对象","3.3.10 日期对象",[22539,69155,69157],{"id":69156},"_33101-实例化","3.3.10.1 实例化",[19,69159,69160],{},[23,69161],{"alt":122,"src":69162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22539,69164,69166],{"id":69165},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69168,69169],{},[23,69170],{"alt":122,"src":69171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69173,69174],{},"月份+1",[19,69176,69177],{},"老外认为第一天为0，星期天",[19,69179,69180],{},"方法使用的时候必须要跟括号",[19,69182,69183],{},"快速获得日期",[19,69185,69186],{},"\u002F\u002F 得到年月日",[19,69188,69189],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69191,69192],{},"\u002F\u002F 得到当地日期",[19,69194,69195],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69197,69198],{},"\u002F\u002F 得到当地时间",[19,69200,69201],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69203,69204],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69206,69207],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52348,69209,69210],{},"\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",[19,69212,69213],{},"学会去封装函数！",[22539,69215,69217],{"id":69216},"_33103-时间戳","3.3.10.3 时间戳",[19,69219,69220],{},[23,69221],{"alt":122,"src":69222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69224,69225],{},[23,69226],{"alt":122,"src":69227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69229,69230],{},"三种方法记住一个就可以",[62,69232,69234],{"id":69233},"_3311-节点操作","3.3.11 节点操作",[22539,69236,69238],{"id":69237},"_33111-dom节点","3.3.11.1 DOM节点",[19,69240,69241],{},[23,69242],{"alt":122,"src":69243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69245,69246],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22539,69248,69250],{"id":69249},"_33112-查找节点","3.3.11.2 查找节点",[19,69252,69253],{},"前边的document.querySelector()是获取的元素",[19,69255,69256],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69258,69259],{},[23,69260],{"alt":122,"src":69261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[632,69263,69264],{},[635,69265,69266],{},"父节点",[19,69268,69269],{},[23,69270],{"alt":122,"src":69271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[632,69273,69274],{"start":137},[635,69275,69276],{},"子节点",[19,69278,69279],{},[23,69280],{"alt":122,"src":69281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69283,69284],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69286,69287],{},"children获得的是伪数组，是亲儿子",[632,69289,69290],{"start":151},[635,69291,69292],{},"兄弟节点",[19,69294,69295],{},[23,69296],{"alt":122,"src":69297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22539,69299,69301],{"id":69300},"_33113-增加节点","3.3.11.3 增加节点",[19,69303,69304],{},[23,69305],{"alt":122,"src":69306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69308,69309],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69311,69312],{},[23,69313],{"alt":122,"src":69314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69316,69317],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69319,69320],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69322,69323],{},"例：",[52348,69325,69326],{},"\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",[19,69328,69329],{},[23,69330],{"alt":122,"src":69331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69333,69334],{},"false只克隆标签，里边的内容不会克隆过来",[117,69336,69338],{"className":51173,"code":69337,"language":51175,"meta":122,"style":122},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[124,69339,69340],{"__ignoreMap":122},[127,69341,69342],{"class":129,"line":130},[127,69343,69337],{"class":147},[22539,69345,69347],{"id":69346},"_33114-删除节点","3.3.11.4 删除节点",[19,69349,69350],{},[23,69351],{"alt":122,"src":69352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69354,69355],{},"父亲删儿子",[19,69357,69358],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[62,69360,69362],{"id":69361},"_3312-m端事件","3.3.12 M端事件",[19,69364,69365],{},"M端就是移动端",[19,69367,69368],{},[23,69369],{"alt":122,"src":69370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[62,69372,69374],{"id":69373},"_3313-插件","3.3.13 插件",[19,69376,69377],{},"要熟悉官网！！！",[19,69379,69380],{},[457,69381,69382],{"href":69382,"rel":69383},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24405],[19,69385,69386],{},[457,69387,69388],{"href":69388,"rel":69389},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24405],[62,69391,69393],{"id":69392},"_3314-学生信息表","3.3.14 学生信息表",[632,69395,69396,69399,69402,69405,69408,69411,69414,69417],{},[635,69397,69398],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[635,69400,69401],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[635,69403,69404],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[635,69406,69407],{},"用好表单元素自带的属性，value,name等",[635,69409,69410],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[635,69412,69413],{},"不要忘记事件对象",[635,69415,69416],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[635,69418,69419],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69421,69422],{},"结构：",[117,69424,69426],{"className":51173,"code":69425,"language":51175,"meta":122,"style":122},"\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",[124,69427,69428,69438,69452,69456,69464,69478,69498,69519,69532,69556,69564,69568,69576,69589,69610,69638,69666,69671,69693,69713,69732,69740,69768,69790,69810,69830,69850,69870,69890,69898,69918,69926,69930,69943,69951,69959,69967,69980,69993,70006,70019,70032,70045,70058,70066,70074,70082,70087,70092,70097,70102,70107,70112,70117,70122,70127,70132,70137,70142,70147,70155,70163,70171,70175,70195,70214,70234,70254,70274,70294,70298,70303,70323,70328,70338,70343,70348,70368,70390,70395,70405,70409,70413,70418,70423,70452,70466,70481,70485,70489,70493,70498,70509,70522,70527,70532,70537,70542,70547,70551,70556,70561,70570,70575,70580,70592,70597,70604,70608,70613,70623,70628,70638,70643,70671,70692,70702,70722,70740,70757,70774,70791,70808,70812,70822,70827,70832,70837,70848,70852,70856,70860,70865,70870,70891,70903,70908,70913,70918,70932,70937,70944,70948,70952,70960,70964,70972,70976],{"__ignoreMap":122},[127,69429,69430,69432,69434,69436],{"class":129,"line":130},[127,69431,51837],{"class":147},[127,69433,51840],{"class":140},[127,69435,51843],{"class":143},[127,69437,51846],{"class":147},[127,69439,69440,69442,69444,69446,69448,69450],{"class":129,"line":137},[127,69441,1584],{"class":147},[127,69443,51175],{"class":140},[127,69445,51855],{"class":143},[127,69447,725],{"class":147},[127,69449,51860],{"class":781},[127,69451,51846],{"class":147},[127,69453,69454],{"class":129,"line":151},[127,69455,2942],{"emptyLinePlaceholder":606},[127,69457,69458,69460,69462],{"class":129,"line":167},[127,69459,1584],{"class":147},[127,69461,51873],{"class":140},[127,69463,51846],{"class":147},[127,69465,69466,69468,69470,69472,69474,69476],{"class":129,"line":415},[127,69467,52679],{"class":147},[127,69469,51883],{"class":140},[127,69471,51886],{"class":143},[127,69473,725],{"class":147},[127,69475,51891],{"class":781},[127,69477,59660],{"class":147},[127,69479,69480,69482,69484,69486,69488,69490,69492,69494,69496],{"class":129,"line":421},[127,69481,52679],{"class":147},[127,69483,51883],{"class":140},[127,69485,15462],{"class":143},[127,69487,725],{"class":147},[127,69489,51930],{"class":781},[127,69491,51910],{"class":143},[127,69493,725],{"class":147},[127,69495,51937],{"class":781},[127,69497,59660],{"class":147},[127,69499,69500,69502,69504,69506,69508,69510,69512,69514,69517],{"class":129,"line":1766},[127,69501,52679],{"class":147},[127,69503,51883],{"class":140},[127,69505,51902],{"class":143},[127,69507,725],{"class":147},[127,69509,51907],{"class":781},[127,69511,51910],{"class":143},[127,69513,725],{"class":147},[127,69515,69516],{"class":781},"\"ie=edge\"",[127,69518,59660],{"class":147},[127,69520,69521,69523,69525,69528,69530],{"class":129,"line":1856},[127,69522,52679],{"class":147},[127,69524,51946],{"class":140},[127,69526,69527],{"class":147},">学生信息管理\u003C\u002F",[127,69529,51946],{"class":140},[127,69531,51846],{"class":147},[127,69533,69534,69536,69539,69542,69544,69547,69549,69551,69554],{"class":129,"line":1862},[127,69535,52679],{"class":147},[127,69537,69538],{"class":140},"link",[127,69540,69541],{"class":143}," rel",[127,69543,725],{"class":147},[127,69545,69546],{"class":781},"\"stylesheet\"",[127,69548,61590],{"class":143},[127,69550,725],{"class":147},[127,69552,69553],{"class":781},"\"css\u002Findex.css\"",[127,69555,59660],{"class":147},[127,69557,69558,69560,69562],{"class":129,"line":1874},[127,69559,52321],{"class":147},[127,69561,51873],{"class":140},[127,69563,51846],{"class":147},[127,69565,69566],{"class":129,"line":2155},[127,69567,2942],{"emptyLinePlaceholder":606},[127,69569,69570,69572,69574],{"class":129,"line":2160},[127,69571,1584],{"class":147},[127,69573,275],{"class":140},[127,69575,51846],{"class":147},[127,69577,69578,69580,69582,69585,69587],{"class":129,"line":2166},[127,69579,52679],{"class":147},[127,69581,10],{"class":140},[127,69583,69584],{"class":147},">新增学员\u003C\u002F",[127,69586,10],{"class":140},[127,69588,51846],{"class":147},[127,69590,69591,69593,69595,69597,69599,69601,69604,69606,69608],{"class":129,"line":2171},[127,69592,52679],{"class":147},[127,69594,67158],{"class":140},[127,69596,54021],{"class":143},[127,69598,725],{"class":147},[127,69600,63197],{"class":781},[127,69602,69603],{"class":143}," autocomplete",[127,69605,725],{"class":147},[127,69607,32316],{"class":781},[127,69609,51846],{"class":147},[127,69611,69612,69615,69617,69619,69621,69623,69625,69627,69630,69632,69634,69636],{"class":129,"line":2185},[127,69613,69614],{"class":147},"    姓名：\u003C",[127,69616,54356],{"class":140},[127,69618,54359],{"class":143},[127,69620,725],{"class":147},[127,69622,63232],{"class":781},[127,69624,54021],{"class":143},[127,69626,725],{"class":147},[127,69628,69629],{"class":781},"\"uname\"",[127,69631,15462],{"class":143},[127,69633,725],{"class":147},[127,69635,69629],{"class":781},[127,69637,59660],{"class":147},[127,69639,69640,69643,69645,69647,69649,69651,69653,69655,69658,69660,69662,69664],{"class":129,"line":2190},[127,69641,69642],{"class":147},"    年龄：\u003C",[127,69644,54356],{"class":140},[127,69646,54359],{"class":143},[127,69648,725],{"class":147},[127,69650,63232],{"class":781},[127,69652,54021],{"class":143},[127,69654,725],{"class":147},[127,69656,69657],{"class":781},"\"age\"",[127,69659,15462],{"class":143},[127,69661,725],{"class":147},[127,69663,69657],{"class":781},[127,69665,59660],{"class":147},[127,69667,69668],{"class":129,"line":2196},[127,69669,69670],{"class":147},"    性别:\n",[127,69672,69673,69675,69678,69680,69682,69685,69687,69689,69691],{"class":129,"line":2217},[127,69674,51880],{"class":147},[127,69676,69677],{"class":140},"select",[127,69679,15462],{"class":143},[127,69681,725],{"class":147},[127,69683,69684],{"class":781},"\"gender\"",[127,69686,54021],{"class":143},[127,69688,725],{"class":147},[127,69690,69684],{"class":781},[127,69692,51846],{"class":147},[127,69694,69695,69697,69700,69702,69704,69706,69709,69711],{"class":129,"line":2222},[127,69696,55768],{"class":147},[127,69698,69699],{"class":140},"option",[127,69701,67184],{"class":143},[127,69703,725],{"class":147},[127,69705,10503],{"class":781},[127,69707,69708],{"class":147},">男\u003C\u002F",[127,69710,69699],{"class":140},[127,69712,51846],{"class":147},[127,69714,69715,69717,69719,69721,69723,69725,69728,69730],{"class":129,"line":2236},[127,69716,55768],{"class":147},[127,69718,69699],{"class":140},[127,69720,67184],{"class":143},[127,69722,725],{"class":147},[127,69724,10572],{"class":781},[127,69726,69727],{"class":147},">女\u003C\u002F",[127,69729,69699],{"class":140},[127,69731,51846],{"class":147},[127,69733,69734,69736,69738],{"class":129,"line":2241},[127,69735,52312],{"class":147},[127,69737,69677],{"class":140},[127,69739,51846],{"class":147},[127,69741,69742,69745,69747,69749,69751,69753,69755,69757,69760,69762,69764,69766],{"class":129,"line":2270},[127,69743,69744],{"class":147},"    薪资：\u003C",[127,69746,54356],{"class":140},[127,69748,54359],{"class":143},[127,69750,725],{"class":147},[127,69752,63232],{"class":781},[127,69754,54021],{"class":143},[127,69756,725],{"class":147},[127,69758,69759],{"class":781},"\"salary\"",[127,69761,15462],{"class":143},[127,69763,725],{"class":147},[127,69765,69759],{"class":781},[127,69767,59660],{"class":147},[127,69769,69770,69773,69775,69777,69779,69782,69784,69786,69788],{"class":129,"line":2275},[127,69771,69772],{"class":147},"    就业城市：\u003C",[127,69774,69677],{"class":140},[127,69776,15462],{"class":143},[127,69778,725],{"class":147},[127,69780,69781],{"class":781},"\"city\"",[127,69783,54021],{"class":143},[127,69785,725],{"class":147},[127,69787,69781],{"class":781},[127,69789,51846],{"class":147},[127,69791,69792,69794,69796,69798,69800,69803,69806,69808],{"class":129,"line":2292},[127,69793,55768],{"class":147},[127,69795,69699],{"class":140},[127,69797,67184],{"class":143},[127,69799,725],{"class":147},[127,69801,69802],{"class":781},"\"北京\"",[127,69804,69805],{"class":147},">北京\u003C\u002F",[127,69807,69699],{"class":140},[127,69809,51846],{"class":147},[127,69811,69812,69814,69816,69818,69820,69823,69826,69828],{"class":129,"line":2297},[127,69813,55768],{"class":147},[127,69815,69699],{"class":140},[127,69817,67184],{"class":143},[127,69819,725],{"class":147},[127,69821,69822],{"class":781},"\"上海\"",[127,69824,69825],{"class":147},">上海\u003C\u002F",[127,69827,69699],{"class":140},[127,69829,51846],{"class":147},[127,69831,69832,69834,69836,69838,69840,69843,69846,69848],{"class":129,"line":2302},[127,69833,55768],{"class":147},[127,69835,69699],{"class":140},[127,69837,67184],{"class":143},[127,69839,725],{"class":147},[127,69841,69842],{"class":781},"\"广州\"",[127,69844,69845],{"class":147},">广州\u003C\u002F",[127,69847,69699],{"class":140},[127,69849,51846],{"class":147},[127,69851,69852,69854,69856,69858,69860,69863,69866,69868],{"class":129,"line":2307},[127,69853,55768],{"class":147},[127,69855,69699],{"class":140},[127,69857,67184],{"class":143},[127,69859,725],{"class":147},[127,69861,69862],{"class":781},"\"深圳\"",[127,69864,69865],{"class":147},">深圳\u003C\u002F",[127,69867,69699],{"class":140},[127,69869,51846],{"class":147},[127,69871,69872,69874,69876,69878,69880,69883,69886,69888],{"class":129,"line":2321},[127,69873,55768],{"class":147},[127,69875,69699],{"class":140},[127,69877,67184],{"class":143},[127,69879,725],{"class":147},[127,69881,69882],{"class":781},"\"曹县\"",[127,69884,69885],{"class":147},">曹县\u003C\u002F",[127,69887,69699],{"class":140},[127,69889,51846],{"class":147},[127,69891,69892,69894,69896],{"class":129,"line":2326},[127,69893,52312],{"class":147},[127,69895,69677],{"class":140},[127,69897,51846],{"class":147},[127,69899,69900,69902,69904,69906,69908,69911,69914,69916],{"class":129,"line":3119},[127,69901,51880],{"class":147},[127,69903,54422],{"class":140},[127,69905,54021],{"class":143},[127,69907,725],{"class":147},[127,69909,69910],{"class":781},"\"add\"",[127,69912,69913],{"class":147},">录入\u003C\u002F",[127,69915,54422],{"class":140},[127,69917,51846],{"class":147},[127,69919,69920,69922,69924],{"class":129,"line":3133},[127,69921,52952],{"class":147},[127,69923,67158],{"class":140},[127,69925,51846],{"class":147},[127,69927,69928],{"class":129,"line":3141},[127,69929,2942],{"emptyLinePlaceholder":606},[127,69931,69932,69934,69936,69939,69941],{"class":129,"line":3146},[127,69933,52679],{"class":147},[127,69935,10],{"class":140},[127,69937,69938],{"class":147},">就业榜\u003C\u002F",[127,69940,10],{"class":140},[127,69942,51846],{"class":147},[127,69944,69945,69947,69949],{"class":129,"line":3152},[127,69946,52679],{"class":147},[127,69948,814],{"class":140},[127,69950,51846],{"class":147},[127,69952,69953,69955,69957],{"class":129,"line":3158},[127,69954,51880],{"class":147},[127,69956,817],{"class":140},[127,69958,51846],{"class":147},[127,69960,69961,69963,69965],{"class":129,"line":3163},[127,69962,55768],{"class":147},[127,69964,820],{"class":140},[127,69966,51846],{"class":147},[127,69968,69969,69971,69973,69976,69978],{"class":129,"line":8490},[127,69970,55836],{"class":147},[127,69972,823],{"class":140},[127,69974,69975],{"class":147},">序号\u003C\u002F",[127,69977,823],{"class":140},[127,69979,51846],{"class":147},[127,69981,69982,69984,69986,69989,69991],{"class":129,"line":8514},[127,69983,55836],{"class":147},[127,69985,823],{"class":140},[127,69987,69988],{"class":147},">姓名\u003C\u002F",[127,69990,823],{"class":140},[127,69992,51846],{"class":147},[127,69994,69995,69997,69999,70002,70004],{"class":129,"line":8519},[127,69996,55836],{"class":147},[127,69998,823],{"class":140},[127,70000,70001],{"class":147},">年龄\u003C\u002F",[127,70003,823],{"class":140},[127,70005,51846],{"class":147},[127,70007,70008,70010,70012,70015,70017],{"class":129,"line":8525},[127,70009,55836],{"class":147},[127,70011,823],{"class":140},[127,70013,70014],{"class":147},">性别\u003C\u002F",[127,70016,823],{"class":140},[127,70018,51846],{"class":147},[127,70020,70021,70023,70025,70028,70030],{"class":129,"line":8552},[127,70022,55836],{"class":147},[127,70024,823],{"class":140},[127,70026,70027],{"class":147},">薪资\u003C\u002F",[127,70029,823],{"class":140},[127,70031,51846],{"class":147},[127,70033,70034,70036,70038,70041,70043],{"class":129,"line":8557},[127,70035,55836],{"class":147},[127,70037,823],{"class":140},[127,70039,70040],{"class":147},">就业城市\u003C\u002F",[127,70042,823],{"class":140},[127,70044,51846],{"class":147},[127,70046,70047,70049,70051,70054,70056],{"class":129,"line":8563},[127,70048,55836],{"class":147},[127,70050,823],{"class":140},[127,70052,70053],{"class":147},">操作\u003C\u002F",[127,70055,823],{"class":140},[127,70057,51846],{"class":147},[127,70059,70060,70062,70064],{"class":129,"line":8575},[127,70061,55941],{"class":147},[127,70063,820],{"class":140},[127,70065,51846],{"class":147},[127,70067,70068,70070,70072],{"class":129,"line":8587},[127,70069,52312],{"class":147},[127,70071,817],{"class":140},[127,70073,51846],{"class":147},[127,70075,70076,70078,70080],{"class":129,"line":8599},[127,70077,51880],{"class":147},[127,70079,860],{"class":140},[127,70081,51846],{"class":147},[127,70083,70084],{"class":129,"line":10258},[127,70085,70086],{"class":133},"      \u003C!-- \n",[127,70088,70089],{"class":129,"line":10283},[127,70090,70091],{"class":133},"        \u003Ctr>\n",[127,70093,70094],{"class":129,"line":10306},[127,70095,70096],{"class":133},"          \u003Ctd>1001\u003C\u002Ftd>\n",[127,70098,70099],{"class":129,"line":10330},[127,70100,70101],{"class":133},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[127,70103,70104],{"class":129,"line":10335},[127,70105,70106],{"class":133},"          \u003Ctd>19\u003C\u002Ftd>\n",[127,70108,70109],{"class":129,"line":10340},[127,70110,70111],{"class":133},"          \u003Ctd>男\u003C\u002Ftd>\n",[127,70113,70114],{"class":129,"line":10345},[127,70115,70116],{"class":133},"          \u003Ctd>15000\u003C\u002Ftd>\n",[127,70118,70119],{"class":129,"line":10354},[127,70120,70121],{"class":133},"          \u003Ctd>上海\u003C\u002Ftd>\n",[127,70123,70124],{"class":129,"line":10359},[127,70125,70126],{"class":133},"          \u003Ctd>\n",[127,70128,70129],{"class":129,"line":10365},[127,70130,70131],{"class":133},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[127,70133,70134],{"class":129,"line":10386},[127,70135,70136],{"class":133},"          \u003C\u002Ftd>\n",[127,70138,70139],{"class":129,"line":10392},[127,70140,70141],{"class":133},"        \u003C\u002Ftr> \n",[127,70143,70144],{"class":129,"line":10406},[127,70145,70146],{"class":133},"        -->\n",[127,70148,70149,70151,70153],{"class":129,"line":10412},[127,70150,52312],{"class":147},[127,70152,860],{"class":140},[127,70154,51846],{"class":147},[127,70156,70157,70159,70161],{"class":129,"line":10439},[127,70158,52952],{"class":147},[127,70160,814],{"class":140},[127,70162,51846],{"class":147},[127,70164,70165,70167,70169],{"class":129,"line":10448},[127,70166,52679],{"class":147},[127,70168,52348],{"class":140},[127,70170,51846],{"class":147},[127,70172,70173],{"class":129,"line":10454},[127,70174,60491],{"class":133},[127,70176,70177,70179,70182,70184,70186,70188,70190,70193],{"class":129,"line":10462},[127,70178,11763],{"class":290},[127,70180,70181],{"class":154}," uname",[127,70183,14106],{"class":290},[127,70185,54931],{"class":147},[127,70187,54934],{"class":143},[127,70189,681],{"class":147},[127,70191,70192],{"class":781},"'.uname'",[127,70194,687],{"class":147},[127,70196,70197,70199,70201,70203,70205,70207,70209,70212],{"class":129,"line":10467},[127,70198,11763],{"class":290},[127,70200,16230],{"class":154},[127,70202,14106],{"class":290},[127,70204,54931],{"class":147},[127,70206,54934],{"class":143},[127,70208,681],{"class":147},[127,70210,70211],{"class":781},"'.age'",[127,70213,687],{"class":147},[127,70215,70216,70218,70221,70223,70225,70227,70229,70232],{"class":129,"line":17145},[127,70217,11763],{"class":290},[127,70219,70220],{"class":154}," gender",[127,70222,14106],{"class":290},[127,70224,54931],{"class":147},[127,70226,54934],{"class":143},[127,70228,681],{"class":147},[127,70230,70231],{"class":781},"'.gender'",[127,70233,687],{"class":147},[127,70235,70236,70238,70241,70243,70245,70247,70249,70252],{"class":129,"line":17151},[127,70237,11763],{"class":290},[127,70239,70240],{"class":154}," salary",[127,70242,14106],{"class":290},[127,70244,54931],{"class":147},[127,70246,54934],{"class":143},[127,70248,681],{"class":147},[127,70250,70251],{"class":781},"'.salary'",[127,70253,687],{"class":147},[127,70255,70256,70258,70261,70263,70265,70267,70269,70272],{"class":129,"line":17174},[127,70257,11763],{"class":290},[127,70259,70260],{"class":154}," city",[127,70262,14106],{"class":290},[127,70264,54931],{"class":147},[127,70266,54934],{"class":143},[127,70268,681],{"class":147},[127,70270,70271],{"class":781},"'.city'",[127,70273,687],{"class":147},[127,70275,70276,70278,70281,70283,70285,70287,70289,70292],{"class":129,"line":17180},[127,70277,11763],{"class":290},[127,70279,70280],{"class":154}," tbody",[127,70282,14106],{"class":290},[127,70284,54931],{"class":147},[127,70286,54934],{"class":143},[127,70288,681],{"class":147},[127,70290,70291],{"class":781},"'tbody'",[127,70293,687],{"class":147},[127,70295,70296],{"class":129,"line":17203},[127,70297,2942],{"emptyLinePlaceholder":606},[127,70299,70300],{"class":129,"line":17217},[127,70301,70302],{"class":133},"    \u002F\u002F 获取所有带有name属性的元素\n",[127,70304,70305,70307,70310,70312,70314,70316,70318,70321],{"class":129,"line":17237},[127,70306,11763],{"class":290},[127,70308,70309],{"class":154}," items",[127,70311,14106],{"class":290},[127,70313,54931],{"class":147},[127,70315,56215],{"class":143},[127,70317,681],{"class":147},[127,70319,70320],{"class":781},"'[name]'",[127,70322,687],{"class":147},[127,70324,70325],{"class":129,"line":17243},[127,70326,70327],{"class":133},"    \u002F\u002F 声明一个空的数组\n",[127,70329,70330,70332,70334,70336],{"class":129,"line":17254},[127,70331,11763],{"class":290},[127,70333,58228],{"class":154},[127,70335,14106],{"class":290},[127,70337,52373],{"class":147},[127,70339,70340],{"class":129,"line":17277},[127,70341,70342],{"class":133},"    \u002F\u002F 1.录入模块\n",[127,70344,70345],{"class":129,"line":17299},[127,70346,70347],{"class":133},"    \u002F\u002F 1.1这是一个表单提交事件\n",[127,70349,70350,70352,70355,70357,70359,70361,70363,70366],{"class":129,"line":17304},[127,70351,11763],{"class":290},[127,70353,70354],{"class":154}," info",[127,70356,14106],{"class":290},[127,70358,54931],{"class":147},[127,70360,54934],{"class":143},[127,70362,681],{"class":147},[127,70364,70365],{"class":781},"'.info'",[127,70367,687],{"class":147},[127,70369,70370,70373,70375,70377,70380,70382,70384,70386,70388],{"class":129,"line":17310},[127,70371,70372],{"class":147},"    info.",[127,70374,58346],{"class":143},[127,70376,681],{"class":147},[127,70378,70379],{"class":781},"'submit'",[127,70381,12977],{"class":147},[127,70383,54984],{"class":290},[127,70385,2201],{"class":147},[127,70387,752],{"class":5758},[127,70389,12984],{"class":147},[127,70391,70392],{"class":129,"line":17324},[127,70393,70394],{"class":133},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[127,70396,70397,70400,70403],{"class":129,"line":17337},[127,70398,70399],{"class":147},"      e.",[127,70401,70402],{"class":143},"preventDefault",[127,70404,2518],{"class":147},[127,70406,70407],{"class":129,"line":17342},[127,70408,60545],{"class":133},[127,70410,70411],{"class":129,"line":17356},[127,70412,2942],{"emptyLinePlaceholder":606},[127,70414,70415],{"class":129,"line":17361},[127,70416,70417],{"class":133},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[127,70419,70420],{"class":129,"line":17367},[127,70421,70422],{"class":133},"      \u002F\u002F 先遍历循环\n",[127,70424,70425,70427,70429,70431,70433,70435,70437,70439,70441,70444,70446,70448,70450],{"class":129,"line":17372},[127,70426,52819],{"class":290},[127,70428,2201],{"class":147},[127,70430,52382],{"class":290},[127,70432,9980],{"class":147},[127,70434,725],{"class":290},[127,70436,4635],{"class":154},[127,70438,9987],{"class":147},[127,70440,1584],{"class":290},[127,70442,70443],{"class":147}," items.",[127,70445,52503],{"class":154},[127,70447,3756],{"class":147},[127,70449,2834],{"class":290},[127,70451,12984],{"class":147},[127,70453,70454,70456,70459,70461,70464],{"class":129,"line":17386},[127,70455,3039],{"class":290},[127,70457,70458],{"class":147}," (items[i].value ",[127,70460,55021],{"class":290},[127,70462,70463],{"class":781}," ''",[127,70465,12984],{"class":147},[127,70467,70468,70471,70474,70476,70479],{"class":129,"line":17391},[127,70469,70470],{"class":290},"          return",[127,70472,70473],{"class":143}," alert",[127,70475,681],{"class":147},[127,70477,70478],{"class":781},"'输入内容不能为空'",[127,70480,687],{"class":147},[127,70482,70483],{"class":129,"line":17396},[127,70484,3071],{"class":147},[127,70486,70487],{"class":129,"line":17410},[127,70488,52933],{"class":147},[127,70490,70491],{"class":129,"line":17422},[127,70492,2942],{"emptyLinePlaceholder":606},[127,70494,70495],{"class":129,"line":17427},[127,70496,70497],{"class":133},"      \u002F\u002F 创建新的对象\n",[127,70499,70500,70502,70505,70507],{"class":129,"line":17440},[127,70501,58761],{"class":290},[127,70503,70504],{"class":154}," obj",[127,70506,14106],{"class":290},[127,70508,148],{"class":147},[127,70510,70511,70514,70516,70518,70520],{"class":129,"line":17445},[127,70512,70513],{"class":147},"        stuID: arr.",[127,70515,52503],{"class":154},[127,70517,46106],{"class":290},[127,70519,25659],{"class":154},[127,70521,32006],{"class":147},[127,70523,70524],{"class":129,"line":17450},[127,70525,70526],{"class":147},"        uname: uname.value,\n",[127,70528,70529],{"class":129,"line":17455},[127,70530,70531],{"class":147},"        age: age.value,\n",[127,70533,70534],{"class":129,"line":17468},[127,70535,70536],{"class":147},"        gender: gender.value,\n",[127,70538,70539],{"class":129,"line":17473},[127,70540,70541],{"class":147},"        salary: salary.value,\n",[127,70543,70544],{"class":129,"line":33173},[127,70545,70546],{"class":147},"        city: city.value\n",[127,70548,70549],{"class":129,"line":33179},[127,70550,52933],{"class":147},[127,70552,70553],{"class":129,"line":33185},[127,70554,70555],{"class":133},"      \u002F\u002F console.log(obj);\n",[127,70557,70558],{"class":129,"line":33191},[127,70559,70560],{"class":133},"      \u002F\u002F 追加到数组里面\n",[127,70562,70563,70565,70567],{"class":129,"line":33197},[127,70564,58540],{"class":147},[127,70566,52419],{"class":143},[127,70568,70569],{"class":147},"(obj)\n",[127,70571,70572],{"class":129,"line":33208},[127,70573,70574],{"class":133},"      \u002F\u002F console.log(arr);\n",[127,70576,70577],{"class":129,"line":33214},[127,70578,70579],{"class":133},"      \u002F\u002F 清空表单  reset重置表单\n",[127,70581,70582,70585,70587,70590],{"class":129,"line":33234},[127,70583,70584],{"class":154},"      this",[127,70586,1233],{"class":147},[127,70588,70589],{"class":143},"reset",[127,70591,2518],{"class":147},[127,70593,70594],{"class":129,"line":33240},[127,70595,70596],{"class":133},"      \u002F\u002F 调用渲染函数\n",[127,70598,70599,70602],{"class":129,"line":33251},[127,70600,70601],{"class":143},"      render",[127,70603,2518],{"class":147},[127,70605,70606],{"class":129,"line":33257},[127,70607,34001],{"class":147},[127,70609,70610],{"class":129,"line":33263},[127,70611,70612],{"class":133},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[127,70614,70615,70618,70621],{"class":129,"line":33269},[127,70616,70617],{"class":290},"    function",[127,70619,70620],{"class":143}," render",[127,70622,11395],{"class":147},[127,70624,70625],{"class":129,"line":33275},[127,70626,70627],{"class":133},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[127,70629,70630,70633,70635],{"class":129,"line":33281},[127,70631,70632],{"class":147},"      tbody.innerHTML ",[127,70634,725],{"class":290},[127,70636,70637],{"class":781}," ''\n",[127,70639,70640],{"class":129,"line":33287},[127,70641,70642],{"class":133},"      \u002F\u002F 遍历数组\n",[127,70644,70645,70647,70649,70651,70653,70655,70657,70659,70661,70663,70665,70667,70669],{"class":129,"line":33293},[127,70646,52819],{"class":290},[127,70648,2201],{"class":147},[127,70650,52382],{"class":290},[127,70652,9980],{"class":147},[127,70654,725],{"class":290},[127,70656,4635],{"class":154},[127,70658,9987],{"class":147},[127,70660,1584],{"class":290},[127,70662,52500],{"class":147},[127,70664,52503],{"class":154},[127,70666,3756],{"class":147},[127,70668,2834],{"class":290},[127,70670,12984],{"class":147},[127,70672,70673,70675,70678,70680,70682,70685,70687,70690],{"class":129,"line":33313},[127,70674,61803],{"class":290},[127,70676,70677],{"class":154}," tr",[127,70679,14106],{"class":290},[127,70681,54931],{"class":147},[127,70683,70684],{"class":143},"createElement",[127,70686,681],{"class":147},[127,70688,70689],{"class":781},"'tr'",[127,70691,687],{"class":147},[127,70693,70694,70697,70699],{"class":129,"line":33319},[127,70695,70696],{"class":147},"        tr.innerHTML ",[127,70698,725],{"class":290},[127,70700,70701],{"class":781}," `\n",[127,70703,70704,70707,70709,70711,70713,70716,70719],{"class":129,"line":33335},[127,70705,70706],{"class":781},"        \u003Ctd>${",[127,70708,4422],{"class":147},[127,70710,1564],{"class":781},[127,70712,1116],{"class":147},[127,70714,70715],{"class":781},"].",[127,70717,70718],{"class":147},"stuID",[127,70720,70721],{"class":781},"}\u003C\u002Ftd>\n",[127,70723,70724,70727,70729,70731,70733,70735,70738],{"class":129,"line":33341},[127,70725,70726],{"class":781},"          \u003Ctd>${",[127,70728,4422],{"class":147},[127,70730,1564],{"class":781},[127,70732,1116],{"class":147},[127,70734,70715],{"class":781},[127,70736,70737],{"class":147},"uname",[127,70739,70721],{"class":781},[127,70741,70742,70744,70746,70748,70750,70752,70755],{"class":129,"line":33355},[127,70743,70726],{"class":781},[127,70745,4422],{"class":147},[127,70747,1564],{"class":781},[127,70749,1116],{"class":147},[127,70751,70715],{"class":781},[127,70753,70754],{"class":147},"age",[127,70756,70721],{"class":781},[127,70758,70759,70761,70763,70765,70767,70769,70772],{"class":129,"line":33361},[127,70760,70726],{"class":781},[127,70762,4422],{"class":147},[127,70764,1564],{"class":781},[127,70766,1116],{"class":147},[127,70768,70715],{"class":781},[127,70770,70771],{"class":147},"gender",[127,70773,70721],{"class":781},[127,70775,70776,70778,70780,70782,70784,70786,70789],{"class":129,"line":33376},[127,70777,70726],{"class":781},[127,70779,4422],{"class":147},[127,70781,1564],{"class":781},[127,70783,1116],{"class":147},[127,70785,70715],{"class":781},[127,70787,70788],{"class":147},"salary",[127,70790,70721],{"class":781},[127,70792,70793,70795,70797,70799,70801,70803,70806],{"class":129,"line":33382},[127,70794,70726],{"class":781},[127,70796,4422],{"class":147},[127,70798,1564],{"class":781},[127,70800,1116],{"class":147},[127,70802,70715],{"class":781},[127,70804,70805],{"class":147},"city",[127,70807,70721],{"class":781},[127,70809,70810],{"class":129,"line":33391},[127,70811,70126],{"class":781},[127,70813,70814,70817,70819],{"class":129,"line":33397},[127,70815,70816],{"class":781},"            \u003Ca href=\"javascript:\" data-id=${",[127,70818,1116],{"class":147},[127,70820,70821],{"class":781},"}>删除\u003C\u002Fa>\n",[127,70823,70824],{"class":129,"line":33406},[127,70825,70826],{"class":781},"          \u003C\u002Ftd> \n",[127,70828,70829],{"class":129,"line":33412},[127,70830,70831],{"class":781},"          `\n",[127,70833,70834],{"class":129,"line":33418},[127,70835,70836],{"class":133},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[127,70838,70839,70842,70845],{"class":129,"line":33427},[127,70840,70841],{"class":147},"        tbody.",[127,70843,70844],{"class":143},"appendChild",[127,70846,70847],{"class":147},"(tr)\n",[127,70849,70850],{"class":129,"line":33433},[127,70851,52933],{"class":147},[127,70853,70854],{"class":129,"line":33444},[127,70855,2729],{"class":147},[127,70857,70858],{"class":129,"line":33450},[127,70859,2942],{"emptyLinePlaceholder":606},[127,70861,70862],{"class":129,"line":33469},[127,70863,70864],{"class":133},"    \u002F\u002F 3.删除委托\n",[127,70866,70867],{"class":129,"line":33475},[127,70868,70869],{"class":133},"    \u002F\u002F 3.1 事件委托 tbody\n",[127,70871,70872,70875,70877,70879,70881,70883,70885,70887,70889],{"class":129,"line":33486},[127,70873,70874],{"class":147},"    tbody.",[127,70876,58346],{"class":143},[127,70878,681],{"class":147},[127,70880,58351],{"class":781},[127,70882,12977],{"class":147},[127,70884,54984],{"class":290},[127,70886,2201],{"class":147},[127,70888,752],{"class":5758},[127,70890,12984],{"class":147},[127,70892,70893,70895,70897,70899,70901],{"class":129,"line":33492},[127,70894,55015],{"class":290},[127,70896,67567],{"class":147},[127,70898,55021],{"class":290},[127,70900,68789],{"class":781},[127,70902,12984],{"class":147},[127,70904,70905],{"class":129,"line":33512},[127,70906,70907],{"class":133},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[127,70909,70910],{"class":129,"line":33528},[127,70911,70912],{"class":133},"        \u002F\u002F console.log(e.target.dataset.id);\n",[127,70914,70915],{"class":129,"line":33534},[127,70916,70917],{"class":133},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[127,70919,70920,70923,70925,70928,70930],{"class":129,"line":33548},[127,70921,70922],{"class":147},"        arr.",[127,70924,58543],{"class":143},[127,70926,70927],{"class":147},"(e.target.dataset.id, ",[127,70929,893],{"class":154},[127,70931,687],{"class":147},[127,70933,70934],{"class":129,"line":33554},[127,70935,70936],{"class":133},"        \u002F\u002F 重新渲染一次\n",[127,70938,70939,70942],{"class":129,"line":33560},[127,70940,70941],{"class":143},"        render",[127,70943,2518],{"class":147},[127,70945,70946],{"class":129,"line":33571},[127,70947,52933],{"class":147},[127,70949,70950],{"class":129,"line":33577},[127,70951,34001],{"class":147},[127,70953,70954,70956,70958],{"class":129,"line":33583},[127,70955,52952],{"class":147},[127,70957,52348],{"class":140},[127,70959,51846],{"class":147},[127,70961,70962],{"class":129,"line":33593},[127,70963,2942],{"emptyLinePlaceholder":606},[127,70965,70966,70968,70970],{"class":129,"line":33599},[127,70967,52321],{"class":147},[127,70969,275],{"class":140},[127,70971,51846],{"class":147},[127,70973,70974],{"class":129,"line":33610},[127,70975,2942],{"emptyLinePlaceholder":606},[127,70977,70978,70980,70982],{"class":129,"line":33616},[127,70979,52321],{"class":147},[127,70981,51175],{"class":140},[127,70983,51846],{"class":147},[19,70985,70986],{},"样式：",[117,70988,70992],{"className":70989,"code":70990,"language":70991,"meta":122,"style":122},"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",[124,70993,70994,70999,71009,71018,71022,71026,71031,71040,71045,71049,71054,71063,71068,71077,71081,71085,71090,71095,71105,71115,71120,71124,71129,71138,71148,71153,71162,71172,71176,71181,71189,71193,71198,71203,71208,71216,71225,71229,71234,71243,71247,71252,71261,71265,71270,71279,71288,71296,71300,71305,71314,71324,71333,71343,71349,71358,71368,71378,71382,71387,71396,71404,71414,71422,71431,71439,71449,71457,71461,71466,71475],{"__ignoreMap":122},[127,70995,70996],{"class":129,"line":130},[127,70997,70998],{"class":147},"* {\n",[127,71000,71001,71004,71006],{"class":129,"line":137},[127,71002,71003],{"class":140},"  margin",[127,71005,158],{"class":147},[127,71007,71008],{"class":781},"0;\n",[127,71010,71011,71014,71016],{"class":129,"line":151},[127,71012,71013],{"class":781},"  padding",[127,71015,158],{"class":147},[127,71017,71008],{"class":781},[127,71019,71020],{"class":129,"line":167},[127,71021,170],{"class":147},[127,71023,71024],{"class":129,"line":415},[127,71025,2942],{"emptyLinePlaceholder":606},[127,71027,71028],{"class":129,"line":421},[127,71029,71030],{"class":781},"a {\n",[127,71032,71033,71035,71037],{"class":129,"line":1766},[127,71034,464],{"class":140},[127,71036,158],{"class":147},[127,71038,71039],{"class":781},"none;\n",[127,71041,71042],{"class":129,"line":1856},[127,71043,71044],{"class":781},"  color:#721c24;\n",[127,71046,71047],{"class":129,"line":1862},[127,71048,170],{"class":147},[127,71050,71051],{"class":129,"line":1874},[127,71052,71053],{"class":781},"h1 {\n",[127,71055,71056,71058,71060],{"class":129,"line":2155},[127,71057,155],{"class":140},[127,71059,158],{"class":147},[127,71061,71062],{"class":781},"center;\n",[127,71064,71065],{"class":129,"line":2160},[127,71066,71067],{"class":781},"  color:#333;\n",[127,71069,71070,71072,71074],{"class":129,"line":2166},[127,71071,71003],{"class":140},[127,71073,158],{"class":147},[127,71075,71076],{"class":781},"20px 0;\n",[127,71078,71079],{"class":129,"line":2171},[127,71080,3216],{"class":147},[127,71082,71083],{"class":129,"line":2185},[127,71084,170],{"class":147},[127,71086,71087],{"class":129,"line":2190},[127,71088,71089],{"class":781},"table {\n",[127,71091,71092],{"class":129,"line":2196},[127,71093,71094],{"class":781},"  margin:0 auto;\n",[127,71096,71097,71100,71102],{"class":129,"line":2217},[127,71098,71099],{"class":140},"  width",[127,71101,158],{"class":147},[127,71103,71104],{"class":781},"800px;\n",[127,71106,71107,71110,71112],{"class":129,"line":2222},[127,71108,71109],{"class":140},"  border-collapse",[127,71111,158],{"class":147},[127,71113,71114],{"class":781},"collapse;\n",[127,71116,71117],{"class":129,"line":2236},[127,71118,71119],{"class":781},"  color:#004085;\n",[127,71121,71122],{"class":129,"line":2241},[127,71123,170],{"class":147},[127,71125,71126],{"class":129,"line":2270},[127,71127,71128],{"class":781},"th {\n",[127,71130,71131,71133,71135],{"class":129,"line":2275},[127,71132,71013],{"class":140},[127,71134,158],{"class":147},[127,71136,71137],{"class":781},"10px;\n",[127,71139,71140,71143,71145],{"class":129,"line":2292},[127,71141,71142],{"class":140},"  background",[127,71144,158],{"class":147},[127,71146,71147],{"class":133},"#cfe5ff;\n",[127,71149,71150],{"class":129,"line":2297},[127,71151,71152],{"class":147},"  \n",[127,71154,71155,71157,71159],{"class":129,"line":2302},[127,71156,282],{"class":140},[127,71158,158],{"class":147},[127,71160,71161],{"class":781},"20px;\n",[127,71163,71164,71167,71169],{"class":129,"line":2307},[127,71165,71166],{"class":140},"  font-weight",[127,71168,158],{"class":147},[127,71170,71171],{"class":781},"400;\n",[127,71173,71174],{"class":129,"line":2321},[127,71175,170],{"class":147},[127,71177,71178],{"class":129,"line":2326},[127,71179,71180],{"class":781},"td,th {\n",[127,71182,71183,71186],{"class":129,"line":3119},[127,71184,71185],{"class":781},"  border:1px solid",[127,71187,71188],{"class":133}," #b8daff;\n",[127,71190,71191],{"class":129,"line":3133},[127,71192,170],{"class":147},[127,71194,71195],{"class":129,"line":3141},[127,71196,71197],{"class":781},"td {\n",[127,71199,71200],{"class":129,"line":3146},[127,71201,71202],{"class":781},"  padding:10px;\n",[127,71204,71205],{"class":129,"line":3152},[127,71206,71207],{"class":781},"  color:#666;\n",[127,71209,71210,71212,71214],{"class":129,"line":3158},[127,71211,155],{"class":140},[127,71213,158],{"class":147},[127,71215,71062],{"class":781},[127,71217,71218,71220,71222],{"class":129,"line":3163},[127,71219,282],{"class":140},[127,71221,158],{"class":147},[127,71223,71224],{"class":781},"16px;\n",[127,71226,71227],{"class":129,"line":8490},[127,71228,170],{"class":147},[127,71230,71231],{"class":129,"line":8514},[127,71232,71233],{"class":781},"tbody tr {\n",[127,71235,71236,71238,71240],{"class":129,"line":8519},[127,71237,71142],{"class":140},[127,71239,158],{"class":147},[127,71241,71242],{"class":133},"#fff;\n",[127,71244,71245],{"class":129,"line":8525},[127,71246,170],{"class":147},[127,71248,71249],{"class":129,"line":8552},[127,71250,71251],{"class":781},"tbody tr:hover {\n",[127,71253,71254,71256,71258],{"class":129,"line":8557},[127,71255,71142],{"class":140},[127,71257,158],{"class":147},[127,71259,71260],{"class":133},"#e1ecf8;\n",[127,71262,71263],{"class":129,"line":8563},[127,71264,170],{"class":147},[127,71266,71267],{"class":129,"line":8575},[127,71268,71269],{"class":781},".info {\n",[127,71271,71272,71274,71276],{"class":129,"line":8587},[127,71273,71099],{"class":140},[127,71275,158],{"class":147},[127,71277,71278],{"class":781},"900px;\n",[127,71280,71281,71283,71285],{"class":129,"line":8599},[127,71282,71003],{"class":140},[127,71284,158],{"class":147},[127,71286,71287],{"class":781},"50px auto;\n",[127,71289,71290,71292,71294],{"class":129,"line":10258},[127,71291,155],{"class":140},[127,71293,158],{"class":147},[127,71295,71062],{"class":781},[127,71297,71298],{"class":129,"line":10283},[127,71299,170],{"class":147},[127,71301,71302],{"class":129,"line":10306},[127,71303,71304],{"class":781},".info  input, .info select {\n",[127,71306,71307,71309,71311],{"class":129,"line":10330},[127,71308,71099],{"class":140},[127,71310,158],{"class":147},[127,71312,71313],{"class":781},"80px;\n",[127,71315,71316,71319,71321],{"class":129,"line":10335},[127,71317,71318],{"class":140},"  height",[127,71320,158],{"class":147},[127,71322,71323],{"class":781},"27px;\n",[127,71325,71326,71329,71331],{"class":129,"line":10340},[127,71327,71328],{"class":140},"  outline",[127,71330,158],{"class":147},[127,71332,71039],{"class":781},[127,71334,71335,71338,71340],{"class":129,"line":10345},[127,71336,71337],{"class":140},"  border-radius",[127,71339,158],{"class":147},[127,71341,71342],{"class":781},"5px;\n",[127,71344,71345,71347],{"class":129,"line":10354},[127,71346,71185],{"class":781},[127,71348,71188],{"class":133},[127,71350,71351,71354,71356],{"class":129,"line":10359},[127,71352,71353],{"class":140},"  padding-left",[127,71355,158],{"class":147},[127,71357,71342],{"class":781},[127,71359,71360,71363,71365],{"class":129,"line":10365},[127,71361,71362],{"class":140},"  box-sizing",[127,71364,158],{"class":147},[127,71366,71367],{"class":781},"border-box;\n",[127,71369,71370,71373,71375],{"class":129,"line":10386},[127,71371,71372],{"class":140},"  margin-right",[127,71374,158],{"class":147},[127,71376,71377],{"class":781},"15px;\n",[127,71379,71380],{"class":129,"line":10392},[127,71381,170],{"class":147},[127,71383,71384],{"class":129,"line":10406},[127,71385,71386],{"class":781},".info button {\n",[127,71388,71389,71391,71393],{"class":129,"line":10412},[127,71390,71099],{"class":140},[127,71392,158],{"class":147},[127,71394,71395],{"class":781},"60px;\n",[127,71397,71398,71400,71402],{"class":129,"line":10439},[127,71399,71318],{"class":140},[127,71401,158],{"class":147},[127,71403,71323],{"class":781},[127,71405,71406,71409,71411],{"class":129,"line":10448},[127,71407,71408],{"class":140},"  background-color",[127,71410,158],{"class":147},[127,71412,71413],{"class":133},"#004085;\n",[127,71415,71416,71418,71420],{"class":129,"line":10454},[127,71417,71328],{"class":140},[127,71419,158],{"class":147},[127,71421,71039],{"class":781},[127,71423,71424,71427,71429],{"class":129,"line":10462},[127,71425,71426],{"class":140},"  border",[127,71428,158],{"class":147},[127,71430,71008],{"class":781},[127,71432,71433,71435,71437],{"class":129,"line":10467},[127,71434,400],{"class":140},[127,71436,158],{"class":147},[127,71438,71242],{"class":133},[127,71440,71441,71444,71446],{"class":129,"line":17145},[127,71442,71443],{"class":140},"  cursor",[127,71445,158],{"class":147},[127,71447,71448],{"class":781},"pointer;\n",[127,71450,71451,71453,71455],{"class":129,"line":17151},[127,71452,71337],{"class":140},[127,71454,158],{"class":147},[127,71456,71342],{"class":781},[127,71458,71459],{"class":129,"line":17174},[127,71460,170],{"class":147},[127,71462,71463],{"class":129,"line":17180},[127,71464,71465],{"class":781},".info .age {\n",[127,71467,71468,71470,71472],{"class":129,"line":17203},[127,71469,71099],{"class":140},[127,71471,158],{"class":147},[127,71473,71474],{"class":781},"50px;\n",[127,71476,71477],{"class":129,"line":17217},[127,71478,170],{"class":147},[19,71480,71481],{},"思路：",[19,71483,71484],{},[23,71485],{"alt":122,"src":71486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71488,71489],{},[23,71490],{"alt":122,"src":71491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71493,71494],{},[23,71495],{"alt":122,"src":71496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[62,71498,71500],{"id":71499},"_3315-重绘回流","3.3.15 重绘回流",[19,71502,71503],{},[23,71504],{"alt":122,"src":71505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71507,71508],{},[23,71509],{"alt":122,"src":71510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71512,71513],{},[23,71514],{"alt":122,"src":71515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71517,71519],{"id":71518},"_34-bom","3.4 BOM",[19,71521,71522],{},[23,71523],{"alt":122,"src":71524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71526,71527],{},"平时写的document省略了window而已，实际上是window.document",[19,71529,71530],{},"函数也是这样，调用的时候实际为window.fn()",[19,71532,71533],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71535,71536],{},"window大部分情况下可以省略",[62,71538,71540],{"id":71539},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71542,71543],{},"只执行一次",[19,71545,71546],{},[23,71547],{"alt":122,"src":71548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71550,71551],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71553,71554],{},[23,71555],{"alt":122,"src":71556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[62,71558,71560],{"id":71559},"_342-js执行机制","3.4.2 JS执行机制",[19,71562,71563],{},[23,71564],{"alt":122,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71567,71568],{},"两个的结果都是1111 3333 2222",[19,71570,71571],{},[23,71572],{"alt":122,"src":71573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71575,71576],{},[23,71577],{"alt":122,"src":71578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71580,71581],{},[23,71582],{"alt":122,"src":71583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71585,71586],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71588,71589],{},"工作流程：",[19,71591,71592],{},[23,71593],{"alt":122,"src":71594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71596,71597],{},[23,71598],{"alt":122,"src":71599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71601,71602],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71604,71605],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[62,71607,71609],{"id":71608},"_343-location对象","3.4.3 location对象",[19,71611,71612],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71614,71615],{},[23,71616],{"alt":122,"src":71617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71619,71620],{},"href可以跳转页面",[632,71622,71623],{},[635,71624,71625],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71627,71628],{},"search得到提交信息之后网站后边的地址",[19,71630,71631],{},[23,71632],{"alt":122,"src":71633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71635,71636],{},[23,71637],{"alt":122,"src":71638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[632,71640,71641],{"start":137},[635,71642,71643],{},"hash:这个获取单页面应用#后边的地址",[19,71645,71646],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71648,71649],{},[23,71650],{"alt":122,"src":71651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[117,71653,71655],{"className":53602,"code":71654,"language":53604,"meta":122,"style":122},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[124,71656,71657,71677,71697],{"__ignoreMap":122},[127,71658,71659,71661,71663,71665,71667,71670,71673,71675],{"class":129,"line":130},[127,71660,52679],{"class":147},[127,71662,457],{"class":140},[127,71664,61590],{"class":143},[127,71666,725],{"class":147},[127,71668,71669],{"class":781},"\"#\u002Fmy\"",[127,71671,71672],{"class":147},">我的\u003C\u002F",[127,71674,457],{"class":140},[127,71676,51846],{"class":147},[127,71678,71679,71681,71683,71685,71687,71690,71693,71695],{"class":129,"line":137},[127,71680,52679],{"class":147},[127,71682,457],{"class":140},[127,71684,61590],{"class":143},[127,71686,725],{"class":147},[127,71688,71689],{"class":781},"\"#\u002Ffriend\"",[127,71691,71692],{"class":147},">关注\u003C\u002F",[127,71694,457],{"class":140},[127,71696,51846],{"class":147},[127,71698,71699,71701,71703,71705,71707,71710,71713,71715],{"class":129,"line":151},[127,71700,52679],{"class":147},[127,71702,457],{"class":140},[127,71704,61590],{"class":143},[127,71706,725],{"class":147},[127,71708,71709],{"class":781},"\"#\u002Fdownload\"",[127,71711,71712],{"class":147},">下载\u003C\u002F",[127,71714,457],{"class":140},[127,71716,51846],{"class":147},[19,71718,71719],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[632,71721,71722],{"start":151},[635,71723,71724,71725,71727,71728,71730],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54251,71726],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54251,71729],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[62,71732,71734],{"id":71733},"_345-navigator对象","3.4.5 navigator对象",[19,71736,71737],{},[23,71738],{"alt":122,"src":71739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[117,71741,71745],{"className":71742,"code":71743,"language":71744,"meta":122,"style":122},"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",[124,71746,71747,71752,71763,71775,71780,71831,71872,71877,71890,71902,71907],{"__ignoreMap":122},[127,71748,71749],{"class":129,"line":130},[127,71750,71751],{"class":133},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[127,71753,71754,71756,71758,71760],{"class":129,"line":137},[127,71755,902],{"class":290},[127,71757,681],{"class":147},[127,71759,54984],{"class":290},[127,71761,71762],{"class":147}," () { \n",[127,71764,71765,71767,71770,71772],{"class":129,"line":151},[127,71766,7334],{"class":290},[127,71768,71769],{"class":154}," userAgent",[127,71771,14106],{"class":290},[127,71773,71774],{"class":147}," navigator.userAgent \n",[127,71776,71777],{"class":129,"line":167},[127,71778,71779],{"class":133},"\u002F\u002F 验证是否为Android或iPhone \n",[127,71781,71782,71784,71787,71789,71792,71795,71797,71799,71802,71804,71807,71811,71813,71815,71817,71820,71822,71824,71826,71828],{"class":129,"line":415},[127,71783,7334],{"class":290},[127,71785,71786],{"class":154}," android",[127,71788,14106],{"class":290},[127,71790,71791],{"class":147}," userAgent.",[127,71793,71794],{"class":143},"match",[127,71796,681],{"class":147},[127,71798,1259],{"class":781},[127,71800,71801],{"class":48517},"(Android);",[127,71803,1660],{"class":290},[127,71805,71806],{"class":154},"[\\s",[127,71808,71810],{"class":71809},"snhLl","\\\u002F",[127,71812,1614],{"class":154},[127,71814,1156],{"class":290},[127,71816,681],{"class":48517},[127,71818,71819],{"class":154},"[\\d.]",[127,71821,1156],{"class":290},[127,71823,1104],{"class":48517},[127,71825,1660],{"class":290},[127,71827,1259],{"class":781},[127,71829,71830],{"class":147},") \n",[127,71832,71833,71835,71838,71840,71842,71844,71846,71848,71851,71854,71857,71859,71861,71864,71866,71868,71870],{"class":129,"line":421},[127,71834,7334],{"class":290},[127,71836,71837],{"class":154}," iphone",[127,71839,14106],{"class":290},[127,71841,71791],{"class":147},[127,71843,71794],{"class":143},[127,71845,681],{"class":147},[127,71847,1259],{"class":781},[127,71849,71850],{"class":48517},"(iPhone",[127,71852,71853],{"class":154},"\\s",[127,71855,71856],{"class":48517},"OS)",[127,71858,71853],{"class":154},[127,71860,681],{"class":48517},[127,71862,71863],{"class":154},"[\\d_]",[127,71865,1156],{"class":290},[127,71867,1104],{"class":48517},[127,71869,1259],{"class":781},[127,71871,71830],{"class":147},[127,71873,71874],{"class":129,"line":1766},[127,71875,71876],{"class":133},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[127,71878,71879,71881,71884,71887],{"class":129,"line":1856},[127,71880,2075],{"class":290},[127,71882,71883],{"class":147}," (android ",[127,71885,71886],{"class":290},"||",[127,71888,71889],{"class":147}," iphone) { \n",[127,71891,71892,71895,71897,71900],{"class":129,"line":1862},[127,71893,71894],{"class":147},"location.href ",[127,71896,725],{"class":290},[127,71898,71899],{"class":781}," 'http:\u002F\u002Fm.itcast.cn'",[127,71901,3216],{"class":147},[127,71903,71904],{"class":129,"line":1874},[127,71905,71906],{"class":147},"} \n",[127,71908,71909],{"class":129,"line":2155},[127,71910,71911],{"class":147},"})()\n",[62,71913,71915],{"id":71914},"_346-histroy对象","3.4.6 histroy对象",[19,71917,71918],{},[23,71919],{"alt":122,"src":71920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71922,71923],{},"浏览器地址的前进与后退!!!",[19,71925,71926],{},"history.back() 等效于 history.go(-1)",[19,71928,71929],{},"history.forward() 等效于 history.go(1)",[14,71931,71933],{"id":71932},"_35-本地存储","3.5 本地存储",[632,71935,71936,71939,71942],{},[635,71937,71938],{},"数据存储在用户浏览器中",[635,71940,71941],{},"设置、读取方便、甚至页面刷新不丢失数据",[635,71943,71944],{},"容量较大，sessionStorage和localStorage约 5M 左右",[62,71946,71948],{"id":71947},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71950,71951],{},"只能存储字符串",[19,71953,71954],{},[23,71955],{"alt":122,"src":71956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71958,71959],{},[23,71960],{"alt":122,"src":71961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71963,71964],{},"键值对要加引号,不然就会当变量来看了",[19,71966,71967],{},"localStorage.setItem('uname', 'pink')",[19,71969,71970],{},"刷新之后信息不再丢失",[19,71972,71973],{},"操作key,value会跟着变",[19,71975,71976],{},"删除只删除键就可以,即名字",[19,71978,71967],{},[19,71980,71981],{},"改:",[19,71983,71984],{},"localStorage.setItem('uname','red')",[19,71986,71987],{},"有这个键就是改,没有这个键就是改",[19,71989,71990],{},[23,71991],{"alt":122,"src":71992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71994,71995],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71997,71998],{},[23,71999],{"alt":122,"src":72000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72002,72003],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[62,72005,72007],{"id":72006},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72009,72010],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72012,72013],{},"特性:",[632,72015,72016,72019,72022,72025],{},[635,72017,72018],{},"生命周期为关闭浏览器窗口",[635,72020,72021],{},"在同一个窗口(页面)下数据可以共享",[635,72023,72024],{},"以键值对的形式存储使用",[635,72026,72027],{},"用法跟localStorage 基本相同",[62,72029,72031],{"id":72030},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72033,72034],{},"本地只能存储字符串,无法直接存储复杂数据类型",[117,72036,72038],{"className":53602,"code":72037,"language":53604,"meta":122,"style":122},"\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",[124,72039,72040,72048,72053,72058,72063,72068,72072,72077,72082],{"__ignoreMap":122},[127,72041,72042,72044,72046],{"class":129,"line":130},[127,72043,1584],{"class":147},[127,72045,52348],{"class":140},[127,72047,51846],{"class":147},[127,72049,72050],{"class":129,"line":137},[127,72051,72052],{"class":147},"    const obj = {\n",[127,72054,72055],{"class":129,"line":151},[127,72056,72057],{"class":147},"      uname: 'pink老师',\n",[127,72059,72060],{"class":129,"line":167},[127,72061,72062],{"class":147},"      age: 18,\n",[127,72064,72065],{"class":129,"line":415},[127,72066,72067],{"class":147},"      gender: '女'\n",[127,72069,72070],{"class":129,"line":421},[127,72071,2729],{"class":147},[127,72073,72074],{"class":129,"line":1766},[127,72075,72076],{"class":147},"    \u002F\u002F 存储复杂数据类型\n",[127,72078,72079],{"class":129,"line":1856},[127,72080,72081],{"class":147},"    localStorage.setItem('obj', obj)\n",[127,72083,72084,72086,72088],{"class":129,"line":1862},[127,72085,52952],{"class":147},[127,72087,52348],{"class":140},[127,72089,51846],{"class":147},[19,72091,72092],{},[23,72093],{"alt":122,"src":72094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72096,72097],{},"如果获取一下数据:",[19,72099,72100],{},"log(localStorage.getItem('obj'))",[19,72102,72103],{},[23,72104],{"alt":122,"src":72105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72107,72108],{},"发现直接存对象是使用不了的!!!",[22539,72110,72112],{"id":72111},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72114,72115],{},[23,72116],{"alt":122,"src":72117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[117,72119,72121],{"className":51173,"code":72120,"language":51175,"meta":122,"style":122},"\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",[124,72122,72123,72131,72141,72151,72160,72168,72172,72176,72202,72221,72229,72233,72238,72243],{"__ignoreMap":122},[127,72124,72125,72127,72129],{"class":129,"line":130},[127,72126,1584],{"class":147},[127,72128,52348],{"class":140},[127,72130,51846],{"class":147},[127,72132,72133,72135,72137,72139],{"class":129,"line":137},[127,72134,11763],{"class":290},[127,72136,70504],{"class":154},[127,72138,14106],{"class":290},[127,72140,148],{"class":147},[127,72142,72143,72146,72149],{"class":129,"line":151},[127,72144,72145],{"class":147},"      uname: ",[127,72147,72148],{"class":781},"'pink老师'",[127,72150,32006],{"class":147},[127,72152,72153,72156,72158],{"class":129,"line":167},[127,72154,72155],{"class":147},"      age: ",[127,72157,1324],{"class":154},[127,72159,32006],{"class":147},[127,72161,72162,72165],{"class":129,"line":415},[127,72163,72164],{"class":147},"      gender: ",[127,72166,72167],{"class":781},"'女'\n",[127,72169,72170],{"class":129,"line":421},[127,72171,2729],{"class":147},[127,72173,72174],{"class":129,"line":1766},[127,72175,72076],{"class":133},[127,72177,72178,72181,72184,72186,72189,72191,72194,72196,72199],{"class":129,"line":1856},[127,72179,72180],{"class":147},"  localStorage.",[127,72182,72183],{"class":143},"setItem",[127,72185,681],{"class":147},[127,72187,72188],{"class":781},"'obj'",[127,72190,12977],{"class":147},[127,72192,72193],{"class":154},"JSON",[127,72195,1233],{"class":147},[127,72197,72198],{"class":143},"stringify",[127,72200,72201],{"class":147},"(obj))\n",[127,72203,72204,72207,72209,72212,72215,72217,72219],{"class":129,"line":1862},[127,72205,72206],{"class":147},"  console.",[127,72208,58780],{"class":143},[127,72210,72211],{"class":147},"(localStorage.",[127,72213,72214],{"class":143},"getItem",[127,72216,681],{"class":147},[127,72218,72188],{"class":781},[127,72220,31037],{"class":147},[127,72222,72223,72225,72227],{"class":129,"line":1874},[127,72224,52952],{"class":147},[127,72226,52348],{"class":140},[127,72228,51846],{"class":147},[127,72230,72231],{"class":129,"line":2155},[127,72232,71152],{"class":147},[127,72234,72235],{"class":129,"line":2160},[127,72236,72237],{"class":147},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[127,72239,72240],{"class":129,"line":2166},[127,72241,72242],{"class":147},"  类型是字符串的\n",[127,72244,72245],{"class":129,"line":2171},[127,72246,72247],{"class":147},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22539,72249,72251],{"id":72250},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72253,72254],{},[23,72255],{"alt":122,"src":72256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72258,72259],{},[23,72260],{"alt":122,"src":72261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[117,72263,72265],{"className":53602,"code":72264,"language":53604,"meta":122,"style":122},"  \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",[124,72266,72267,72275,72279,72283,72287,72291,72295,72300,72305,72310,72315,72320,72325,72330,72335],{"__ignoreMap":122},[127,72268,72269,72271,72273],{"class":129,"line":130},[127,72270,52679],{"class":147},[127,72272,52348],{"class":140},[127,72274,51846],{"class":147},[127,72276,72277],{"class":129,"line":137},[127,72278,72052],{"class":147},[127,72280,72281],{"class":129,"line":151},[127,72282,72057],{"class":147},[127,72284,72285],{"class":129,"line":167},[127,72286,72062],{"class":147},[127,72288,72289],{"class":129,"line":415},[127,72290,72067],{"class":147},[127,72292,72293],{"class":129,"line":421},[127,72294,2729],{"class":147},[127,72296,72297],{"class":129,"line":1766},[127,72298,72299],{"class":147},"    \u002F\u002F 1.存储复杂数据类型\n",[127,72301,72302],{"class":129,"line":1856},[127,72303,72304],{"class":147},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[127,72306,72307],{"class":129,"line":1862},[127,72308,72309],{"class":147},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[127,72311,72312],{"class":129,"line":1874},[127,72313,72314],{"class":147},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[127,72316,72317],{"class":129,"line":2155},[127,72318,72319],{"class":147},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[127,72321,72322],{"class":129,"line":2160},[127,72323,72324],{"class":147},"    \u002F\u002F 取\n",[127,72326,72327],{"class":129,"line":2166},[127,72328,72329],{"class":147},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[127,72331,72332],{"class":129,"line":2171},[127,72333,72334],{"class":147},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[127,72336,72337,72339,72341],{"class":129,"line":2185},[127,72338,52952],{"class":147},[127,72340,52348],{"class":140},[127,72342,51846],{"class":147},[19,72344,72345],{},[23,72346],{"alt":122,"src":72347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[62,72349,72351],{"id":72350},"_356-数组map方法","3.5.6 数组map方法",[19,72353,72354],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72356,72357],{},[23,72358],{"alt":122,"src":72359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72361,72362],{},[23,72363],{"alt":122,"src":72364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72366,72367,72370],{},[30,72368,72369],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72372,72373],{},"map有返回值，但是forEach没有返回值",[19,72375,72376],{},"map是个方法。用的时候要加 ()",[19,72378,72379],{},"map返回的是一个数组",[62,72381,72383],{"id":72382},"_357-数组中join方法","3.5.7 数组中join方法",[19,72385,72386],{},[23,72387],{"alt":122,"src":72388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72390,72391],{},"类似于python中拼接字符串一样！",[632,72393,72394,72397,72400],{},[635,72395,72396],{},"小括号为空则逗号分开",[635,72398,72399],{},"小括号为空字符串 ''，则元素之间没有分隔符",[635,72401,72402],{},"小括号用啥符号就用进行分割",[62,72404,72406],{"id":72405},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[632,72408,72409,72412,72415,72418,72421],{},[635,72410,72411],{},"记住本地时间获取快速方式：new Date().toDateString()",[635,72413,72414],{},"尽量减少DOM操作，用好map+join的渲染方式",[635,72416,72417],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[635,72419,72420],{},"return可以实现函数的结束",[635,72422,72423],{},"禁止跳转是 preventDefault() 不要忘记",[117,72425,72427],{"className":51173,"code":72426,"language":51175,"meta":122,"style":122},"\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",[124,72428,72429,72439,72453,72457,72465,72479,72499,72511,72519,72525,72535,72545,72549,72553,72559,72569,72581,72585,72589,72596,72608,72622,72632,72636,72640,72647,72654,72661,72673,72685,72695,72707,72711,72715,72722,72729,72741,72753,72763,72775,72805,72809,72813,72820,72832,72844,72868,72878,72888,72892,72896,72904,72915,72927,72939,72951,72968,72980,72992,72996,73000,73007,73019,73031,73043,73054,73072,73085,73097,73121,73132,73136,73140,73148,73158,73162,73166,73172,73184,73195,73205,73209,73213,73219,73241,73245,73249,73255,73261,73273,73283,73295,73325,73338,73355,73359,73363,73374,73396,73406,73410,73414,73427,73437,73449,73461,73473,73485,73495,73505,73515,73526,73539,73543,73551,73559,73563,73571,73584,73604,73637,73670,73703,73729,73747,73765,73773,73799,73817,73835,73853,73871,73889,73897,73905,73923,73931,73960,73968,73976,73984,73997,74009,74021,74033,74045,74057,74070,74082,74090,74098,74106,74111,74116,74120,74124,74128,74132,74136,74140,74145,74150,74155,74160,74168,74176,74184,74189,74194,74199,74204,74209,74214,74219,74224,74229,74234,74239,74244,74249,74254,74258,74263,74268,74278,74287,74291,74296,74305,74321,74363,74403,74442,74507,74515,74519,74524,74542,74550,74555,74560,74590,74596,74601,74614,74626,74638,74650,74662,74674,74686,74690,74700,74704,74709,74714,74718,74727,74731,74736,74741,74760,74765,74785,74789,74794,74798,74803,74821,74839,74857,74876,74895,74914,74919,74925,74946,74952,74961,74967,74973,74979,75006,75019,75024,75034,75040,75046,75052,75058,75063,75069,75075,75081,75087,75120,75125,75130,75135,75140,75146,75152,75158,75169,75174,75180,75187,75201,75207,75231,75236,75241,75247,75253,75274,75280,75293,75299,75305,75311,75317,75322,75328,75334,75340,75358,75372,75378,75386,75392,75414,75419,75424,75429,75434,75439,75448,75457,75462],{"__ignoreMap":122},[127,72430,72431,72433,72435,72437],{"class":129,"line":130},[127,72432,51837],{"class":147},[127,72434,51840],{"class":140},[127,72436,51843],{"class":143},[127,72438,51846],{"class":147},[127,72440,72441,72443,72445,72447,72449,72451],{"class":129,"line":137},[127,72442,1584],{"class":147},[127,72444,51175],{"class":140},[127,72446,51855],{"class":143},[127,72448,725],{"class":147},[127,72450,51860],{"class":781},[127,72452,51846],{"class":147},[127,72454,72455],{"class":129,"line":151},[127,72456,2942],{"emptyLinePlaceholder":606},[127,72458,72459,72461,72463],{"class":129,"line":167},[127,72460,1584],{"class":147},[127,72462,51873],{"class":140},[127,72464,51846],{"class":147},[127,72466,72467,72469,72471,72473,72475,72477],{"class":129,"line":415},[127,72468,52679],{"class":147},[127,72470,51883],{"class":140},[127,72472,51886],{"class":143},[127,72474,725],{"class":147},[127,72476,51891],{"class":781},[127,72478,51846],{"class":147},[127,72480,72481,72483,72485,72487,72489,72491,72493,72495,72497],{"class":129,"line":421},[127,72482,52679],{"class":147},[127,72484,51883],{"class":140},[127,72486,15462],{"class":143},[127,72488,725],{"class":147},[127,72490,51930],{"class":781},[127,72492,51910],{"class":143},[127,72494,725],{"class":147},[127,72496,51937],{"class":781},[127,72498,51846],{"class":147},[127,72500,72501,72503,72505,72507,72509],{"class":129,"line":1766},[127,72502,52679],{"class":147},[127,72504,51946],{"class":140},[127,72506,51949],{"class":147},[127,72508,51946],{"class":140},[127,72510,51846],{"class":147},[127,72512,72513,72515,72517],{"class":129,"line":1856},[127,72514,52679],{"class":147},[127,72516,575],{"class":140},[127,72518,51846],{"class":147},[127,72520,72521,72523],{"class":129,"line":1862},[127,72522,6945],{"class":140},[127,72524,148],{"class":147},[127,72526,72527,72529,72531,72533],{"class":129,"line":1874},[127,72528,55230],{"class":154},[127,72530,158],{"class":147},[127,72532,867],{"class":154},[127,72534,164],{"class":147},[127,72536,72537,72539,72541,72543],{"class":129,"line":2155},[127,72538,55241],{"class":154},[127,72540,158],{"class":147},[127,72542,867],{"class":154},[127,72544,164],{"class":147},[127,72546,72547],{"class":129,"line":2160},[127,72548,2729],{"class":147},[127,72550,72551],{"class":129,"line":2166},[127,72552,2942],{"emptyLinePlaceholder":606},[127,72554,72555,72557],{"class":129,"line":2171},[127,72556,57813],{"class":140},[127,72558,148],{"class":147},[127,72560,72561,72563,72565,72567],{"class":129,"line":2185},[127,72562,57820],{"class":154},[127,72564,158],{"class":147},[127,72566,161],{"class":154},[127,72568,164],{"class":147},[127,72570,72571,72573,72575,72577,72579],{"class":129,"line":2190},[127,72572,62610],{"class":154},[127,72574,158],{"class":147},[127,72576,1374],{"class":154},[127,72578,291],{"class":290},[127,72580,164],{"class":147},[127,72582,72583],{"class":129,"line":2196},[127,72584,2729],{"class":147},[127,72586,72587],{"class":129,"line":2217},[127,72588,2942],{"emptyLinePlaceholder":606},[127,72590,72591,72594],{"class":129,"line":2222},[127,72592,72593],{"class":143},"    .info",[127,72595,148],{"class":147},[127,72597,72598,72600,72602,72604,72606],{"class":129,"line":2236},[127,72599,55305],{"class":154},[127,72601,158],{"class":147},[127,72603,52027],{"class":154},[127,72605,291],{"class":290},[127,72607,164],{"class":147},[127,72609,72610,72612,72614,72616,72618,72620],{"class":129,"line":2241},[127,72611,55241],{"class":154},[127,72613,158],{"class":147},[127,72615,1121],{"class":154},[127,72617,291],{"class":290},[127,72619,52093],{"class":154},[127,72621,164],{"class":147},[127,72623,72624,72626,72628,72630],{"class":129,"line":2270},[127,72625,57820],{"class":154},[127,72627,158],{"class":147},[127,72629,161],{"class":154},[127,72631,164],{"class":147},[127,72633,72634],{"class":129,"line":2275},[127,72635,2729],{"class":147},[127,72637,72638],{"class":129,"line":2292},[127,72639,2942],{"emptyLinePlaceholder":606},[127,72641,72642,72645],{"class":129,"line":2297},[127,72643,72644],{"class":143},"    .uname",[127,72646,32006],{"class":147},[127,72648,72649,72652],{"class":129,"line":2302},[127,72650,72651],{"class":143},"    .age",[127,72653,32006],{"class":147},[127,72655,72656,72659],{"class":129,"line":2307},[127,72657,72658],{"class":143},"    .salary",[127,72660,148],{"class":147},[127,72662,72663,72665,72667,72669,72671],{"class":129,"line":2321},[127,72664,55305],{"class":154},[127,72666,158],{"class":147},[127,72668,986],{"class":154},[127,72670,291],{"class":290},[127,72672,164],{"class":147},[127,72674,72675,72677,72679,72681,72683],{"class":129,"line":2326},[127,72676,55319],{"class":154},[127,72678,158],{"class":147},[127,72680,1374],{"class":154},[127,72682,291],{"class":290},[127,72684,164],{"class":147},[127,72686,72687,72689,72691,72693],{"class":129,"line":3119},[127,72688,62313],{"class":154},[127,72690,158],{"class":147},[127,72692,469],{"class":154},[127,72694,164],{"class":147},[127,72696,72697,72699,72701,72703,72705],{"class":129,"line":3133},[127,72698,62283],{"class":154},[127,72700,158],{"class":147},[127,72702,1250],{"class":154},[127,72704,291],{"class":290},[127,72706,164],{"class":147},[127,72708,72709],{"class":129,"line":3141},[127,72710,2729],{"class":147},[127,72712,72713],{"class":129,"line":3146},[127,72714,2942],{"emptyLinePlaceholder":606},[127,72716,72717,72720],{"class":129,"line":3152},[127,72718,72719],{"class":143},"    .gender",[127,72721,32006],{"class":147},[127,72723,72724,72727],{"class":129,"line":3158},[127,72725,72726],{"class":143},"    .city",[127,72728,148],{"class":147},[127,72730,72731,72733,72735,72737,72739],{"class":129,"line":3163},[127,72732,55305],{"class":154},[127,72734,158],{"class":147},[127,72736,986],{"class":154},[127,72738,291],{"class":290},[127,72740,164],{"class":147},[127,72742,72743,72745,72747,72749,72751],{"class":129,"line":8490},[127,72744,55319],{"class":154},[127,72746,158],{"class":147},[127,72748,1499],{"class":154},[127,72750,291],{"class":290},[127,72752,164],{"class":147},[127,72754,72755,72757,72759,72761],{"class":129,"line":8514},[127,72756,62313],{"class":154},[127,72758,158],{"class":147},[127,72760,469],{"class":154},[127,72762,164],{"class":147},[127,72764,72765,72767,72769,72771,72773],{"class":129,"line":8519},[127,72766,62283],{"class":154},[127,72768,158],{"class":147},[127,72770,1250],{"class":154},[127,72772,291],{"class":290},[127,72774,164],{"class":147},[127,72776,72777,72779,72781,72783,72785,72787,72790,72792,72794,72796,72799,72801,72803],{"class":129,"line":8525},[127,72778,62510],{"class":154},[127,72780,158],{"class":147},[127,72782,893],{"class":154},[127,72784,291],{"class":290},[127,72786,52058],{"class":154},[127,72788,72789],{"class":154}," rgb",[127,72791,681],{"class":147},[127,72793,2265],{"class":154},[127,72795,12977],{"class":147},[127,72797,72798],{"class":154},"197",[127,72800,12977],{"class":147},[127,72802,72798],{"class":154},[127,72804,3261],{"class":147},[127,72806,72807],{"class":129,"line":8552},[127,72808,2729],{"class":147},[127,72810,72811],{"class":129,"line":8557},[127,72812,2942],{"emptyLinePlaceholder":606},[127,72814,72815,72818],{"class":129,"line":8563},[127,72816,72817],{"class":140},"    button",[127,72819,148],{"class":147},[127,72821,72822,72824,72826,72828,72830],{"class":129,"line":8575},[127,72823,55319],{"class":154},[127,72825,158],{"class":147},[127,72827,1499],{"class":154},[127,72829,291],{"class":290},[127,72831,164],{"class":147},[127,72833,72834,72836,72838,72840,72842],{"class":129,"line":8587},[127,72835,55305],{"class":154},[127,72837,158],{"class":147},[127,72839,1159],{"class":154},[127,72841,291],{"class":290},[127,72843,164],{"class":147},[127,72845,72846,72848,72850,72853,72855,72857,72859,72862,72864,72866],{"class":129,"line":8599},[127,72847,55418],{"class":154},[127,72849,158],{"class":147},[127,72851,72852],{"class":154},"rgb",[127,72854,681],{"class":147},[127,72856,1643],{"class":154},[127,72858,12977],{"class":147},[127,72860,72861],{"class":154},"187",[127,72863,12977],{"class":147},[127,72865,974],{"class":154},[127,72867,3261],{"class":147},[127,72869,72870,72872,72874,72876],{"class":129,"line":10258},[127,72871,57950],{"class":154},[127,72873,158],{"class":147},[127,72875,61375],{"class":154},[127,72877,164],{"class":147},[127,72879,72880,72882,72884,72886],{"class":129,"line":10283},[127,72881,62510],{"class":154},[127,72883,158],{"class":147},[127,72885,867],{"class":154},[127,72887,164],{"class":147},[127,72889,72890],{"class":129,"line":10306},[127,72891,2729],{"class":147},[127,72893,72894],{"class":129,"line":10330},[127,72895,2942],{"emptyLinePlaceholder":606},[127,72897,72898,72900,72902],{"class":129,"line":10335},[127,72899,72817],{"class":140},[127,72901,52224],{"class":140},[127,72903,148],{"class":147},[127,72905,72906,72908,72910,72913],{"class":129,"line":10340},[127,72907,55543],{"class":154},[127,72909,158],{"class":147},[127,72911,72912],{"class":154},"inline-block",[127,72914,164],{"class":147},[127,72916,72917,72919,72921,72923,72925],{"class":129,"line":10345},[127,72918,55305],{"class":154},[127,72920,158],{"class":147},[127,72922,1121],{"class":154},[127,72924,291],{"class":290},[127,72926,164],{"class":147},[127,72928,72929,72931,72933,72935,72937],{"class":129,"line":10354},[127,72930,55319],{"class":154},[127,72932,158],{"class":147},[127,72934,1121],{"class":154},[127,72936,291],{"class":290},[127,72938,164],{"class":147},[127,72940,72941,72943,72945,72947,72949],{"class":129,"line":10359},[127,72942,57893],{"class":154},[127,72944,158],{"class":147},[127,72946,1147],{"class":154},[127,72948,291],{"class":290},[127,72950,164],{"class":147},[127,72952,72953,72955,72957,72959,72961,72963,72966],{"class":129,"line":10365},[127,72954,62510],{"class":154},[127,72956,158],{"class":147},[127,72958,893],{"class":154},[127,72960,291],{"class":290},[127,72962,52058],{"class":154},[127,72964,72965],{"class":154}," #fff",[127,72967,164],{"class":147},[127,72969,72970,72972,72974,72976,72978],{"class":129,"line":10386},[127,72971,55668],{"class":154},[127,72973,158],{"class":147},[127,72975,994],{"class":154},[127,72977,291],{"class":290},[127,72979,164],{"class":147},[127,72981,72982,72984,72986,72988,72990],{"class":129,"line":10392},[127,72983,62283],{"class":154},[127,72985,158],{"class":147},[127,72987,893],{"class":154},[127,72989,291],{"class":290},[127,72991,164],{"class":147},[127,72993,72994],{"class":129,"line":10406},[127,72995,2729],{"class":147},[127,72997,72998],{"class":129,"line":10412},[127,72999,2942],{"emptyLinePlaceholder":606},[127,73001,73002,73005],{"class":129,"line":10439},[127,73003,73004],{"class":143},"    .total",[127,73006,148],{"class":147},[127,73008,73009,73011,73013,73015,73017],{"class":129,"line":10448},[127,73010,55305],{"class":154},[127,73012,158],{"class":147},[127,73014,62162],{"class":154},[127,73016,291],{"class":290},[127,73018,164],{"class":147},[127,73020,73021,73023,73025,73027,73029],{"class":129,"line":10454},[127,73022,55319],{"class":154},[127,73024,158],{"class":147},[127,73026,1076],{"class":154},[127,73028,291],{"class":290},[127,73030,164],{"class":147},[127,73032,73033,73035,73037,73039,73041],{"class":129,"line":10462},[127,73034,57893],{"class":154},[127,73036,158],{"class":147},[127,73038,1076],{"class":154},[127,73040,291],{"class":290},[127,73042,164],{"class":147},[127,73044,73045,73047,73049,73052],{"class":129,"line":10467},[127,73046,57820],{"class":154},[127,73048,158],{"class":147},[127,73050,73051],{"class":154},"right",[127,73053,164],{"class":147},[127,73055,73056,73058,73060,73062,73064,73066,73068,73070],{"class":129,"line":17145},[127,73057,55241],{"class":154},[127,73059,158],{"class":147},[127,73061,1076],{"class":154},[127,73063,291],{"class":290},[127,73065,52093],{"class":154},[127,73067,2580],{"class":154},[127,73069,291],{"class":290},[127,73071,164],{"class":147},[127,73073,73074,73077,73079,73081,73083],{"class":129,"line":17151},[127,73075,73076],{"class":154},"      padding-right",[127,73078,158],{"class":147},[127,73080,1121],{"class":154},[127,73082,291],{"class":290},[127,73084,164],{"class":147},[127,73086,73087,73089,73091,73093,73095],{"class":129,"line":17174},[127,73088,55456],{"class":154},[127,73090,158],{"class":147},[127,73092,1198],{"class":154},[127,73094,291],{"class":290},[127,73096,164],{"class":147},[127,73098,73099,73101,73103,73105,73107,73110,73112,73115,73117,73119],{"class":129,"line":17180},[127,73100,55418],{"class":154},[127,73102,158],{"class":147},[127,73104,72852],{"class":154},[127,73106,681],{"class":147},[127,73108,73109],{"class":154},"237",[127,73111,12977],{"class":147},[127,73113,73114],{"class":154},"235",[127,73116,12977],{"class":147},[127,73118,73114],{"class":154},[127,73120,3261],{"class":147},[127,73122,73123,73126,73128,73130],{"class":129,"line":17203},[127,73124,73125],{"class":154},"      box-sizing",[127,73127,158],{"class":147},[127,73129,61038],{"class":154},[127,73131,164],{"class":147},[127,73133,73134],{"class":129,"line":17217},[127,73135,2729],{"class":147},[127,73137,73138],{"class":129,"line":17237},[127,73139,2942],{"emptyLinePlaceholder":606},[127,73141,73142,73144,73146],{"class":129,"line":17243},[127,73143,73004],{"class":143},[127,73145,52224],{"class":140},[127,73147,148],{"class":147},[127,73149,73150,73152,73154,73156],{"class":129,"line":17254},[127,73151,57950],{"class":154},[127,73153,158],{"class":147},[127,73155,405],{"class":154},[127,73157,164],{"class":147},[127,73159,73160],{"class":129,"line":17277},[127,73161,2729],{"class":147},[127,73163,73164],{"class":129,"line":17299},[127,73165,2942],{"emptyLinePlaceholder":606},[127,73167,73168,73170],{"class":129,"line":17304},[127,73169,65556],{"class":140},[127,73171,148],{"class":147},[127,73173,73174,73176,73178,73180,73182],{"class":129,"line":17310},[127,73175,55305],{"class":154},[127,73177,158],{"class":147},[127,73179,62162],{"class":154},[127,73181,291],{"class":290},[127,73183,164],{"class":147},[127,73185,73186,73188,73190,73193],{"class":129,"line":17324},[127,73187,55241],{"class":154},[127,73189,158],{"class":147},[127,73191,73192],{"class":154},"auto",[127,73194,164],{"class":147},[127,73196,73197,73199,73201,73203],{"class":129,"line":17337},[127,73198,65563],{"class":154},[127,73200,158],{"class":147},[127,73202,65568],{"class":154},[127,73204,164],{"class":147},[127,73206,73207],{"class":129,"line":17342},[127,73208,2729],{"class":147},[127,73210,73211],{"class":129,"line":17356},[127,73212,2942],{"emptyLinePlaceholder":606},[127,73214,73215,73217],{"class":129,"line":17361},[127,73216,65648],{"class":140},[127,73218,148],{"class":147},[127,73220,73221,73223,73225,73227,73229,73231,73233,73235,73237,73239],{"class":129,"line":17367},[127,73222,55418],{"class":154},[127,73224,158],{"class":147},[127,73226,72852],{"class":154},[127,73228,681],{"class":147},[127,73230,73109],{"class":154},[127,73232,12977],{"class":147},[127,73234,73114],{"class":154},[127,73236,12977],{"class":147},[127,73238,73114],{"class":154},[127,73240,3261],{"class":147},[127,73242,73243],{"class":129,"line":17372},[127,73244,2729],{"class":147},[127,73246,73247],{"class":129,"line":17386},[127,73248,2942],{"emptyLinePlaceholder":606},[127,73250,73251,73253],{"class":129,"line":17391},[127,73252,65648],{"class":140},[127,73254,32006],{"class":147},[127,73256,73257,73259],{"class":129,"line":17396},[127,73258,65714],{"class":140},[127,73260,148],{"class":147},[127,73262,73263,73265,73267,73269,73271],{"class":129,"line":17410},[127,73264,55319],{"class":154},[127,73266,158],{"class":147},[127,73268,948],{"class":154},[127,73270,291],{"class":290},[127,73272,164],{"class":147},[127,73274,73275,73277,73279,73281],{"class":129,"line":17422},[127,73276,57820],{"class":154},[127,73278,158],{"class":147},[127,73280,24276],{"class":154},[127,73282,164],{"class":147},[127,73284,73285,73287,73289,73291,73293],{"class":129,"line":17427},[127,73286,55456],{"class":154},[127,73288,158],{"class":147},[127,73290,1224],{"class":154},[127,73292,291],{"class":290},[127,73294,164],{"class":147},[127,73296,73297,73299,73301,73303,73305,73307,73309,73311,73314,73316,73319,73321,73323],{"class":129,"line":17440},[127,73298,62510],{"class":154},[127,73300,158],{"class":147},[127,73302,893],{"class":154},[127,73304,291],{"class":290},[127,73306,52058],{"class":154},[127,73308,72789],{"class":154},[127,73310,681],{"class":147},[127,73312,73313],{"class":154},"228",[127,73315,12977],{"class":147},[127,73317,73318],{"class":154},"225",[127,73320,12977],{"class":147},[127,73322,73318],{"class":154},[127,73324,3261],{"class":147},[127,73326,73327,73330,73332,73334,73336],{"class":129,"line":17445},[127,73328,73329],{"class":154},"      padding-left",[127,73331,158],{"class":147},[127,73333,994],{"class":154},[127,73335,291],{"class":290},[127,73337,164],{"class":147},[127,73339,73340,73342,73344,73346,73349,73351,73353],{"class":129,"line":17450},[127,73341,62393],{"class":154},[127,73343,158],{"class":147},[127,73345,28661],{"class":154},[127,73347,73348],{"class":154}," linear",[127,73350,62400],{"class":154},[127,73352,1369],{"class":290},[127,73354,164],{"class":147},[127,73356,73357],{"class":129,"line":17455},[127,73358,2729],{"class":147},[127,73360,73361],{"class":129,"line":17468},[127,73362,2942],{"emptyLinePlaceholder":606},[127,73364,73365,73368,73370,73372],{"class":129,"line":17473},[127,73366,73367],{"class":140},"    tbody",[127,73369,70677],{"class":140},[127,73371,61473],{"class":143},[127,73373,148],{"class":147},[127,73375,73376,73378,73380,73382,73384,73386,73388,73390,73392,73394],{"class":129,"line":33173},[127,73377,55418],{"class":154},[127,73379,158],{"class":147},[127,73381,72852],{"class":154},[127,73383,681],{"class":147},[127,73385,73109],{"class":154},[127,73387,12977],{"class":147},[127,73389,73114],{"class":154},[127,73391,12977],{"class":147},[127,73393,73114],{"class":154},[127,73395,3261],{"class":147},[127,73397,73398,73400,73402,73404],{"class":129,"line":33179},[127,73399,62558],{"class":154},[127,73401,158],{"class":147},[127,73403,62563],{"class":154},[127,73405,164],{"class":147},[127,73407,73408],{"class":129,"line":33185},[127,73409,2729],{"class":147},[127,73411,73412],{"class":129,"line":33191},[127,73413,2942],{"emptyLinePlaceholder":606},[127,73415,73416,73418,73420,73423,73425],{"class":129,"line":33197},[127,73417,73367],{"class":140},[127,73419,70677],{"class":140},[127,73421,73422],{"class":140}," td",[127,73424,1943],{"class":140},[127,73426,148],{"class":147},[127,73428,73429,73431,73433,73435],{"class":129,"line":33208},[127,73430,55543],{"class":154},[127,73432,158],{"class":147},[127,73434,61402],{"class":154},[127,73436,164],{"class":147},[127,73438,73439,73441,73443,73445,73447],{"class":129,"line":33214},[127,73440,55305],{"class":154},[127,73442,158],{"class":147},[127,73444,1581],{"class":154},[127,73446,291],{"class":290},[127,73448,164],{"class":147},[127,73450,73451,73453,73455,73457,73459],{"class":129,"line":33234},[127,73452,55319],{"class":154},[127,73454,158],{"class":147},[127,73456,1499],{"class":154},[127,73458,291],{"class":290},[127,73460,164],{"class":147},[127,73462,73463,73465,73467,73469,73471],{"class":129,"line":33240},[127,73464,57893],{"class":154},[127,73466,158],{"class":147},[127,73468,1499],{"class":154},[127,73470,291],{"class":290},[127,73472,164],{"class":147},[127,73474,73475,73477,73479,73481,73483],{"class":129,"line":33251},[127,73476,62610],{"class":154},[127,73478,158],{"class":147},[127,73480,530],{"class":154},[127,73482,291],{"class":290},[127,73484,164],{"class":147},[127,73486,73487,73489,73491,73493],{"class":129,"line":33257},[127,73488,57950],{"class":154},[127,73490,158],{"class":147},[127,73492,61375],{"class":154},[127,73494,164],{"class":147},[127,73496,73497,73499,73501,73503],{"class":129,"line":33263},[127,73498,57820],{"class":154},[127,73500,158],{"class":147},[127,73502,161],{"class":154},[127,73504,164],{"class":147},[127,73506,73507,73509,73511,73513],{"class":129,"line":33269},[127,73508,64503],{"class":154},[127,73510,158],{"class":147},[127,73512,469],{"class":154},[127,73514,164],{"class":147},[127,73516,73517,73519,73521,73524],{"class":129,"line":33275},[127,73518,55418],{"class":154},[127,73520,158],{"class":147},[127,73522,73523],{"class":154},"orange",[127,73525,164],{"class":147},[127,73527,73528,73530,73532,73535,73537],{"class":129,"line":33281},[127,73529,55668],{"class":154},[127,73531,158],{"class":147},[127,73533,73534],{"class":154},"12.5",[127,73536,291],{"class":290},[127,73538,164],{"class":147},[127,73540,73541],{"class":129,"line":33287},[127,73542,2729],{"class":147},[127,73544,73545,73547,73549],{"class":129,"line":33293},[127,73546,52952],{"class":147},[127,73548,575],{"class":140},[127,73550,51846],{"class":147},[127,73552,73553,73555,73557],{"class":129,"line":33313},[127,73554,52321],{"class":147},[127,73556,51873],{"class":140},[127,73558,51846],{"class":147},[127,73560,73561],{"class":129,"line":33319},[127,73562,2942],{"emptyLinePlaceholder":606},[127,73564,73565,73567,73569],{"class":129,"line":33335},[127,73566,1584],{"class":147},[127,73568,275],{"class":140},[127,73570,51846],{"class":147},[127,73572,73573,73575,73577,73580,73582],{"class":129,"line":33341},[127,73574,52679],{"class":147},[127,73576,14],{"class":140},[127,73578,73579],{"class":147},">学生就业统计表\u003C\u002F",[127,73581,14],{"class":140},[127,73583,51846],{"class":147},[127,73585,73586,73588,73590,73592,73594,73596,73598,73600,73602],{"class":129,"line":33355},[127,73587,52679],{"class":147},[127,73589,67158],{"class":140},[127,73591,54021],{"class":143},[127,73593,725],{"class":147},[127,73595,63197],{"class":781},[127,73597,69603],{"class":143},[127,73599,725],{"class":147},[127,73601,32316],{"class":781},[127,73603,51846],{"class":147},[127,73605,73606,73608,73610,73612,73614,73616,73618,73620,73622,73624,73626,73629,73631,73633,73635],{"class":129,"line":33361},[127,73607,51880],{"class":147},[127,73609,54356],{"class":140},[127,73611,54359],{"class":143},[127,73613,725],{"class":147},[127,73615,63232],{"class":781},[127,73617,15462],{"class":143},[127,73619,725],{"class":147},[127,73621,69629],{"class":781},[127,73623,61553],{"class":143},[127,73625,725],{"class":147},[127,73627,73628],{"class":781},"\"姓名\"",[127,73630,54021],{"class":143},[127,73632,725],{"class":147},[127,73634,69629],{"class":781},[127,73636,51846],{"class":147},[127,73638,73639,73641,73643,73645,73647,73649,73651,73653,73655,73657,73659,73662,73664,73666,73668],{"class":129,"line":33376},[127,73640,51880],{"class":147},[127,73642,54356],{"class":140},[127,73644,54359],{"class":143},[127,73646,725],{"class":147},[127,73648,63232],{"class":781},[127,73650,15462],{"class":143},[127,73652,725],{"class":147},[127,73654,69657],{"class":781},[127,73656,61553],{"class":143},[127,73658,725],{"class":147},[127,73660,73661],{"class":781},"\"年龄\"",[127,73663,54021],{"class":143},[127,73665,725],{"class":147},[127,73667,69657],{"class":781},[127,73669,51846],{"class":147},[127,73671,73672,73674,73676,73678,73680,73682,73684,73686,73688,73690,73692,73695,73697,73699,73701],{"class":129,"line":33382},[127,73673,51880],{"class":147},[127,73675,54356],{"class":140},[127,73677,54359],{"class":143},[127,73679,725],{"class":147},[127,73681,63232],{"class":781},[127,73683,15462],{"class":143},[127,73685,725],{"class":147},[127,73687,69759],{"class":781},[127,73689,61553],{"class":143},[127,73691,725],{"class":147},[127,73693,73694],{"class":781},"\"薪资\"",[127,73696,54021],{"class":143},[127,73698,725],{"class":147},[127,73700,69759],{"class":781},[127,73702,51846],{"class":147},[127,73704,73705,73707,73709,73711,73713,73715,73717,73719,73721,73723,73725,73727],{"class":129,"line":33391},[127,73706,51880],{"class":147},[127,73708,69677],{"class":140},[127,73710,15462],{"class":143},[127,73712,725],{"class":147},[127,73714,69684],{"class":781},[127,73716,15501],{"class":143},[127,73718,725],{"class":147},[127,73720,8194],{"class":781},[127,73722,54021],{"class":143},[127,73724,725],{"class":147},[127,73726,69684],{"class":781},[127,73728,51846],{"class":147},[127,73730,73731,73733,73735,73737,73739,73741,73743,73745],{"class":129,"line":33397},[127,73732,55768],{"class":147},[127,73734,69699],{"class":140},[127,73736,67184],{"class":143},[127,73738,725],{"class":147},[127,73740,10503],{"class":781},[127,73742,69708],{"class":147},[127,73744,69699],{"class":140},[127,73746,51846],{"class":147},[127,73748,73749,73751,73753,73755,73757,73759,73761,73763],{"class":129,"line":33406},[127,73750,55768],{"class":147},[127,73752,69699],{"class":140},[127,73754,67184],{"class":143},[127,73756,725],{"class":147},[127,73758,10572],{"class":781},[127,73760,69727],{"class":147},[127,73762,69699],{"class":140},[127,73764,51846],{"class":147},[127,73766,73767,73769,73771],{"class":129,"line":33412},[127,73768,52312],{"class":147},[127,73770,69677],{"class":140},[127,73772,51846],{"class":147},[127,73774,73775,73777,73779,73781,73783,73785,73787,73789,73791,73793,73795,73797],{"class":129,"line":33418},[127,73776,51880],{"class":147},[127,73778,69677],{"class":140},[127,73780,15462],{"class":143},[127,73782,725],{"class":147},[127,73784,69781],{"class":781},[127,73786,15501],{"class":143},[127,73788,725],{"class":147},[127,73790,8194],{"class":781},[127,73792,54021],{"class":143},[127,73794,725],{"class":147},[127,73796,69781],{"class":781},[127,73798,51846],{"class":147},[127,73800,73801,73803,73805,73807,73809,73811,73813,73815],{"class":129,"line":33427},[127,73802,55768],{"class":147},[127,73804,69699],{"class":140},[127,73806,67184],{"class":143},[127,73808,725],{"class":147},[127,73810,69802],{"class":781},[127,73812,69805],{"class":147},[127,73814,69699],{"class":140},[127,73816,51846],{"class":147},[127,73818,73819,73821,73823,73825,73827,73829,73831,73833],{"class":129,"line":33433},[127,73820,55768],{"class":147},[127,73822,69699],{"class":140},[127,73824,67184],{"class":143},[127,73826,725],{"class":147},[127,73828,69822],{"class":781},[127,73830,69825],{"class":147},[127,73832,69699],{"class":140},[127,73834,51846],{"class":147},[127,73836,73837,73839,73841,73843,73845,73847,73849,73851],{"class":129,"line":33444},[127,73838,55768],{"class":147},[127,73840,69699],{"class":140},[127,73842,67184],{"class":143},[127,73844,725],{"class":147},[127,73846,69842],{"class":781},[127,73848,69845],{"class":147},[127,73850,69699],{"class":140},[127,73852,51846],{"class":147},[127,73854,73855,73857,73859,73861,73863,73865,73867,73869],{"class":129,"line":33450},[127,73856,55768],{"class":147},[127,73858,69699],{"class":140},[127,73860,67184],{"class":143},[127,73862,725],{"class":147},[127,73864,69862],{"class":781},[127,73866,69865],{"class":147},[127,73868,69699],{"class":140},[127,73870,51846],{"class":147},[127,73872,73873,73875,73877,73879,73881,73883,73885,73887],{"class":129,"line":33469},[127,73874,55768],{"class":147},[127,73876,69699],{"class":140},[127,73878,67184],{"class":143},[127,73880,725],{"class":147},[127,73882,69882],{"class":781},[127,73884,69885],{"class":147},[127,73886,69699],{"class":140},[127,73888,51846],{"class":147},[127,73890,73891,73893,73895],{"class":129,"line":33475},[127,73892,52312],{"class":147},[127,73894,69677],{"class":140},[127,73896,51846],{"class":147},[127,73898,73899,73901,73903],{"class":129,"line":33486},[127,73900,51880],{"class":147},[127,73902,54422],{"class":140},[127,73904,51846],{"class":147},[127,73906,73907,73909,73911,73914,73916,73919,73921],{"class":129,"line":33492},[127,73908,55768],{"class":147},[127,73910,127],{"class":140},[127,73912,73913],{"class":147},">+\u003C\u002F",[127,73915,127],{"class":140},[127,73917,73918],{"class":147},">添加\u003C\u002F",[127,73920,54422],{"class":140},[127,73922,51846],{"class":147},[127,73924,73925,73927,73929],{"class":129,"line":33512},[127,73926,52952],{"class":147},[127,73928,67158],{"class":140},[127,73930,51846],{"class":147},[127,73932,73933,73935,73937,73939,73941,73943,73946,73948,73951,73953,73956,73958],{"class":129,"line":33528},[127,73934,52679],{"class":147},[127,73936,52147],{"class":140},[127,73938,54021],{"class":143},[127,73940,725],{"class":147},[127,73942,63113],{"class":781},[127,73944,73945],{"class":147},">共有数据 \u003C",[127,73947,127],{"class":140},[127,73949,73950],{"class":147},">0\u003C\u002F",[127,73952,127],{"class":140},[127,73954,73955],{"class":147},"> 条\u003C\u002F",[127,73957,52147],{"class":140},[127,73959,51846],{"class":147},[127,73961,73962,73964,73966],{"class":129,"line":33534},[127,73963,52679],{"class":147},[127,73965,814],{"class":140},[127,73967,51846],{"class":147},[127,73969,73970,73972,73974],{"class":129,"line":33548},[127,73971,51880],{"class":147},[127,73973,817],{"class":140},[127,73975,51846],{"class":147},[127,73977,73978,73980,73982],{"class":129,"line":33554},[127,73979,55768],{"class":147},[127,73981,820],{"class":140},[127,73983,51846],{"class":147},[127,73985,73986,73988,73990,73993,73995],{"class":129,"line":33560},[127,73987,55836],{"class":147},[127,73989,823],{"class":140},[127,73991,73992],{"class":147},">ID\u003C\u002F",[127,73994,823],{"class":140},[127,73996,51846],{"class":147},[127,73998,73999,74001,74003,74005,74007],{"class":129,"line":33571},[127,74000,55836],{"class":147},[127,74002,823],{"class":140},[127,74004,69988],{"class":147},[127,74006,823],{"class":140},[127,74008,51846],{"class":147},[127,74010,74011,74013,74015,74017,74019],{"class":129,"line":33577},[127,74012,55836],{"class":147},[127,74014,823],{"class":140},[127,74016,70001],{"class":147},[127,74018,823],{"class":140},[127,74020,51846],{"class":147},[127,74022,74023,74025,74027,74029,74031],{"class":129,"line":33583},[127,74024,55836],{"class":147},[127,74026,823],{"class":140},[127,74028,70014],{"class":147},[127,74030,823],{"class":140},[127,74032,51846],{"class":147},[127,74034,74035,74037,74039,74041,74043],{"class":129,"line":33593},[127,74036,55836],{"class":147},[127,74038,823],{"class":140},[127,74040,70027],{"class":147},[127,74042,823],{"class":140},[127,74044,51846],{"class":147},[127,74046,74047,74049,74051,74053,74055],{"class":129,"line":33599},[127,74048,55836],{"class":147},[127,74050,823],{"class":140},[127,74052,70040],{"class":147},[127,74054,823],{"class":140},[127,74056,51846],{"class":147},[127,74058,74059,74061,74063,74066,74068],{"class":129,"line":33610},[127,74060,55836],{"class":147},[127,74062,823],{"class":140},[127,74064,74065],{"class":147},">录入时间\u003C\u002F",[127,74067,823],{"class":140},[127,74069,51846],{"class":147},[127,74071,74072,74074,74076,74078,74080],{"class":129,"line":33616},[127,74073,55836],{"class":147},[127,74075,823],{"class":140},[127,74077,70053],{"class":147},[127,74079,823],{"class":140},[127,74081,51846],{"class":147},[127,74083,74084,74086,74088],{"class":129,"line":33626},[127,74085,55941],{"class":147},[127,74087,820],{"class":140},[127,74089,51846],{"class":147},[127,74091,74092,74094,74096],{"class":129,"line":33631},[127,74093,52312],{"class":147},[127,74095,817],{"class":140},[127,74097,51846],{"class":147},[127,74099,74100,74102,74104],{"class":129,"line":33637},[127,74101,51880],{"class":147},[127,74103,860],{"class":140},[127,74105,51846],{"class":147},[127,74107,74108],{"class":129,"line":33686},[127,74109,74110],{"class":133},"      \u003C!-- \u003Ctr>\n",[127,74112,74113],{"class":129,"line":33733},[127,74114,74115],{"class":133},"        \u003Ctd>1\u003C\u002Ftd>\n",[127,74117,74118],{"class":129,"line":33738},[127,74119,74115],{"class":133},[127,74121,74122],{"class":129,"line":33744},[127,74123,74115],{"class":133},[127,74125,74126],{"class":129,"line":33763},[127,74127,74115],{"class":133},[127,74129,74130],{"class":129,"line":33769},[127,74131,74115],{"class":133},[127,74133,74134],{"class":129,"line":33789},[127,74135,74115],{"class":133},[127,74137,74138],{"class":129,"line":33795},[127,74139,74115],{"class":133},[127,74141,74142],{"class":129,"line":33801},[127,74143,74144],{"class":133},"        \u003Ctd>\n",[127,74146,74147],{"class":129,"line":33811},[127,74148,74149],{"class":133},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[127,74151,74152],{"class":129,"line":33816},[127,74153,74154],{"class":133},"        \u003C\u002Ftd>\n",[127,74156,74157],{"class":129,"line":33822},[127,74158,74159],{"class":133},"      \u003C\u002Ftr> -->\n",[127,74161,74162,74164,74166],{"class":129,"line":33838},[127,74163,52312],{"class":147},[127,74165,860],{"class":140},[127,74167,51846],{"class":147},[127,74169,74170,74172,74174],{"class":129,"line":33883},[127,74171,52952],{"class":147},[127,74173,814],{"class":140},[127,74175,51846],{"class":147},[127,74177,74178,74180,74182],{"class":129,"line":33889},[127,74179,52679],{"class":147},[127,74181,52348],{"class":140},[127,74183,51846],{"class":147},[127,74185,74186],{"class":129,"line":33895},[127,74187,74188],{"class":133},"    \u002F\u002F const initData = [{\n",[127,74190,74191],{"class":129,"line":33901},[127,74192,74193],{"class":133},"    \u002F\u002F   unameId: 1,\n",[127,74195,74196],{"class":129,"line":33912},[127,74197,74198],{"class":133},"    \u002F\u002F   uname: '华晨宇',\n",[127,74200,74201],{"class":129,"line":33918},[127,74202,74203],{"class":133},"    \u002F\u002F   age: 22,\n",[127,74205,74206],{"class":129,"line":33924},[127,74207,74208],{"class":133},"    \u002F\u002F   salary: 12000,\n",[127,74210,74211],{"class":129,"line":33930},[127,74212,74213],{"class":133},"    \u002F\u002F   gender: '男',\n",[127,74215,74216],{"class":129,"line":33948},[127,74217,74218],{"class":133},"    \u002F\u002F   city: '北京',\n",[127,74220,74221],{"class":129,"line":33962},[127,74222,74223],{"class":133},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[127,74225,74226],{"class":129,"line":33971},[127,74227,74228],{"class":133},"    \u002F\u002F }]\n",[127,74230,74231],{"class":129,"line":33980},[127,74232,74233],{"class":133},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[127,74235,74236],{"class":129,"line":33989},[127,74237,74238],{"class":133},"    \u002F\u002F 1.渲染业务\n",[127,74240,74241],{"class":129,"line":33998},[127,74242,74243],{"class":133},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[127,74245,74246],{"class":129,"line":34004},[127,74247,74248],{"class":133},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[127,74250,74251],{"class":129,"line":34010},[127,74252,74253],{"class":133},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[127,74255,74256],{"class":129,"line":34018},[127,74257,2942],{"emptyLinePlaceholder":606},[127,74259,74260],{"class":129,"line":34023},[127,74261,74262],{"class":133},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[127,74264,74265],{"class":129,"line":34029},[127,74266,74267],{"class":133},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[127,74269,74270,74272,74274,74276],{"class":129,"line":34040},[127,74271,11763],{"class":290},[127,74273,58228],{"class":154},[127,74275,14106],{"class":290},[127,74277,52373],{"class":147},[127,74279,74280,74283,74285],{"class":129,"line":34046},[127,74281,74282],{"class":147},"    console.",[127,74284,58780],{"class":143},[127,74286,52947],{"class":147},[127,74288,74289],{"class":129,"line":34066},[127,74290,2942],{"emptyLinePlaceholder":606},[127,74292,74293],{"class":129,"line":34072},[127,74294,74295],{"class":133},"    \u002F\u002F 时间函数\n",[127,74297,74298,74300,74303],{"class":129,"line":34078},[127,74299,70617],{"class":290},[127,74301,74302],{"class":143}," getTime",[127,74304,11395],{"class":147},[127,74306,74307,74309,74312,74314,74316,74319],{"class":129,"line":34084},[127,74308,58761],{"class":290},[127,74310,74311],{"class":154}," date",[127,74313,14106],{"class":290},[127,74315,12120],{"class":290},[127,74317,74318],{"class":143}," Date",[127,74320,2518],{"class":147},[127,74322,74323,74325,74327,74329,74332,74335,74337,74339,74341,74344,74347,74349,74351,74353,74355,74357,74359,74361],{"class":129,"line":34101},[127,74324,58761],{"class":290},[127,74326,16632],{"class":154},[127,74328,14106],{"class":290},[127,74330,74331],{"class":147}," date.",[127,74333,74334],{"class":143},"getHours",[127,74336,13592],{"class":147},[127,74338,1584],{"class":290},[127,74340,2580],{"class":154},[127,74342,74343],{"class":290}," ?",[127,74345,74346],{"class":781}," '0'",[127,74348,46106],{"class":290},[127,74350,74331],{"class":147},[127,74352,74334],{"class":143},[127,74354,13592],{"class":147},[127,74356,1533],{"class":290},[127,74358,74331],{"class":147},[127,74360,74334],{"class":143},[127,74362,2518],{"class":147},[127,74364,74365,74367,74370,74372,74374,74377,74379,74381,74383,74385,74387,74389,74391,74393,74395,74397,74399,74401],{"class":129,"line":34107},[127,74366,58761],{"class":290},[127,74368,74369],{"class":154}," m",[127,74371,14106],{"class":290},[127,74373,74331],{"class":147},[127,74375,74376],{"class":143},"getMinutes",[127,74378,13592],{"class":147},[127,74380,1584],{"class":290},[127,74382,2580],{"class":154},[127,74384,74343],{"class":290},[127,74386,74346],{"class":781},[127,74388,46106],{"class":290},[127,74390,74331],{"class":147},[127,74392,74376],{"class":143},[127,74394,13592],{"class":147},[127,74396,1533],{"class":290},[127,74398,74331],{"class":147},[127,74400,74376],{"class":143},[127,74402,2518],{"class":147},[127,74404,74405,74407,74409,74411,74413,74416,74418,74420,74422,74424,74426,74428,74430,74432,74434,74436,74438,74440],{"class":129,"line":34113},[127,74406,58761],{"class":290},[127,74408,8970],{"class":154},[127,74410,14106],{"class":290},[127,74412,74331],{"class":147},[127,74414,74415],{"class":143},"getSeconds",[127,74417,13592],{"class":147},[127,74419,1584],{"class":290},[127,74421,2580],{"class":154},[127,74423,74343],{"class":290},[127,74425,74346],{"class":781},[127,74427,46106],{"class":290},[127,74429,74331],{"class":147},[127,74431,74415],{"class":143},[127,74433,13592],{"class":147},[127,74435,1533],{"class":290},[127,74437,74331],{"class":147},[127,74439,74415],{"class":143},[127,74441,2518],{"class":147},[127,74443,74444,74446,74449,74451,74453,74456,74458,74461,74463,74466,74468,74470,74473,74475,74477,74479,74481,74483,74485,74488,74490,74493,74495,74498,74500,74502,74504],{"class":129,"line":34119},[127,74445,58761],{"class":290},[127,74447,74448],{"class":154}," str",[127,74450,14106],{"class":290},[127,74452,63436],{"class":781},[127,74454,74455],{"class":147},"date",[127,74457,1233],{"class":781},[127,74459,74460],{"class":143},"getFullYear",[127,74462,2969],{"class":781},[127,74464,74465],{"class":781},"}\u002F${",[127,74467,74455],{"class":147},[127,74469,1233],{"class":781},[127,74471,74472],{"class":143},"getMonth",[127,74474,13592],{"class":781},[127,74476,1156],{"class":290},[127,74478,25659],{"class":154},[127,74480,74465],{"class":781},[127,74482,74455],{"class":147},[127,74484,1233],{"class":781},[127,74486,74487],{"class":143},"getDate",[127,74489,2969],{"class":781},[127,74491,74492],{"class":781},"} ${",[127,74494,1090],{"class":147},[127,74496,74497],{"class":781},"}:${",[127,74499,1219],{"class":147},[127,74501,74497],{"class":781},[127,74503,1369],{"class":147},[127,74505,74506],{"class":781},"}`\n",[127,74508,74509,74512],{"class":129,"line":34125},[127,74510,74511],{"class":290},"      return",[127,74513,74514],{"class":147}," str\n",[127,74516,74517],{"class":129,"line":34131},[127,74518,2729],{"class":147},[127,74520,74521],{"class":129,"line":34158},[127,74522,74523],{"class":133},"    \u002F\u002F 渲染函数\n",[127,74525,74526,74528,74530,74532,74534,74536,74538,74540],{"class":129,"line":34182},[127,74527,11763],{"class":290},[127,74529,70280],{"class":154},[127,74531,14106],{"class":290},[127,74533,54931],{"class":147},[127,74535,54934],{"class":143},[127,74537,681],{"class":147},[127,74539,70291],{"class":781},[127,74541,687],{"class":147},[127,74543,74544,74546,74548],{"class":129,"line":34188},[127,74545,70617],{"class":290},[127,74547,70620],{"class":143},[127,74549,11395],{"class":147},[127,74551,74552],{"class":129,"line":34194},[127,74553,74554],{"class":133},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[127,74556,74557],{"class":129,"line":34200},[127,74558,74559],{"class":133},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[127,74561,74562,74564,74567,74569,74571,74574,74576,74578,74580,74583,74585,74588],{"class":129,"line":34211},[127,74563,58761],{"class":290},[127,74565,74566],{"class":154}," trArr",[127,74568,14106],{"class":290},[127,74570,52500],{"class":147},[127,74572,74573],{"class":143},"map",[127,74575,681],{"class":147},[127,74577,54984],{"class":290},[127,74579,2201],{"class":147},[127,74581,74582],{"class":5758},"ele",[127,74584,12977],{"class":147},[127,74586,74587],{"class":5758},"index",[127,74589,12984],{"class":147},[127,74591,74592,74594],{"class":129,"line":34222},[127,74593,15294],{"class":290},[127,74595,70701],{"class":781},[127,74597,74598],{"class":129,"line":34228},[127,74599,74600],{"class":781},"      \u003Ctr>\n",[127,74602,74603,74605,74607,74609,74612],{"class":129,"line":34245},[127,74604,70706],{"class":781},[127,74606,74582],{"class":147},[127,74608,1233],{"class":781},[127,74610,74611],{"class":147},"unameId",[127,74613,70721],{"class":781},[127,74615,74616,74618,74620,74622,74624],{"class":129,"line":34268},[127,74617,70706],{"class":781},[127,74619,74582],{"class":147},[127,74621,1233],{"class":781},[127,74623,70737],{"class":147},[127,74625,70721],{"class":781},[127,74627,74628,74630,74632,74634,74636],{"class":129,"line":34291},[127,74629,70706],{"class":781},[127,74631,74582],{"class":147},[127,74633,1233],{"class":781},[127,74635,70754],{"class":147},[127,74637,70721],{"class":781},[127,74639,74640,74642,74644,74646,74648],{"class":129,"line":34297},[127,74641,70706],{"class":781},[127,74643,74582],{"class":147},[127,74645,1233],{"class":781},[127,74647,70771],{"class":147},[127,74649,70721],{"class":781},[127,74651,74652,74654,74656,74658,74660],{"class":129,"line":34302},[127,74653,70706],{"class":781},[127,74655,74582],{"class":147},[127,74657,1233],{"class":781},[127,74659,70788],{"class":147},[127,74661,70721],{"class":781},[127,74663,74664,74666,74668,74670,74672],{"class":129,"line":34311},[127,74665,70706],{"class":781},[127,74667,74582],{"class":147},[127,74669,1233],{"class":781},[127,74671,70805],{"class":147},[127,74673,70721],{"class":781},[127,74675,74676,74678,74680,74682,74684],{"class":129,"line":34321},[127,74677,70706],{"class":781},[127,74679,74582],{"class":147},[127,74681,1233],{"class":781},[127,74683,2929],{"class":147},[127,74685,70721],{"class":781},[127,74687,74688],{"class":129,"line":34327},[127,74689,74144],{"class":781},[127,74691,74692,74695,74697],{"class":129,"line":34332},[127,74693,74694],{"class":781},"          \u003Ca href=\"#\" data-id=\"${",[127,74696,74587],{"class":147},[127,74698,74699],{"class":781},"}\">删除\u003C\u002Fa>\n",[127,74701,74702],{"class":129,"line":34338},[127,74703,74154],{"class":781},[127,74705,74706],{"class":129,"line":34351},[127,74707,74708],{"class":781},"      \u003C\u002Ftr>\n",[127,74710,74711],{"class":129,"line":34357},[127,74712,74713],{"class":781},"  `\n",[127,74715,74716],{"class":129,"line":34368},[127,74717,65348],{"class":147},[127,74719,74720,74722,74724],{"class":129,"line":34379},[127,74721,58777],{"class":147},[127,74723,58780],{"class":143},[127,74725,74726],{"class":147},"(trArr)\n",[127,74728,74729],{"class":129,"line":34398},[127,74730,2942],{"emptyLinePlaceholder":606},[127,74732,74733],{"class":129,"line":50058},[127,74734,74735],{"class":133},"      \u002F\u002F (2) 把数组转换为字符串join\n",[127,74737,74738],{"class":129,"line":50063},[127,74739,74740],{"class":133},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[127,74742,74743,74745,74747,74750,74753,74755,74758],{"class":129,"line":50072},[127,74744,70632],{"class":147},[127,74746,725],{"class":290},[127,74748,74749],{"class":147}," trArr.",[127,74751,74752],{"class":143},"join",[127,74754,681],{"class":147},[127,74756,74757],{"class":781},"''",[127,74759,687],{"class":147},[127,74761,74762],{"class":129,"line":50081},[127,74763,74764],{"class":133},"      \u002F\u002F 显示共有几条\n",[127,74766,74767,74769,74771,74773,74776,74779,74781,74783],{"class":129,"line":50086},[127,74768,56305],{"class":147},[127,74770,54934],{"class":143},[127,74772,681],{"class":147},[127,74774,74775],{"class":781},"'.total span'",[127,74777,74778],{"class":147},").innerHTML ",[127,74780,725],{"class":290},[127,74782,52500],{"class":147},[127,74784,56365],{"class":154},[127,74786,74787],{"class":129,"line":50091},[127,74788,2729],{"class":147},[127,74790,74791],{"class":129,"line":50096},[127,74792,74793],{"class":133},"    \u002F\u002F render()\n",[127,74795,74796],{"class":129,"line":50109},[127,74797,2942],{"emptyLinePlaceholder":606},[127,74799,74800],{"class":129,"line":50114},[127,74801,74802],{"class":133},"    \u002F\u002F 获取DOM对象\n",[127,74804,74805,74807,74809,74811,74813,74815,74817,74819],{"class":129,"line":50123},[127,74806,11763],{"class":290},[127,74808,70354],{"class":154},[127,74810,14106],{"class":290},[127,74812,54931],{"class":147},[127,74814,54934],{"class":143},[127,74816,681],{"class":147},[127,74818,70365],{"class":781},[127,74820,687],{"class":147},[127,74822,74823,74825,74827,74829,74831,74833,74835,74837],{"class":129,"line":50132},[127,74824,11763],{"class":290},[127,74826,70181],{"class":154},[127,74828,14106],{"class":290},[127,74830,54931],{"class":147},[127,74832,54934],{"class":143},[127,74834,681],{"class":147},[127,74836,70192],{"class":781},[127,74838,687],{"class":147},[127,74840,74841,74843,74845,74847,74849,74851,74853,74855],{"class":129,"line":50149},[127,74842,11763],{"class":290},[127,74844,16230],{"class":154},[127,74846,14106],{"class":290},[127,74848,54931],{"class":147},[127,74850,54934],{"class":143},[127,74852,681],{"class":147},[127,74854,70211],{"class":781},[127,74856,687],{"class":147},[127,74858,74860,74862,74864,74866,74868,74870,74872,74874],{"class":129,"line":74859},231,[127,74861,11763],{"class":290},[127,74863,70240],{"class":154},[127,74865,14106],{"class":290},[127,74867,54931],{"class":147},[127,74869,54934],{"class":143},[127,74871,681],{"class":147},[127,74873,70251],{"class":781},[127,74875,687],{"class":147},[127,74877,74879,74881,74883,74885,74887,74889,74891,74893],{"class":129,"line":74878},232,[127,74880,11763],{"class":290},[127,74882,70220],{"class":154},[127,74884,14106],{"class":290},[127,74886,54931],{"class":147},[127,74888,54934],{"class":143},[127,74890,681],{"class":147},[127,74892,70231],{"class":781},[127,74894,687],{"class":147},[127,74896,74898,74900,74902,74904,74906,74908,74910,74912],{"class":129,"line":74897},233,[127,74899,11763],{"class":290},[127,74901,70260],{"class":154},[127,74903,14106],{"class":290},[127,74905,54931],{"class":147},[127,74907,54934],{"class":143},[127,74909,681],{"class":147},[127,74911,70271],{"class":781},[127,74913,687],{"class":147},[127,74915,74917],{"class":129,"line":74916},234,[127,74918,2942],{"emptyLinePlaceholder":606},[127,74920,74922],{"class":129,"line":74921},235,[127,74923,74924],{"class":133},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[127,74926,74928,74930,74932,74934,74936,74938,74940,74942,74944],{"class":129,"line":74927},236,[127,74929,70372],{"class":147},[127,74931,58346],{"class":143},[127,74933,681],{"class":147},[127,74935,70379],{"class":781},[127,74937,12977],{"class":147},[127,74939,54984],{"class":290},[127,74941,2201],{"class":147},[127,74943,752],{"class":5758},[127,74945,12984],{"class":147},[127,74947,74949],{"class":129,"line":74948},237,[127,74950,74951],{"class":133},"      \u002F\u002F 禁止浏览器跳转\n",[127,74953,74955,74957,74959],{"class":129,"line":74954},238,[127,74956,70399],{"class":147},[127,74958,70402],{"class":143},[127,74960,2518],{"class":147},[127,74962,74964],{"class":129,"line":74963},239,[127,74965,74966],{"class":133},"      \u002F\u002F 非空判断\n",[127,74968,74970],{"class":129,"line":74969},240,[127,74971,74972],{"class":133},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[127,74974,74976],{"class":129,"line":74975},241,[127,74977,74978],{"class":133},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[127,74980,74982,74984,74986,74988,74991,74993,74996,74999,75001,75003],{"class":129,"line":74981},242,[127,74983,55015],{"class":290},[127,74985,2201],{"class":147},[127,74987,902],{"class":290},[127,74989,74990],{"class":147},"uname.value ",[127,74992,71886],{"class":290},[127,74994,74995],{"class":290}," !",[127,74997,74998],{"class":147},"age.value ",[127,75000,71886],{"class":290},[127,75002,74995],{"class":290},[127,75004,75005],{"class":147},"salary.value) {\n",[127,75007,75009,75011,75013,75015,75017],{"class":129,"line":75008},243,[127,75010,15294],{"class":290},[127,75012,70473],{"class":143},[127,75014,681],{"class":147},[127,75016,70478],{"class":781},[127,75018,687],{"class":147},[127,75020,75022],{"class":129,"line":75021},244,[127,75023,52933],{"class":147},[127,75025,75027,75029,75031],{"class":129,"line":75026},245,[127,75028,58540],{"class":147},[127,75030,52419],{"class":143},[127,75032,75033],{"class":147},"({\n",[127,75035,75037],{"class":129,"line":75036},246,[127,75038,75039],{"class":133},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[127,75041,75043],{"class":129,"line":75042},247,[127,75044,75045],{"class":133},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[127,75047,75049],{"class":129,"line":75048},248,[127,75050,75051],{"class":133},"        \u002F\u002F 对象的序号应为数组长度+1\n",[127,75053,75055],{"class":129,"line":75054},249,[127,75056,75057],{"class":133},"        \u002F\u002F unameId: arr.length + 1,\n",[127,75059,75061],{"class":129,"line":75060},250,[127,75062,2942],{"emptyLinePlaceholder":606},[127,75064,75066],{"class":129,"line":75065},251,[127,75067,75068],{"class":133},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[127,75070,75072],{"class":129,"line":75071},252,[127,75073,75074],{"class":133},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[127,75076,75078],{"class":129,"line":75077},253,[127,75079,75080],{"class":133},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[127,75082,75084],{"class":129,"line":75083},254,[127,75085,75086],{"class":133},"        \u002F\u002F 0当假看\n",[127,75088,75090,75093,75095,75097,75100,75102,75104,75106,75109,75111,75113,75116,75118],{"class":129,"line":75089},255,[127,75091,75092],{"class":147},"        unameId: arr.",[127,75094,52503],{"class":154},[127,75096,74343],{"class":290},[127,75098,75099],{"class":147}," arr[arr.",[127,75101,52503],{"class":154},[127,75103,52806],{"class":290},[127,75105,25659],{"class":154},[127,75107,75108],{"class":147},"].unameId ",[127,75110,1156],{"class":290},[127,75112,25659],{"class":154},[127,75114,75115],{"class":290}," :",[127,75117,25659],{"class":154},[127,75119,32006],{"class":147},[127,75121,75123],{"class":129,"line":75122},256,[127,75124,70526],{"class":147},[127,75126,75128],{"class":129,"line":75127},257,[127,75129,70531],{"class":147},[127,75131,75133],{"class":129,"line":75132},258,[127,75134,70541],{"class":147},[127,75136,75138],{"class":129,"line":75137},259,[127,75139,70536],{"class":147},[127,75141,75143],{"class":129,"line":75142},260,[127,75144,75145],{"class":147},"        city: city.value,\n",[127,75147,75149],{"class":129,"line":75148},261,[127,75150,75151],{"class":133},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[127,75153,75155],{"class":129,"line":75154},262,[127,75156,75157],{"class":133},"        \u002F\u002F time: new Date().toDateString()\n",[127,75159,75161,75164,75167],{"class":129,"line":75160},263,[127,75162,75163],{"class":147},"        time: ",[127,75165,75166],{"class":143},"getTime",[127,75168,2518],{"class":147},[127,75170,75172],{"class":129,"line":75171},264,[127,75173,65348],{"class":147},[127,75175,75177],{"class":129,"line":75176},265,[127,75178,75179],{"class":133},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[127,75181,75183,75185],{"class":129,"line":75182},266,[127,75184,70601],{"class":143},[127,75186,2518],{"class":147},[127,75188,75190,75192,75194,75196,75198],{"class":129,"line":75189},267,[127,75191,70584],{"class":154},[127,75193,1233],{"class":147},[127,75195,70589],{"class":143},[127,75197,13592],{"class":147},[127,75199,75200],{"class":133},"\u002F\u002F重置表单\n",[127,75202,75204],{"class":129,"line":75203},268,[127,75205,75206],{"class":133},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[127,75208,75210,75213,75215,75217,75220,75222,75224,75226,75228],{"class":129,"line":75209},269,[127,75211,75212],{"class":147},"      localStorage.",[127,75214,72183],{"class":143},[127,75216,681],{"class":147},[127,75218,75219],{"class":781},"'data'",[127,75221,12977],{"class":147},[127,75223,72193],{"class":154},[127,75225,1233],{"class":147},[127,75227,72198],{"class":143},[127,75229,75230],{"class":147},"(arr))\n",[127,75232,75234],{"class":129,"line":75233},270,[127,75235,34001],{"class":147},[127,75237,75239],{"class":129,"line":75238},271,[127,75240,2942],{"emptyLinePlaceholder":606},[127,75242,75244],{"class":129,"line":75243},272,[127,75245,75246],{"class":133},"    \u002F\u002F 3.删除业务\n",[127,75248,75250],{"class":129,"line":75249},273,[127,75251,75252],{"class":133},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[127,75254,75256,75258,75260,75262,75264,75266,75268,75270,75272],{"class":129,"line":75255},274,[127,75257,70874],{"class":147},[127,75259,58346],{"class":143},[127,75261,681],{"class":147},[127,75263,58351],{"class":781},[127,75265,12977],{"class":147},[127,75267,54984],{"class":290},[127,75269,2201],{"class":147},[127,75271,752],{"class":5758},[127,75273,12984],{"class":147},[127,75275,75277],{"class":129,"line":75276},275,[127,75278,75279],{"class":133},"      \u002F\u002F 判断是否点击的是删除按钮\n",[127,75281,75283,75285,75287,75289,75291],{"class":129,"line":75282},276,[127,75284,55015],{"class":290},[127,75286,67567],{"class":147},[127,75288,55021],{"class":290},[127,75290,68789],{"class":781},[127,75292,12984],{"class":147},[127,75294,75296],{"class":129,"line":75295},277,[127,75297,75298],{"class":133},"        \u002F\u002F alert(1)\n",[127,75300,75302],{"class":129,"line":75301},278,[127,75303,75304],{"class":133},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[127,75306,75308],{"class":129,"line":75307},279,[127,75309,75310],{"class":133},"        \u002F\u002F console.log(e.target)\n",[127,75312,75314],{"class":129,"line":75313},280,[127,75315,75316],{"class":133},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[127,75318,75320],{"class":129,"line":75319},281,[127,75321,2942],{"emptyLinePlaceholder":606},[127,75323,75325],{"class":129,"line":75324},282,[127,75326,75327],{"class":133},"        \u002F\u002F 确认框，确然是否真的要删除\n",[127,75329,75331],{"class":129,"line":75330},283,[127,75332,75333],{"class":133},"        \u002F\u002F confirm()为确认框\n",[127,75335,75337],{"class":129,"line":75336},284,[127,75338,75339],{"class":133},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[127,75341,75343,75345,75347,75350,75352,75355],{"class":129,"line":75342},285,[127,75344,3039],{"class":290},[127,75346,2201],{"class":147},[127,75348,75349],{"class":143},"confirm",[127,75351,681],{"class":147},[127,75353,75354],{"class":781},"'您确定要删除这条数据吗？'",[127,75356,75357],{"class":147},")) {\n",[127,75359,75361,75364,75366,75368,75370],{"class":129,"line":75360},286,[127,75362,75363],{"class":147},"          arr.",[127,75365,58543],{"class":143},[127,75367,70927],{"class":147},[127,75369,893],{"class":154},[127,75371,687],{"class":147},[127,75373,75375],{"class":129,"line":75374},287,[127,75376,75377],{"class":133},"          \u002F\u002F 3.4 重新渲染页面\n",[127,75379,75381,75384],{"class":129,"line":75380},288,[127,75382,75383],{"class":143},"          render",[127,75385,2518],{"class":147},[127,75387,75389],{"class":129,"line":75388},289,[127,75390,75391],{"class":133},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[127,75393,75395,75398,75400,75402,75404,75406,75408,75410,75412],{"class":129,"line":75394},290,[127,75396,75397],{"class":147},"          localStorage.",[127,75399,72183],{"class":143},[127,75401,681],{"class":147},[127,75403,75219],{"class":781},[127,75405,12977],{"class":147},[127,75407,72193],{"class":154},[127,75409,1233],{"class":147},[127,75411,72198],{"class":143},[127,75413,75230],{"class":147},[127,75415,75417],{"class":129,"line":75416},291,[127,75418,3071],{"class":147},[127,75420,75422],{"class":129,"line":75421},292,[127,75423,52933],{"class":147},[127,75425,75427],{"class":129,"line":75426},293,[127,75428,2942],{"emptyLinePlaceholder":606},[127,75430,75432],{"class":129,"line":75431},294,[127,75433,34001],{"class":147},[127,75435,75437],{"class":129,"line":75436},295,[127,75438,2942],{"emptyLinePlaceholder":606},[127,75440,75442,75444,75446],{"class":129,"line":75441},296,[127,75443,52952],{"class":147},[127,75445,52348],{"class":140},[127,75447,51846],{"class":147},[127,75449,75451,75453,75455],{"class":129,"line":75450},297,[127,75452,52321],{"class":147},[127,75454,275],{"class":140},[127,75456,51846],{"class":147},[127,75458,75460],{"class":129,"line":75459},298,[127,75461,2942],{"emptyLinePlaceholder":606},[127,75463,75465,75467,75469],{"class":129,"line":75464},299,[127,75466,52321],{"class":147},[127,75468,51175],{"class":140},[127,75470,51846],{"class":147},[14,75472,75474],{"id":75473},"_36-正则表达式","3.6 正则表达式",[19,75476,75477],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75479,75480],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75482,75483],{},"正则表达式的作用：",[1681,75485,75486,75493,75499],{},[635,75487,75488,75489,75492],{},"表单验证（ ",[30,75490,75491],{},"匹配"," ）",[635,75494,75495,75496,75492],{},"过滤敏感词（ ",[30,75497,75498],{},"替换",[635,75500,75501,75502,75492],{},"字符串中提取我们想要的部分（ ",[30,75503,75504],{},"提取",[62,75506,75508],{"id":75507},"_361-语法","3.6.1 语法",[19,75510,75511],{},"正则表达式使用步骤：",[632,75513,75514,75517],{},[635,75515,75516],{},"定义规则",[635,75518,75519],{},"查找是否匹配",[19,75521,75522],{},"正则表达式里边不需要写引号",[19,75524,75525],{},[23,75526],{"alt":122,"src":75527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75529,75530],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75532,75533],{},"reg.test(str)",[19,75535,75536],{},[23,75537],{"alt":122,"src":75538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75540,75541],{},[23,75542],{"alt":122,"src":75543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[62,75545,75547],{"id":75546},"_362-元字符","3.6.2 元字符",[632,75549,75550,75553,75556,75559,75566],{},[635,75551,75552],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[635,75554,75555],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[635,75557,75558],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[635,75560,75561,75562],{},"正则验证工具：",[457,75563,75564],{"href":75564,"rel":75565},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24405],[635,75567,75568],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22539,75570,75572],{"id":75571},"_3621-边界符","3.6.2.1 边界符",[19,75574,75575],{},[23,75576],{"alt":122,"src":75577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75579,75580],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75582,75583],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75585,75586],{},"只匹配一次",[19,75588,75589],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22539,75591,75593],{"id":75592},"_3622-量词","3.6.2.2 量词",[19,75595,75596],{},[23,75597],{"alt":122,"src":75598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75600,75601],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22539,75603,75605],{"id":75604},"_3623-元字符","3.6.2.3 元字符",[19,75607,75608],{},[23,75609],{"alt":122,"src":75610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75612,75613],{},"匹配的是a或b或c []只选一个",[19,75615,75616],{},[23,75617],{"alt":122,"src":75618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75620,75621],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75623,75624],{},[23,75625],{"alt":122,"src":75626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75628,75629],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75631,75632],{},[23,75633],{"alt":122,"src":75634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[117,75636,75638],{"className":51173,"code":75637,"language":51175,"meta":122,"style":122},"\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",[124,75639,75640,75650,75664,75668,75676,75690,75710,75722,75730,75734,75742,75750,75755,75786,75813,75841,75845,75850,75878,75909,75914,75919,75950,75982,76014,76018,76023,76054,76084,76114,76118,76123,76154,76185,76215,76245,76249,76254,76287,76291,76296,76327,76358,76362,76367,76398,76428,76459,76463,76468,76500,76531,76562,76589,76620,76652,76685,76716,76747,76779,76810,76818,76826,76830],{"__ignoreMap":122},[127,75641,75642,75644,75646,75648],{"class":129,"line":130},[127,75643,51837],{"class":147},[127,75645,51840],{"class":140},[127,75647,51843],{"class":143},[127,75649,51846],{"class":147},[127,75651,75652,75654,75656,75658,75660,75662],{"class":129,"line":137},[127,75653,1584],{"class":147},[127,75655,51175],{"class":140},[127,75657,51855],{"class":143},[127,75659,725],{"class":147},[127,75661,51860],{"class":781},[127,75663,51846],{"class":147},[127,75665,75666],{"class":129,"line":151},[127,75667,2942],{"emptyLinePlaceholder":606},[127,75669,75670,75672,75674],{"class":129,"line":167},[127,75671,1584],{"class":147},[127,75673,51873],{"class":140},[127,75675,51846],{"class":147},[127,75677,75678,75680,75682,75684,75686,75688],{"class":129,"line":415},[127,75679,52679],{"class":147},[127,75681,51883],{"class":140},[127,75683,51886],{"class":143},[127,75685,725],{"class":147},[127,75687,51891],{"class":781},[127,75689,51846],{"class":147},[127,75691,75692,75694,75696,75698,75700,75702,75704,75706,75708],{"class":129,"line":421},[127,75693,52679],{"class":147},[127,75695,51883],{"class":140},[127,75697,15462],{"class":143},[127,75699,725],{"class":147},[127,75701,51930],{"class":781},[127,75703,51910],{"class":143},[127,75705,725],{"class":147},[127,75707,51937],{"class":781},[127,75709,51846],{"class":147},[127,75711,75712,75714,75716,75718,75720],{"class":129,"line":1766},[127,75713,52679],{"class":147},[127,75715,51946],{"class":140},[127,75717,51949],{"class":147},[127,75719,51946],{"class":140},[127,75721,51846],{"class":147},[127,75723,75724,75726,75728],{"class":129,"line":1856},[127,75725,52321],{"class":147},[127,75727,51873],{"class":140},[127,75729,51846],{"class":147},[127,75731,75732],{"class":129,"line":1862},[127,75733,2942],{"emptyLinePlaceholder":606},[127,75735,75736,75738,75740],{"class":129,"line":1874},[127,75737,1584],{"class":147},[127,75739,275],{"class":140},[127,75741,51846],{"class":147},[127,75743,75744,75746,75748],{"class":129,"line":2155},[127,75745,52679],{"class":147},[127,75747,52348],{"class":140},[127,75749,51846],{"class":147},[127,75751,75752],{"class":129,"line":2160},[127,75753,75754],{"class":133},"    \u002F\u002F 元字符中\n",[127,75756,75757,75759,75761,75763,75765,75768,75770,75772,75775,75777,75780,75783],{"class":129,"line":2166},[127,75758,74282],{"class":147},[127,75760,58780],{"class":143},[127,75762,681],{"class":147},[127,75764,1259],{"class":781},[127,75766,75767],{"class":48517},"哈",[127,75769,1259],{"class":781},[127,75771,1233],{"class":147},[127,75773,75774],{"class":143},"test",[127,75776,681],{"class":147},[127,75778,75779],{"class":781},"'哈'",[127,75781,75782],{"class":147},"))  ",[127,75784,75785],{"class":133},"\u002F\u002Ftrue\n",[127,75787,75788,75790,75792,75794,75796,75798,75800,75802,75804,75806,75809,75811],{"class":129,"line":2171},[127,75789,74282],{"class":147},[127,75791,58780],{"class":143},[127,75793,681],{"class":147},[127,75795,1259],{"class":781},[127,75797,75767],{"class":48517},[127,75799,1259],{"class":781},[127,75801,1233],{"class":147},[127,75803,75774],{"class":143},[127,75805,681],{"class":147},[127,75807,75808],{"class":781},"'哈哈'",[127,75810,75782],{"class":147},[127,75812,75785],{"class":133},[127,75814,75815,75817,75819,75821,75823,75825,75827,75829,75831,75833,75836,75839],{"class":129,"line":2185},[127,75816,74282],{"class":147},[127,75818,58780],{"class":143},[127,75820,681],{"class":147},[127,75822,1259],{"class":781},[127,75824,75767],{"class":48517},[127,75826,1259],{"class":781},[127,75828,1233],{"class":147},[127,75830,75774],{"class":143},[127,75832,681],{"class":147},[127,75834,75835],{"class":781},"'二哈'",[127,75837,75838],{"class":147},"))   ",[127,75840,75785],{"class":133},[127,75842,75843],{"class":129,"line":2190},[127,75844,2942],{"emptyLinePlaceholder":606},[127,75846,75847],{"class":129,"line":2196},[127,75848,75849],{"class":133},"    \u002F\u002F 1.边界符\n",[127,75851,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876],{"class":129,"line":2217},[127,75853,74282],{"class":147},[127,75855,58780],{"class":143},[127,75857,681],{"class":147},[127,75859,1259],{"class":781},[127,75861,1640],{"class":290},[127,75863,75767],{"class":48517},[127,75865,1259],{"class":781},[127,75867,1233],{"class":147},[127,75869,75774],{"class":143},[127,75871,681],{"class":147},[127,75873,75779],{"class":781},[127,75875,75782],{"class":147},[127,75877,75785],{"class":133},[127,75879,75880,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906],{"class":129,"line":2222},[127,75881,74282],{"class":147},[127,75883,58780],{"class":143},[127,75885,681],{"class":147},[127,75887,1259],{"class":781},[127,75889,1640],{"class":290},[127,75891,75767],{"class":48517},[127,75893,977],{"class":290},[127,75895,1259],{"class":781},[127,75897,1233],{"class":147},[127,75899,75774],{"class":143},[127,75901,681],{"class":147},[127,75903,75808],{"class":781},[127,75905,75782],{"class":147},[127,75907,75908],{"class":133},"\u002F\u002Ffalse\n",[127,75910,75911],{"class":129,"line":2236},[127,75912,75913],{"class":133},"    \u002F\u002F 2.量词\n",[127,75915,75916],{"class":129,"line":2241},[127,75917,75918],{"class":133},"    \u002F\u002F 量词 * 类似于 >= 0\n",[127,75920,75921,75923,75925,75927,75929,75931,75933,75936,75938,75940,75942,75944,75946,75948],{"class":129,"line":2270},[127,75922,74282],{"class":147},[127,75924,58780],{"class":143},[127,75926,681],{"class":147},[127,75928,1259],{"class":781},[127,75930,1640],{"class":290},[127,75932,75767],{"class":48517},[127,75934,75935],{"class":290},"*$",[127,75937,1259],{"class":781},[127,75939,1233],{"class":147},[127,75941,75774],{"class":143},[127,75943,681],{"class":147},[127,75945,75808],{"class":781},[127,75947,75782],{"class":147},[127,75949,75785],{"class":133},[127,75951,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75977,75979],{"class":129,"line":2275},[127,75953,74282],{"class":147},[127,75955,58780],{"class":143},[127,75957,681],{"class":147},[127,75959,1259],{"class":781},[127,75961,1640],{"class":290},[127,75963,75767],{"class":48517},[127,75965,75935],{"class":290},[127,75967,1259],{"class":781},[127,75969,1233],{"class":147},[127,75971,75774],{"class":143},[127,75973,681],{"class":147},[127,75975,75976],{"class":781},"'二哈好傻'",[127,75978,75782],{"class":147},[127,75980,75981],{"class":133},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[127,75983,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76009,76011],{"class":129,"line":2292},[127,75985,74282],{"class":147},[127,75987,58780],{"class":143},[127,75989,681],{"class":147},[127,75991,1259],{"class":781},[127,75993,1640],{"class":290},[127,75995,75767],{"class":48517},[127,75997,75935],{"class":290},[127,75999,1259],{"class":781},[127,76001,1233],{"class":147},[127,76003,75774],{"class":143},[127,76005,681],{"class":147},[127,76007,76008],{"class":781},"'哈好哈'",[127,76010,75838],{"class":147},[127,76012,76013],{"class":133},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[127,76015,76016],{"class":129,"line":2297},[127,76017,2942],{"emptyLinePlaceholder":606},[127,76019,76020],{"class":129,"line":2302},[127,76021,76022],{"class":133},"    \u002F\u002F +类似于>=1\n",[127,76024,76025,76027,76029,76031,76033,76035,76037,76040,76042,76044,76046,76048,76050,76052],{"class":129,"line":2307},[127,76026,74282],{"class":147},[127,76028,58780],{"class":143},[127,76030,681],{"class":147},[127,76032,1259],{"class":781},[127,76034,1640],{"class":290},[127,76036,75767],{"class":48517},[127,76038,76039],{"class":290},"+$",[127,76041,1259],{"class":781},[127,76043,1233],{"class":147},[127,76045,75774],{"class":143},[127,76047,681],{"class":147},[127,76049,75808],{"class":781},[127,76051,75782],{"class":147},[127,76053,75785],{"class":133},[127,76055,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082],{"class":129,"line":2321},[127,76057,74282],{"class":147},[127,76059,58780],{"class":143},[127,76061,681],{"class":147},[127,76063,1259],{"class":781},[127,76065,1640],{"class":290},[127,76067,75767],{"class":48517},[127,76069,76039],{"class":290},[127,76071,1259],{"class":781},[127,76073,1233],{"class":147},[127,76075,75774],{"class":143},[127,76077,681],{"class":147},[127,76079,75976],{"class":781},[127,76081,75782],{"class":147},[127,76083,75981],{"class":133},[127,76085,76086,76088,76090,76092,76094,76096,76098,76100,76102,76104,76106,76108,76110,76112],{"class":129,"line":2326},[127,76087,74282],{"class":147},[127,76089,58780],{"class":143},[127,76091,681],{"class":147},[127,76093,1259],{"class":781},[127,76095,1640],{"class":290},[127,76097,75767],{"class":48517},[127,76099,76039],{"class":290},[127,76101,1259],{"class":781},[127,76103,1233],{"class":147},[127,76105,75774],{"class":143},[127,76107,681],{"class":147},[127,76109,76008],{"class":781},[127,76111,75838],{"class":147},[127,76113,75908],{"class":133},[127,76115,76116],{"class":129,"line":3119},[127,76117,2942],{"emptyLinePlaceholder":606},[127,76119,76120],{"class":129,"line":3133},[127,76121,76122],{"class":133},"    \u002F\u002F ?类似于0次或一次\n",[127,76124,76125,76127,76129,76131,76133,76135,76138,76140,76142,76144,76146,76148,76150,76152],{"class":129,"line":3141},[127,76126,74282],{"class":147},[127,76128,58780],{"class":143},[127,76130,681],{"class":147},[127,76132,1259],{"class":781},[127,76134,1640],{"class":290},[127,76136,76137],{"class":48517},"哈？",[127,76139,977],{"class":290},[127,76141,1259],{"class":781},[127,76143,1233],{"class":147},[127,76145,75774],{"class":143},[127,76147,681],{"class":147},[127,76149,74757],{"class":781},[127,76151,75838],{"class":147},[127,76153,75785],{"class":133},[127,76155,76156,76158,76160,76162,76164,76166,76168,76171,76173,76175,76177,76179,76181,76183],{"class":129,"line":3146},[127,76157,74282],{"class":147},[127,76159,58780],{"class":143},[127,76161,681],{"class":147},[127,76163,1259],{"class":781},[127,76165,1640],{"class":290},[127,76167,75767],{"class":48517},[127,76169,76170],{"class":290},"?$",[127,76172,1259],{"class":781},[127,76174,1233],{"class":147},[127,76176,75774],{"class":143},[127,76178,681],{"class":147},[127,76180,75808],{"class":781},[127,76182,75782],{"class":147},[127,76184,75908],{"class":133},[127,76186,76187,76189,76191,76193,76195,76197,76199,76201,76203,76205,76207,76209,76211,76213],{"class":129,"line":3152},[127,76188,74282],{"class":147},[127,76190,58780],{"class":143},[127,76192,681],{"class":147},[127,76194,1259],{"class":781},[127,76196,1640],{"class":290},[127,76198,75767],{"class":48517},[127,76200,76170],{"class":290},[127,76202,1259],{"class":781},[127,76204,1233],{"class":147},[127,76206,75774],{"class":143},[127,76208,681],{"class":147},[127,76210,75976],{"class":781},[127,76212,75782],{"class":147},[127,76214,75981],{"class":133},[127,76216,76217,76219,76221,76223,76225,76227,76229,76231,76233,76235,76237,76239,76241,76243],{"class":129,"line":3158},[127,76218,74282],{"class":147},[127,76220,58780],{"class":143},[127,76222,681],{"class":147},[127,76224,1259],{"class":781},[127,76226,1640],{"class":290},[127,76228,75767],{"class":48517},[127,76230,76170],{"class":290},[127,76232,1259],{"class":781},[127,76234,1233],{"class":147},[127,76236,75774],{"class":143},[127,76238,681],{"class":147},[127,76240,76008],{"class":781},[127,76242,75782],{"class":147},[127,76244,75908],{"class":133},[127,76246,76247],{"class":129,"line":3163},[127,76248,2942],{"emptyLinePlaceholder":606},[127,76250,76251],{"class":129,"line":8490},[127,76252,76253],{"class":133},"    \u002F\u002F {n}写几，就必须出现几次\n",[127,76255,76256,76258,76260,76262,76264,76266,76268,76271,76273,76275,76277,76279,76282,76285],{"class":129,"line":8514},[127,76257,74282],{"class":147},[127,76259,58780],{"class":143},[127,76261,681],{"class":147},[127,76263,1259],{"class":781},[127,76265,1640],{"class":290},[127,76267,75767],{"class":48517},[127,76269,76270],{"class":290},"{4}$",[127,76272,1259],{"class":781},[127,76274,1233],{"class":147},[127,76276,75774],{"class":143},[127,76278,681],{"class":147},[127,76280,76281],{"class":781},"'哈哈哈哈'",[127,76283,76284],{"class":147},")) ",[127,76286,75785],{"class":133},[127,76288,76289],{"class":129,"line":8519},[127,76290,2942],{"emptyLinePlaceholder":606},[127,76292,76293],{"class":129,"line":8525},[127,76294,76295],{"class":133},"    \u002F\u002F {n,}大于等于n次\n",[127,76297,76298,76300,76302,76304,76306,76308,76310,76313,76315,76317,76319,76321,76323,76325],{"class":129,"line":8552},[127,76299,74282],{"class":147},[127,76301,58780],{"class":143},[127,76303,681],{"class":147},[127,76305,1259],{"class":781},[127,76307,1640],{"class":290},[127,76309,75767],{"class":48517},[127,76311,76312],{"class":290},"{4,}$",[127,76314,1259],{"class":781},[127,76316,1233],{"class":147},[127,76318,75774],{"class":143},[127,76320,681],{"class":147},[127,76322,76281],{"class":781},[127,76324,76284],{"class":147},[127,76326,75785],{"class":133},[127,76328,76329,76331,76333,76335,76337,76339,76341,76343,76345,76347,76349,76351,76354,76356],{"class":129,"line":8557},[127,76330,74282],{"class":147},[127,76332,58780],{"class":143},[127,76334,681],{"class":147},[127,76336,1259],{"class":781},[127,76338,1640],{"class":290},[127,76340,75767],{"class":48517},[127,76342,76312],{"class":290},[127,76344,1259],{"class":781},[127,76346,1233],{"class":147},[127,76348,75774],{"class":143},[127,76350,681],{"class":147},[127,76352,76353],{"class":781},"'哈哈哈哈哈'",[127,76355,76284],{"class":147},[127,76357,75785],{"class":133},[127,76359,76360],{"class":129,"line":8563},[127,76361,2942],{"emptyLinePlaceholder":606},[127,76363,76364],{"class":129,"line":8575},[127,76365,76366],{"class":133},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[127,76368,76369,76371,76373,76375,76377,76379,76381,76384,76386,76388,76390,76392,76394,76396],{"class":129,"line":8587},[127,76370,74282],{"class":147},[127,76372,58780],{"class":143},[127,76374,681],{"class":147},[127,76376,1259],{"class":781},[127,76378,1640],{"class":290},[127,76380,75767],{"class":48517},[127,76382,76383],{"class":290},"{4,6}$",[127,76385,1259],{"class":781},[127,76387,1233],{"class":147},[127,76389,75774],{"class":143},[127,76391,681],{"class":147},[127,76393,76281],{"class":781},[127,76395,76284],{"class":147},[127,76397,75785],{"class":133},[127,76399,76400,76402,76404,76406,76408,76410,76412,76414,76416,76418,76420,76422,76424,76426],{"class":129,"line":8599},[127,76401,74282],{"class":147},[127,76403,58780],{"class":143},[127,76405,681],{"class":147},[127,76407,1259],{"class":781},[127,76409,1640],{"class":290},[127,76411,75767],{"class":48517},[127,76413,76383],{"class":290},[127,76415,1259],{"class":781},[127,76417,1233],{"class":147},[127,76419,75774],{"class":143},[127,76421,681],{"class":147},[127,76423,76353],{"class":781},[127,76425,76284],{"class":147},[127,76427,75785],{"class":133},[127,76429,76430,76432,76434,76436,76438,76440,76442,76444,76446,76448,76450,76452,76455,76457],{"class":129,"line":10258},[127,76431,74282],{"class":147},[127,76433,58780],{"class":143},[127,76435,681],{"class":147},[127,76437,1259],{"class":781},[127,76439,1640],{"class":290},[127,76441,75767],{"class":48517},[127,76443,76383],{"class":290},[127,76445,1259],{"class":781},[127,76447,1233],{"class":147},[127,76449,75774],{"class":143},[127,76451,681],{"class":147},[127,76453,76454],{"class":781},"'哈哈哈哈哈哈哈'",[127,76456,76284],{"class":147},[127,76458,75908],{"class":133},[127,76460,76461],{"class":129,"line":10283},[127,76462,2942],{"emptyLinePlaceholder":606},[127,76464,76465],{"class":129,"line":10306},[127,76466,76467],{"class":133},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[127,76469,76470,76472,76474,76476,76478,76480,76483,76485,76487,76489,76491,76493,76496,76498],{"class":129,"line":10330},[127,76471,74282],{"class":147},[127,76473,58780],{"class":143},[127,76475,681],{"class":147},[127,76477,1259],{"class":781},[127,76479,1640],{"class":290},[127,76481,76482],{"class":154},"[abc]",[127,76484,977],{"class":290},[127,76486,1259],{"class":781},[127,76488,1233],{"class":147},[127,76490,75774],{"class":143},[127,76492,681],{"class":147},[127,76494,76495],{"class":781},"'a'",[127,76497,75782],{"class":147},[127,76499,75785],{"class":133},[127,76501,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522,76524,76527,76529],{"class":129,"line":10335},[127,76503,74282],{"class":147},[127,76505,58780],{"class":143},[127,76507,681],{"class":147},[127,76509,1259],{"class":781},[127,76511,1640],{"class":290},[127,76513,76482],{"class":154},[127,76515,977],{"class":290},[127,76517,1259],{"class":781},[127,76519,1233],{"class":147},[127,76521,75774],{"class":143},[127,76523,681],{"class":147},[127,76525,76526],{"class":781},"'b'",[127,76528,75782],{"class":147},[127,76530,75785],{"class":133},[127,76532,76533,76535,76537,76539,76541,76543,76545,76547,76549,76551,76553,76555,76558,76560],{"class":129,"line":10340},[127,76534,74282],{"class":147},[127,76536,58780],{"class":143},[127,76538,681],{"class":147},[127,76540,1259],{"class":781},[127,76542,1640],{"class":290},[127,76544,76482],{"class":154},[127,76546,977],{"class":290},[127,76548,1259],{"class":781},[127,76550,1233],{"class":147},[127,76552,75774],{"class":143},[127,76554,681],{"class":147},[127,76556,76557],{"class":781},"'c'",[127,76559,75782],{"class":147},[127,76561,75785],{"class":133},[127,76563,76564,76566,76568,76570,76572,76574,76576,76578,76580,76582,76585,76587],{"class":129,"line":10345},[127,76565,74282],{"class":147},[127,76567,58780],{"class":143},[127,76569,681],{"class":147},[127,76571,1259],{"class":781},[127,76573,76482],{"class":154},[127,76575,1259],{"class":781},[127,76577,1233],{"class":147},[127,76579,75774],{"class":143},[127,76581,681],{"class":147},[127,76583,76584],{"class":781},"'ab'",[127,76586,75782],{"class":147},[127,76588,75785],{"class":133},[127,76590,76591,76593,76595,76597,76599,76601,76603,76605,76607,76609,76611,76613,76615,76617],{"class":129,"line":10354},[127,76592,74282],{"class":147},[127,76594,58780],{"class":143},[127,76596,681],{"class":147},[127,76598,1259],{"class":781},[127,76600,1640],{"class":290},[127,76602,76482],{"class":154},[127,76604,977],{"class":290},[127,76606,1259],{"class":781},[127,76608,1233],{"class":147},[127,76610,75774],{"class":143},[127,76612,681],{"class":147},[127,76614,76584],{"class":781},[127,76616,75782],{"class":147},[127,76618,76619],{"class":133},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[127,76621,76622,76624,76626,76628,76630,76632,76634,76637,76639,76641,76643,76645,76647,76649],{"class":129,"line":10359},[127,76623,74282],{"class":147},[127,76625,58780],{"class":143},[127,76627,681],{"class":147},[127,76629,1259],{"class":781},[127,76631,1640],{"class":290},[127,76633,76482],{"class":154},[127,76635,76636],{"class":290},"{2}$",[127,76638,1259],{"class":781},[127,76640,1233],{"class":147},[127,76642,75774],{"class":143},[127,76644,681],{"class":147},[127,76646,76584],{"class":781},[127,76648,75782],{"class":147},[127,76650,76651],{"class":133},"\u002F\u002Ftrue   可以选两个\n",[127,76653,76654,76656,76658,76660,76662,76664,76667,76669,76671,76673,76675,76677,76680,76682],{"class":129,"line":10365},[127,76655,74282],{"class":147},[127,76657,58780],{"class":143},[127,76659,681],{"class":147},[127,76661,1259],{"class":781},[127,76663,1640],{"class":290},[127,76665,76666],{"class":154},"[a-z]",[127,76668,977],{"class":290},[127,76670,1259],{"class":781},[127,76672,1233],{"class":147},[127,76674,75774],{"class":143},[127,76676,681],{"class":147},[127,76678,76679],{"class":781},"'p'",[127,76681,75838],{"class":147},[127,76683,76684],{"class":133},"\u002F\u002Ftrue   依然只能选一个\n",[127,76686,76687,76689,76691,76693,76695,76697,76700,76702,76704,76706,76708,76710,76712,76714],{"class":129,"line":10386},[127,76688,74282],{"class":147},[127,76690,58780],{"class":143},[127,76692,681],{"class":147},[127,76694,1259],{"class":781},[127,76696,1640],{"class":290},[127,76698,76699],{"class":154},"[A-Z]",[127,76701,977],{"class":290},[127,76703,1259],{"class":781},[127,76705,1233],{"class":147},[127,76707,75774],{"class":143},[127,76709,681],{"class":147},[127,76711,76679],{"class":781},[127,76713,75838],{"class":147},[127,76715,75908],{"class":133},[127,76717,76718,76720,76722,76724,76726,76728,76730,76732,76734,76736,76738,76740,76743,76745],{"class":129,"line":10392},[127,76719,74282],{"class":147},[127,76721,58780],{"class":143},[127,76723,681],{"class":147},[127,76725,1259],{"class":781},[127,76727,1640],{"class":290},[127,76729,76699],{"class":154},[127,76731,977],{"class":290},[127,76733,1259],{"class":781},[127,76735,1233],{"class":147},[127,76737,75774],{"class":143},[127,76739,681],{"class":147},[127,76741,76742],{"class":781},"'P'",[127,76744,75838],{"class":147},[127,76746,75785],{"class":133},[127,76748,76749,76751,76753,76755,76757,76759,76762,76764,76766,76768,76770,76772,76775,76777],{"class":129,"line":10406},[127,76750,74282],{"class":147},[127,76752,58780],{"class":143},[127,76754,681],{"class":147},[127,76756,1259],{"class":781},[127,76758,1640],{"class":290},[127,76760,76761],{"class":154},"[0-9]",[127,76763,977],{"class":290},[127,76765,1259],{"class":781},[127,76767,1233],{"class":147},[127,76769,75774],{"class":143},[127,76771,681],{"class":147},[127,76773,76774],{"class":781},"'0'",[127,76776,75838],{"class":147},[127,76778,75785],{"class":133},[127,76780,76781,76783,76785,76787,76789,76791,76794,76796,76798,76800,76802,76804,76806,76808],{"class":129,"line":10412},[127,76782,74282],{"class":147},[127,76784,58780],{"class":143},[127,76786,681],{"class":147},[127,76788,1259],{"class":781},[127,76790,1640],{"class":290},[127,76792,76793],{"class":154},"[a-zA-Z0-9]",[127,76795,977],{"class":290},[127,76797,1259],{"class":781},[127,76799,1233],{"class":147},[127,76801,75774],{"class":143},[127,76803,681],{"class":147},[127,76805,76679],{"class":781},[127,76807,75782],{"class":147},[127,76809,75785],{"class":133},[127,76811,76812,76814,76816],{"class":129,"line":10439},[127,76813,52952],{"class":147},[127,76815,52348],{"class":140},[127,76817,51846],{"class":147},[127,76819,76820,76822,76824],{"class":129,"line":10448},[127,76821,52321],{"class":147},[127,76823,275],{"class":140},[127,76825,51846],{"class":147},[127,76827,76828],{"class":129,"line":10454},[127,76829,2942],{"emptyLinePlaceholder":606},[127,76831,76832,76834,76836],{"class":129,"line":10462},[127,76833,52321],{"class":147},[127,76835,51175],{"class":140},[127,76837,51846],{"class":147},[22539,76839,76841],{"id":76840},"_3624-修饰符","3.6.2.4 修饰符",[19,76843,76844],{},[23,76845],{"alt":122,"src":76846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76848,76849],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76851,76852],{},[23,76853],{"alt":122,"src":76854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[117,76856,76858],{"className":51173,"code":76857,"language":51175,"meta":122,"style":122},"\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",[124,76859,76860,76870,76884,76892,76906,76926,76938,76946,76954,76962,76994,77025,77030,77062,77073,77106,77115,77123,77131],{"__ignoreMap":122},[127,76861,76862,76864,76866,76868],{"class":129,"line":130},[127,76863,51837],{"class":147},[127,76865,51840],{"class":140},[127,76867,51843],{"class":143},[127,76869,51846],{"class":147},[127,76871,76872,76874,76876,76878,76880,76882],{"class":129,"line":137},[127,76873,1584],{"class":147},[127,76875,51175],{"class":140},[127,76877,51855],{"class":143},[127,76879,725],{"class":147},[127,76881,51860],{"class":781},[127,76883,51846],{"class":147},[127,76885,76886,76888,76890],{"class":129,"line":151},[127,76887,1584],{"class":147},[127,76889,51873],{"class":140},[127,76891,51846],{"class":147},[127,76893,76894,76896,76898,76900,76902,76904],{"class":129,"line":167},[127,76895,52679],{"class":147},[127,76897,51883],{"class":140},[127,76899,51886],{"class":143},[127,76901,725],{"class":147},[127,76903,51891],{"class":781},[127,76905,51846],{"class":147},[127,76907,76908,76910,76912,76914,76916,76918,76920,76922,76924],{"class":129,"line":415},[127,76909,52679],{"class":147},[127,76911,51883],{"class":140},[127,76913,15462],{"class":143},[127,76915,725],{"class":147},[127,76917,51930],{"class":781},[127,76919,51910],{"class":143},[127,76921,725],{"class":147},[127,76923,51937],{"class":781},[127,76925,51846],{"class":147},[127,76927,76928,76930,76932,76934,76936],{"class":129,"line":421},[127,76929,52679],{"class":147},[127,76931,51946],{"class":140},[127,76933,51949],{"class":147},[127,76935,51946],{"class":140},[127,76937,51846],{"class":147},[127,76939,76940,76942,76944],{"class":129,"line":1766},[127,76941,52321],{"class":147},[127,76943,51873],{"class":140},[127,76945,51846],{"class":147},[127,76947,76948,76950,76952],{"class":129,"line":1856},[127,76949,1584],{"class":147},[127,76951,275],{"class":140},[127,76953,51846],{"class":147},[127,76955,76956,76958,76960],{"class":129,"line":1862},[127,76957,52679],{"class":147},[127,76959,52348],{"class":140},[127,76961,51846],{"class":147},[127,76963,76964,76966,76968,76970,76972,76974,76977,76979,76981,76983,76985,76987,76990,76992],{"class":129,"line":1874},[127,76965,74282],{"class":147},[127,76967,58780],{"class":143},[127,76969,681],{"class":147},[127,76971,1259],{"class":781},[127,76973,1640],{"class":290},[127,76975,76976],{"class":48517},"java",[127,76978,977],{"class":290},[127,76980,1259],{"class":781},[127,76982,1233],{"class":147},[127,76984,75774],{"class":143},[127,76986,681],{"class":147},[127,76988,76989],{"class":781},"'java'",[127,76991,76284],{"class":147},[127,76993,75785],{"class":133},[127,76995,76996,76998,77000,77002,77004,77006,77008,77010,77012,77014,77016,77018,77021,77023],{"class":129,"line":2155},[127,76997,74282],{"class":147},[127,76999,58780],{"class":143},[127,77001,681],{"class":147},[127,77003,1259],{"class":781},[127,77005,1640],{"class":290},[127,77007,76976],{"class":48517},[127,77009,977],{"class":290},[127,77011,1259],{"class":781},[127,77013,1233],{"class":147},[127,77015,75774],{"class":143},[127,77017,681],{"class":147},[127,77019,77020],{"class":781},"'Java'",[127,77022,76284],{"class":147},[127,77024,75908],{"class":133},[127,77026,77027],{"class":129,"line":2160},[127,77028,77029],{"class":133},"    \u002F\u002F 不区分大小写、\n",[127,77031,77032,77034,77036,77038,77040,77042,77044,77046,77048,77050,77052,77054,77056,77058,77060],{"class":129,"line":2166},[127,77033,74282],{"class":147},[127,77035,58780],{"class":143},[127,77037,681],{"class":147},[127,77039,1259],{"class":781},[127,77041,1640],{"class":290},[127,77043,76976],{"class":48517},[127,77045,977],{"class":290},[127,77047,1259],{"class":781},[127,77049,1116],{"class":290},[127,77051,1233],{"class":147},[127,77053,75774],{"class":143},[127,77055,681],{"class":147},[127,77057,77020],{"class":781},[127,77059,76284],{"class":147},[127,77061,75785],{"class":133},[127,77063,77064,77066,77068,77070],{"class":129,"line":2171},[127,77065,11763],{"class":290},[127,77067,74448],{"class":154},[127,77069,14106],{"class":290},[127,77071,77072],{"class":781}," 'java是一门编程语言，学完java工资很高'\n",[127,77074,77075,77077,77080,77082,77085,77088,77090,77092,77094,77096,77099,77101,77104],{"class":129,"line":2185},[127,77076,11763],{"class":290},[127,77078,77079],{"class":154}," result",[127,77081,14106],{"class":290},[127,77083,77084],{"class":147}," str.",[127,77086,77087],{"class":143},"replace",[127,77089,681],{"class":147},[127,77091,1259],{"class":781},[127,77093,76976],{"class":48517},[127,77095,1259],{"class":781},[127,77097,77098],{"class":290},"ig",[127,77100,12977],{"class":147},[127,77102,77103],{"class":781},"'前端'",[127,77105,687],{"class":147},[127,77107,77108,77110,77112],{"class":129,"line":2190},[127,77109,74282],{"class":147},[127,77111,58780],{"class":143},[127,77113,77114],{"class":147},"(result)\n",[127,77116,77117,77119,77121],{"class":129,"line":2196},[127,77118,52952],{"class":147},[127,77120,52348],{"class":140},[127,77122,51846],{"class":147},[127,77124,77125,77127,77129],{"class":129,"line":2217},[127,77126,52321],{"class":147},[127,77128,275],{"class":140},[127,77130,51846],{"class":147},[127,77132,77133,77135,77137],{"class":129,"line":2222},[127,77134,52321],{"class":147},[127,77136,51175],{"class":140},[127,77138,51846],{"class":147},[575,77140,77141],{},"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":122,"searchDepth":137,"depth":137,"links":77143},[77144,77154,77166,77183,77190,77198],{"id":53895,"depth":137,"text":53896,"children":77145},[77146,77147,77148,77149,77150,77151,77152,77153],{"id":53899,"depth":151,"text":53900},{"id":53932,"depth":151,"text":53933},{"id":53971,"depth":151,"text":53972},{"id":54129,"depth":151,"text":54130},{"id":54177,"depth":151,"text":54178},{"id":54314,"depth":151,"text":54315},{"id":54636,"depth":151,"text":54637},{"id":57623,"depth":151,"text":57624},{"id":57651,"depth":137,"text":57652,"children":77155},[77156,77157,77158,77159,77160,77161,77162,77163,77164,77165],{"id":57655,"depth":151,"text":57656},{"id":57678,"depth":151,"text":57679},{"id":58592,"depth":151,"text":58593},{"id":59282,"depth":151,"text":59283},{"id":59564,"depth":151,"text":59565},{"id":63725,"depth":151,"text":63726},{"id":63895,"depth":151,"text":63896},{"id":64023,"depth":151,"text":64024},{"id":64048,"depth":151,"text":64049},{"id":65437,"depth":151,"text":65438},{"id":66590,"depth":137,"text":66591,"children":77167},[77168,77169,77170,77171,77172,77173,77174,77175,77176,77177,77178,77179,77180,77181,77182],{"id":66594,"depth":151,"text":66595},{"id":67248,"depth":151,"text":67249},{"id":68943,"depth":151,"text":68944},{"id":68984,"depth":151,"text":68985},{"id":69026,"depth":151,"text":69027},{"id":69040,"depth":151,"text":69041},{"id":69089,"depth":151,"text":69090},{"id":69101,"depth":151,"text":69102},{"id":69116,"depth":151,"text":69117},{"id":69152,"depth":151,"text":69153},{"id":69233,"depth":151,"text":69234},{"id":69361,"depth":151,"text":69362},{"id":69373,"depth":151,"text":69374},{"id":69392,"depth":151,"text":69393},{"id":71499,"depth":151,"text":71500},{"id":71518,"depth":137,"text":71519,"children":77184},[77185,77186,77187,77188,77189],{"id":71539,"depth":151,"text":71540},{"id":71559,"depth":151,"text":71560},{"id":71608,"depth":151,"text":71609},{"id":71733,"depth":151,"text":71734},{"id":71914,"depth":151,"text":71915},{"id":71932,"depth":137,"text":71933,"children":77191},[77192,77193,77194,77195,77196,77197],{"id":71947,"depth":151,"text":71948},{"id":72006,"depth":151,"text":72007},{"id":72030,"depth":151,"text":72031},{"id":72350,"depth":151,"text":72351},{"id":72382,"depth":151,"text":72383},{"id":72405,"depth":151,"text":72406},{"id":75473,"depth":137,"text":75474,"children":77199},[77200,77201],{"id":75507,"depth":151,"text":75508},{"id":75546,"depth":151,"text":75547},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53867,"description":603},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77208,"title":77209,"body":77210,"description":603,"extension":604,"meta":93347,"navigation":606,"path":93348,"seo":93349,"stem":93350,"__hash__":93351},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77211,"toc":93283},[77212,77215,77218,77222,77226,77231,77236,77247,77251,77256,77259,77263,77266,77271,77275,77279,77282,77287,77290,77294,77297,77305,77308,77312,77317,77322,77325,77329,77334,77339,77342,77346,77351,77354,77359,77362,77367,77370,77375,77380,77383,77386,77390,77395,77400,77403,77407,77411,77414,77417,77420,77424,77428,77433,77438,77441,77445,77450,77455,77458,77461,77464,77467,77470,77473,77476,77479,77482,77487,77491,77496,77501,77504,77507,77510,77513,77516,77519,77522,77525,77529,77533,77536,77539,77542,77547,77549,77552,77555,77558,77561,77564,77567,77570,77573,77576,77579,77582,77585,77588,77593,77598,77603,77606,77610,77613,77618,77622,77624,77635,77640,77741,77744,77747,77750,77753,77756,77759,77762,77765,77767,77770,77773,77776,77779,77782,77784,77787,77790,77793,77796,77799,77802,77804,77807,77809,77811,77814,77818,77822,77825,77828,77831,77834,77837,77840,77843,77846,77849,77854,77974,77977,77980,77985,77988,77991,77994,77997,78002,78005,78008,78011,78014,78019,78022,78122,78187,78261,78265,78268,78271,78275,78278,78292,78321,78324,78327,78330,78333,78336,78339,78342,78344,78347,78350,78353,78356,78360,78365,78369,78374,78449,78452,78635,78638,78641,78644,78647,78650,78652,78655,78658,78661,78664,78667,78670,78672,78676,78679,78684,78687,78690,78693,78696,78698,78703,78706,78709,78712,78715,78717,78722,78725,78728,78730,78732,78735,78739,78742,78745,78750,78753,78756,78759,78809,78814,78818,78823,78826,78895,78898,78907,78911,78916,78919,78922,78930,78933,78950,80752,80756,80760,80765,80768,80772,80778,80784,80936,80941,80946,80949,80952,80955,80958,80961,80964,80967,80970,80973,80976,80979,80982,80987,80991,80994,81005,81009,81014,81017,81020,81023,81026,81029,81031,81034,81037,81040,81043,81045,81062,81065,81069,81072,81077,81082,81085,81088,81092,81095,81098,81107,81110,81114,81117,81122,81127,81194,81198,81201,81204,81209,81214,81300,81305,81309,81312,81315,81330,81333,81338,81342,81347,81456,81459,81470,81620,81624,81629,81738,81742,81747,81752,81757,81760,81767,81787,81823,81987,81992,81995,82000,82007,82010,82013,82016,82075,82131,82187,82191,82196,82511,82514,82518,82521,82526,82635,82640,82644,82649,82653,82724,82728,82730,82733,82736,82774,83050,83054,83071,83137,83171,83175,83178,83183,83212,83219,83228,83233,83248,83253,83262,83265,83402,83406,83468,83472,83477,83722,83726,83731,83734,83737,83740,83743,83747,83752,85333,85337,85341,85347,85350,85355,85359,85362,85367,85370,85381,85385,85390,85394,85399,85404,85407,85412,85416,85420,85423,85428,85433,85436,85439,85442,85564,85569,85671,85674,85677,85681,85686,85858,85863,85867,85870,85875,85941,85946,85949,86080,86083,86088,86091,86094,86185,86190,86193,86196,86199,86202,86207,86212,86215,86220,86225,86230,86234,86237,86240,86245,86250,86255,86260,86314,86317,86320,86325,86328,86331,86336,86341,86346,86350,86355,86369,86374,86377,86382,86386,86391,86396,86401,86406,86411,86416,86421,86426,86429,86433,86438,86441,86444,86447,86452,86457,86460,86463,86467,86470,86473,86478,86483,86488,86493,86496,86501,86506,86567,86572,86575,86580,87821,87826,87830,87834,87839,87842,87847,87852,87855,87860,87862,87867,87871,87874,87877,87888,87892,87897,87902,87957,87962,87967,87972,88183,88188,88192,88197,88200,88202,88205,88208,88655,88660,88667,88673,88676,88679,88943,88948,88952,89217,89222,89226,89231,89236,89241,89246,89577,89580,89585,89590,89593,89597,89601,89606,89611,89616,89621,89626,89631,89635,89638,89643,89648,89651,89725,89730,89735,89740,89742,89745,90115,90120,90125,90130,90133,90136,90238,90243,90248,90351,90355,90360,90364,90368,90373,90378,90381,90386,90389,90392,90785,90790,90793,90796,90799,90802,91322,91326,91331,91336,91341,91344,91349,91352,91355,91737,91742,91744,91746,91749,91752,92264,92268,92329,92332,92335,92338,92342,92345,92350,92355,93280],[10,77213,77209],{"id":77214},"_4js进阶",[19,77216,77217],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77219,77221],{"id":77220},"_41-作用域","4.1 作用域",[62,77223,77225],{"id":77224},"_411-局部作用域","4.1.1 局部作用域",[19,77227,77228],{},[23,77229],{"alt":122,"src":77230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77232,77233],{},[23,77234],{"alt":122,"src":77235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1681,77237,77238,77241,77244],{},[635,77239,77240],{},"函数作用域在函数内部",[635,77242,77243],{},"块级作用域在{}",[635,77245,77246],{},"对象的那个{}不是作用域，不是块作用域",[62,77248,77250],{"id":77249},"_412-全局作用域","4.1.2 全局作用域",[19,77252,77253],{},[23,77254],{"alt":122,"src":77255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77257,77258],{},"window.a=10不要这样写",[62,77260,77262],{"id":77261},"_413-作用域链","4.1.3 作用域链",[19,77264,77265],{},"变量查找机制",[19,77267,77268],{},[23,77269],{"alt":122,"src":77270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77272,77274],{"id":77273},"_42-垃圾回收机制","4.2 垃圾回收机制",[62,77276,77278],{"id":77277},"_421-大体介绍","4.2.1 大体介绍",[19,77280,77281],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77283,77284],{},[23,77285],{"alt":122,"src":77286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77288,77289],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[62,77291,77293],{"id":77292},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77295,77296],{},"堆栈空间分配区别：",[632,77298,77299,77302],{},[635,77300,77301],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[635,77303,77304],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77306,77307],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22539,77309,77311],{"id":77310},"_4221-引用计数","4.2.2.1 引用计数",[19,77313,77314],{},[23,77315],{"alt":122,"src":77316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77318,77319],{},[23,77320],{"alt":122,"src":77321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77323,77324],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22539,77326,77328],{"id":77327},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77330,77331],{},[23,77332],{"alt":122,"src":77333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77335,77336],{},[23,77337],{"alt":122,"src":77338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77340,77341],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77343,77345],{"id":77344},"_43-闭包","4.3 闭包",[19,77347,77348],{},[23,77349],{"alt":122,"src":77350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77352,77353],{},"闭包：内层函数+外层函数的变量",[19,77355,77356],{},[23,77357],{"alt":122,"src":77358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77360,77361],{},"closure就是闭包",[19,77363,77364],{},[23,77365],{"alt":122,"src":77366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77368,77369],{},"内层函数必须包含外层函数的变量才是闭包",[19,77371,77372],{},[23,77373],{"alt":122,"src":77374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77376,77377],{},[23,77378],{"alt":122,"src":77379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77381,77382],{},"闭包可能会引起内存泄漏",[19,77384,77385],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77387,77389],{"id":77388},"_44-变量提升","4.4 变量提升",[19,77391,77392],{},[23,77393],{"alt":122,"src":77394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77396,77397],{},[23,77398],{"alt":122,"src":77399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77401,77402],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77404,77406],{"id":77405},"_45-函数进阶","4.5 函数进阶",[62,77408,77410],{"id":77409},"_451-函数提升","4.5.1 函数提升",[19,77412,77413],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77415,77416],{},"只提升函数声明，不提升函数调用",[52348,77418,77419],{},"\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",[62,77421,77423],{"id":77422},"_452-函数参数","4.5.2 函数参数",[22539,77425,77427],{"id":77426},"_4521-动态参数","4.5.2.1 动态参数",[19,77429,77430],{},[23,77431],{"alt":122,"src":77432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77434,77435],{},[23,77436],{"alt":122,"src":77437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77439,77440],{},"箭头函数里边没有arguments",[22539,77442,77444],{"id":77443},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77446,77447],{},[23,77448],{"alt":122,"src":77449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77451,77452],{},[23,77453],{"alt":122,"src":77454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77456,77457],{},"剩余参数使用的时候不需要写...",[19,77459,77460],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77462,77463],{},"  function getSum(a,b,...arr) {",[19,77465,77466],{},"  console.log(11)",[19,77468,77469],{},"  }",[19,77471,77472],{},"  getSum(1,2,3,4)",[19,77474,77475],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77477,77478],{},"  getSum(1,2)",[19,77480,77481],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77483,77484],{},[23,77485],{"alt":122,"src":77486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22539,77488,77490],{"id":77489},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77492,77493],{},[23,77494],{"alt":122,"src":77495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77497,77498],{},[23,77499],{"alt":122,"src":77500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77502,77503],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77505,77506],{},"展开运算符可以用于数组之间的合并：",[19,77508,77509],{},"const arr1 = [1, 2, 3]",[19,77511,77512],{},"const arr2 = [3, 4, 5]",[19,77514,77515],{},"const arr = [...arr1, ...arr2]",[19,77517,77518],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77520,77521],{},"剩余参数：函数参数使用，得到真数组",[19,77523,77524],{},"展开运算符：数组中使用，数组展开",[62,77526,77528],{"id":77527},"_453-箭头函数","4.5.3 箭头函数",[22539,77530,77532],{"id":77531},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77534,77535],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77537,77538],{},"它不是万能的！！！",[19,77540,77541],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77543,77544],{},[23,77545],{"alt":122,"src":77546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77548,32],{},[19,77550,77551],{},"① 只有一个形参的时候，可以省略小括号：",[19,77553,77554],{},"const fn=x=>{console.log(x)}",[19,77556,77557],{},"② 只有一行代码时可以省略大括号：",[19,77559,77560],{},"const fn=x=>console.log(11)",[19,77562,77563],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77565,77566],{},"const fn=x=>x+x",[19,77568,77569],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77571,77572],{},"⑤ 阻止表单默认提交：",[19,77574,77575],{},"const form = document.querySelector('form')",[19,77577,77578],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77580,77581],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77583,77584],{},"const fn=uname=>({uname:uname})",[19,77586,77587],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77589,77590],{},[23,77591],{"alt":122,"src":77592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77594,77595],{},[23,77596],{"alt":122,"src":77597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77599,77600],{},[23,77601],{"alt":122,"src":77602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77604,77605],{},"一定不要忘记用()，有()就理解为自带return",[22539,77607,77609],{"id":77608},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77611,77612],{},"箭头函数是没有动态参数的arguments",[19,77614,77615],{},[23,77616],{"alt":122,"src":77617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22539,77619,77621],{"id":77620},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77623,11874],{},[632,77625,77626,77629,77632],{},[635,77627,77628],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[635,77630,77631],{},"事件回调函数使用箭头函数时，this 为全局的 window",[635,77633,77634],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77636,77637],{},[23,77638],{"alt":122,"src":77639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[117,77641,77643],{"className":53602,"code":77642,"language":53604,"meta":122,"style":122},"  \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",[124,77644,77645,77653,77658,77663,77668,77673,77678,77682,77687,77691,77695,77700,77705,77710,77714,77718,77723,77728,77733],{"__ignoreMap":122},[127,77646,77647,77649,77651],{"class":129,"line":130},[127,77648,52679],{"class":147},[127,77650,52348],{"class":140},[127,77652,51846],{"class":147},[127,77654,77655],{"class":129,"line":137},[127,77656,77657],{"class":147},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[127,77659,77660],{"class":129,"line":151},[127,77661,77662],{"class":147},"    console.log(this) \u002F\u002F指向window\n",[127,77664,77665],{"class":129,"line":167},[127,77666,77667],{"class":147},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[127,77669,77670],{"class":129,"line":415},[127,77671,77672],{"class":147},"    function fn() {\n",[127,77674,77675],{"class":129,"line":421},[127,77676,77677],{"class":147},"      console.log(this)  \u002F\u002F指向window\n",[127,77679,77680],{"class":129,"line":1766},[127,77681,2729],{"class":147},[127,77683,77684],{"class":129,"line":1856},[127,77685,77686],{"class":147},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[127,77688,77689],{"class":129,"line":1862},[127,77690,2942],{"emptyLinePlaceholder":606},[127,77692,77693],{"class":129,"line":1874},[127,77694,72052],{"class":147},[127,77696,77697],{"class":129,"line":2155},[127,77698,77699],{"class":147},"      name: 'andy',\n",[127,77701,77702],{"class":129,"line":2160},[127,77703,77704],{"class":147},"      sayHai: function () {\n",[127,77706,77707],{"class":129,"line":2166},[127,77708,77709],{"class":147},"        console.log(this)\n",[127,77711,77712],{"class":129,"line":2171},[127,77713,52933],{"class":147},[127,77715,77716],{"class":129,"line":2185},[127,77717,2729],{"class":147},[127,77719,77720],{"class":129,"line":2190},[127,77721,77722],{"class":147},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[127,77724,77725],{"class":129,"line":2196},[127,77726,77727],{"class":147},"    \u002F\u002F 2.箭头函数的this\n",[127,77729,77730],{"class":129,"line":2217},[127,77731,77732],{"class":147},"    const fn = () => console.log(this)\n",[127,77734,77735,77737,77739],{"class":129,"line":2222},[127,77736,52952],{"class":147},[127,77738,52348],{"class":140},[127,77740,51846],{"class":147},[19,77742,77743],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77745,77746],{},"const fn = () => console.log(this)",[19,77748,77749],{},"fn() \u002F\u002F指向window",[19,77751,77752],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77754,77755],{},"①",[19,77757,77758],{},"const obj = {",[19,77760,77761],{},"uname: 'pink老师',",[19,77763,77764],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77766,1620],{},[19,77768,77769],{},"调用对象里边的函数",[19,77771,77772],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77774,77775],{},"obj.sayHai()",[19,77777,77778],{},"②",[19,77780,77781],{},"const obj1 = {",[19,77783,77761],{},[19,77785,77786],{},"sayHai: function () {",[19,77788,77789],{},"let i = 10",[19,77791,77792],{},"const count = () => {",[19,77794,77795],{},"console.log(this)",[19,77797,77798],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77800,77801],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77803,1620],{},[19,77805,77806],{},"count()",[19,77808,1620],{},[19,77810,1620],{},[19,77812,77813],{},"obj1.sayHai()",[14,77815,77817],{"id":77816},"_46-解构赋值","4.6 解构赋值",[62,77819,77821],{"id":77820},"_461-数组解构","4.6.1 数组解构",[19,77823,77824],{},"以前要是使用数组中的值的话：",[19,77826,77827],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77829,77830],{},"const arr=[100,60,80]",[19,77832,77833],{},"const max=arr[0]",[19,77835,77836],{},"const min=arr[1]",[19,77838,77839],{},"const avg=arr[2]",[19,77841,77842],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77844,77845],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77847,77848],{},"这个写法就类似于上边的那种用很多const的方法",[19,77850,77851],{},[23,77852],{"alt":122,"src":77853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[117,77855,77857],{"className":51173,"code":77856,"language":51175,"meta":122,"style":122},"①变量之间交换值:\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",[124,77858,77859,77864,77869,77874,77879,77884,77888,77892,77897,77901,77906,77911,77915,77920,77925,77936,77946,77951,77956,77961,77965,77969],{"__ignoreMap":122},[127,77860,77861],{"class":129,"line":130},[127,77862,77863],{"class":147},"①变量之间交换值:\n",[127,77865,77866],{"class":129,"line":137},[127,77867,77868],{"class":147},"let a=1\n",[127,77870,77871],{"class":129,"line":151},[127,77872,77873],{"class":147},"let b=2;\n",[127,77875,77876],{"class":129,"line":167},[127,77877,77878],{"class":147},"必须加这行代码，不然就会报错\n",[127,77880,77881],{"class":129,"line":415},[127,77882,77883],{"class":147},"[b,a]=[a,b]\n",[127,77885,77886],{"class":129,"line":421},[127,77887,2942],{"emptyLinePlaceholder":606},[127,77889,77890],{"class":129,"line":1766},[127,77891,2942],{"emptyLinePlaceholder":606},[127,77893,77894],{"class":129,"line":1856},[127,77895,77896],{"class":147},"可以写成下面的方式：\n",[127,77898,77899],{"class":129,"line":1862},[127,77900,77868],{"class":147},[127,77902,77903],{"class":129,"line":1874},[127,77904,77905],{"class":147},"let b=2\n",[127,77907,77908],{"class":129,"line":2155},[127,77909,77910],{"class":147},";[b,a]=[a,b]\n",[127,77912,77913],{"class":129,"line":2160},[127,77914,2942],{"emptyLinePlaceholder":606},[127,77916,77917],{"class":129,"line":2166},[127,77918,77919],{"class":147},"②排序\n",[127,77921,77922],{"class":129,"line":2171},[127,77923,77924],{"class":147},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[127,77926,77927,77930,77933],{"class":129,"line":2185},[127,77928,77929],{"class":147},"for (let i = 0; i ",[127,77931,1584],{"class":77932},"s7hpK",[127,77934,77935],{"class":147}," arr1.length; i++) {\n",[127,77937,77938,77941,77943],{"class":129,"line":2190},[127,77939,77940],{"class":147},"   for (let j = 0; j ",[127,77942,1584],{"class":77932},[127,77944,77945],{"class":147}," arr1.length - 1; j++) {\n",[127,77947,77948],{"class":129,"line":2196},[127,77949,77950],{"class":147},"      if (arr1[j] > arr1[j + 1]) {\n",[127,77952,77953],{"class":129,"line":2217},[127,77954,77955],{"class":147},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[127,77957,77958],{"class":129,"line":2222},[127,77959,77960],{"class":147},"       }\n",[127,77962,77963],{"class":129,"line":2236},[127,77964,4851],{"class":147},[127,77966,77967],{"class":129,"line":2241},[127,77968,170],{"class":147},[127,77970,77971],{"class":129,"line":2270},[127,77972,77973],{"class":147},"console.log(arr1)\n",[19,77975,77976],{},"数组解构的细节：",[19,77978,77979],{},"①变量多，单元值少",[19,77981,77982],{},[23,77983],{"alt":122,"src":77984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77986,77987],{},"防止出现undefined的方法：",[19,77989,77990],{},"const [a=0,b=0] =[1]",[19,77992,77993],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77995,77996],{},"②变量少，单元值多",[19,77998,77999],{},[23,78000],{"alt":122,"src":78001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78003,78004],{},"此时可以使用剩余参数来接收多余的值",[19,78006,78007],{},"const [a,b,...c]=[1,2,3,4]",[19,78009,78010],{},"console.log(c) 输出[3,4]",[19,78012,78013],{},"③可以按需导入，忽略某些返回值",[19,78015,78016],{},[23,78017],{"alt":122,"src":78018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78020,78021],{},"④支持多维数组的结构",[117,78023,78027],{"className":78024,"code":78025,"language":78026,"meta":122,"style":122},"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",[124,78028,78029,78057,78073,78088,78103],{"__ignoreMap":122},[127,78030,78031,78033,78035,78037,78039,78041,78043,78045,78048,78050,78052,78054],{"class":129,"line":130},[127,78032,7334],{"class":290},[127,78034,52368],{"class":147},[127,78036,725],{"class":290},[127,78038,52761],{"class":147},[127,78040,893],{"class":154},[127,78042,12977],{"class":147},[127,78044,530],{"class":154},[127,78046,78047],{"class":147},", [",[127,78049,749],{"class":154},[127,78051,12977],{"class":147},[127,78053,968],{"class":154},[127,78055,78056],{"class":147},"]]\n",[127,78058,78059,78062,78064,78066,78068,78070],{"class":129,"line":137},[127,78060,78061],{"class":147},"console.",[127,78063,58780],{"class":143},[127,78065,4393],{"class":147},[127,78067,867],{"class":154},[127,78069,4758],{"class":147},[127,78071,78072],{"class":133},"  \u002F\u002F1\n",[127,78074,78075,78077,78079,78081,78083,78085],{"class":129,"line":151},[127,78076,78061],{"class":147},[127,78078,58780],{"class":143},[127,78080,4393],{"class":147},[127,78082,893],{"class":154},[127,78084,4758],{"class":147},[127,78086,78087],{"class":133},"  \u002F\u002F2\n",[127,78089,78090,78092,78094,78096,78098,78100],{"class":129,"line":167},[127,78091,78061],{"class":147},[127,78093,58780],{"class":143},[127,78095,4393],{"class":147},[127,78097,530],{"class":154},[127,78099,4758],{"class":147},[127,78101,78102],{"class":133},"  \u002F\u002F[3,4]\n",[127,78104,78105,78107,78109,78111,78113,78115,78117,78119],{"class":129,"line":415},[127,78106,78061],{"class":147},[127,78108,58780],{"class":143},[127,78110,4393],{"class":147},[127,78112,530],{"class":154},[127,78114,5443],{"class":147},[127,78116,867],{"class":154},[127,78118,4758],{"class":147},[127,78120,78121],{"class":133},"  \u002F\u002F3\n",[117,78123,78125],{"className":78024,"code":78124,"language":78026,"meta":122,"style":122},"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",[124,78126,78127,78154,78165,78176],{"__ignoreMap":122},[127,78128,78129,78131,78134,78136,78138,78140,78142,78144,78146,78148,78150,78152],{"class":129,"line":130},[127,78130,7334],{"class":290},[127,78132,78133],{"class":147}," [a, b, c] ",[127,78135,725],{"class":290},[127,78137,52761],{"class":147},[127,78139,893],{"class":154},[127,78141,12977],{"class":147},[127,78143,530],{"class":154},[127,78145,78047],{"class":147},[127,78147,749],{"class":154},[127,78149,12977],{"class":147},[127,78151,968],{"class":154},[127,78153,78056],{"class":147},[127,78155,78156,78158,78160,78163],{"class":129,"line":137},[127,78157,78061],{"class":147},[127,78159,58780],{"class":143},[127,78161,78162],{"class":147},"(a)",[127,78164,78072],{"class":133},[127,78166,78167,78169,78171,78174],{"class":129,"line":151},[127,78168,78061],{"class":147},[127,78170,58780],{"class":143},[127,78172,78173],{"class":147},"(b)",[127,78175,78087],{"class":133},[127,78177,78178,78180,78182,78185],{"class":129,"line":167},[127,78179,78061],{"class":147},[127,78181,58780],{"class":143},[127,78183,78184],{"class":147},"(c)",[127,78186,78102],{"class":133},[117,78188,78190],{"className":78024,"code":78189,"language":78026,"meta":122,"style":122},"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",[124,78191,78192,78219,78229,78239,78249],{"__ignoreMap":122},[127,78193,78194,78196,78199,78201,78203,78205,78207,78209,78211,78213,78215,78217],{"class":129,"line":130},[127,78195,7334],{"class":290},[127,78197,78198],{"class":147}," [a, b, [c, d]] ",[127,78200,725],{"class":290},[127,78202,52761],{"class":147},[127,78204,893],{"class":154},[127,78206,12977],{"class":147},[127,78208,530],{"class":154},[127,78210,78047],{"class":147},[127,78212,749],{"class":154},[127,78214,12977],{"class":147},[127,78216,968],{"class":154},[127,78218,78056],{"class":147},[127,78220,78221,78223,78225,78227],{"class":129,"line":137},[127,78222,78061],{"class":147},[127,78224,58780],{"class":143},[127,78226,78162],{"class":147},[127,78228,78072],{"class":133},[127,78230,78231,78233,78235,78237],{"class":129,"line":151},[127,78232,78061],{"class":147},[127,78234,58780],{"class":143},[127,78236,78173],{"class":147},[127,78238,78087],{"class":133},[127,78240,78241,78243,78245,78247],{"class":129,"line":167},[127,78242,78061],{"class":147},[127,78244,58780],{"class":143},[127,78246,78184],{"class":147},[127,78248,78121],{"class":133},[127,78250,78251,78253,78255,78258],{"class":129,"line":415},[127,78252,78061],{"class":147},[127,78254,58780],{"class":143},[127,78256,78257],{"class":147},"(d)",[127,78259,78260],{"class":133},"  \u002F\u002F4\n",[62,78262,78264],{"id":78263},"_462-对象解构","4.6.2 对象解构",[19,78266,78267],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78269,78270],{},"用的非常非常多！！！！！！",[22539,78272,78274],{"id":78273},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78276,78277],{},"基本语法：",[632,78279,78280,78283,78286,78289],{},[635,78281,78282],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[635,78284,78285],{},"对象属性的值将被赋值给与属性名相同的变量",[635,78287,78288],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[635,78290,78291],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[117,78293,78295],{"className":51173,"code":78294,"language":51175,"meta":122,"style":122},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[124,78296,78297,78302,78307,78312,78316],{"__ignoreMap":122},[127,78298,78299],{"class":129,"line":130},[127,78300,78301],{"class":147},"const obj = {\n",[127,78303,78304],{"class":129,"line":137},[127,78305,78306],{"class":147},"   uname: 'pink老师',\n",[127,78308,78309],{"class":129,"line":151},[127,78310,78311],{"class":147},"   age: 18,\n",[127,78313,78314],{"class":129,"line":167},[127,78315,170],{"class":147},[127,78317,78318],{"class":129,"line":415},[127,78319,78320],{"class":147},"const { uname, age } = obj\n",[19,78322,78323],{},"上方代码这样写等价于：",[19,78325,78326],{},"const uname等价于obj.uname",[19,78328,78329],{},"变量名可以重新改名：",[19,78331,78332],{},"const uname='red老师'",[19,78334,78335],{},"const user={",[19,78337,78338],{},"  uname:'pink老师',",[19,78340,78341],{},"  age:18",[19,78343,1620],{},[19,78345,78346],{},"const {uname,age}=user",[19,78348,78349],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78351,78352],{},"const {旧变量名：新变量名}=对象",[19,78354,78355],{},"const {uname:username,age}=user",[22539,78357,78359],{"id":78358},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78361,78362],{},[23,78363],{"alt":122,"src":78364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22539,78366,78368],{"id":78367},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78370,78371],{},[23,78372],{"alt":122,"src":78373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[117,78375,78377],{"className":53602,"code":78376,"language":53604,"meta":122,"style":122},"  \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",[124,78378,78379,78387,78392,78397,78402,78407,78412,78417,78422,78427,78431,78436,78441],{"__ignoreMap":122},[127,78380,78381,78383,78385],{"class":129,"line":130},[127,78382,52679],{"class":147},[127,78384,52348],{"class":140},[127,78386,51846],{"class":147},[127,78388,78389],{"class":129,"line":137},[127,78390,78391],{"class":147},"    const pig = {\n",[127,78393,78394],{"class":129,"line":151},[127,78395,78396],{"class":147},"      name: '佩奇',\n",[127,78398,78399],{"class":129,"line":167},[127,78400,78401],{"class":147},"      family: {\n",[127,78403,78404],{"class":129,"line":415},[127,78405,78406],{"class":147},"        mother: '猪妈妈',\n",[127,78408,78409],{"class":129,"line":421},[127,78410,78411],{"class":147},"        father: '猪爸爸',\n",[127,78413,78414],{"class":129,"line":1766},[127,78415,78416],{"class":147},"        sister: '乔治'\n",[127,78418,78419],{"class":129,"line":1856},[127,78420,78421],{"class":147},"      },\n",[127,78423,78424],{"class":129,"line":1862},[127,78425,78426],{"class":147},"      age: 6\n",[127,78428,78429],{"class":129,"line":1874},[127,78430,2729],{"class":147},[127,78432,78433],{"class":129,"line":2155},[127,78434,78435],{"class":147},"    \u002F\u002F 多级对象解构\n",[127,78437,78438],{"class":129,"line":2160},[127,78439,78440],{"class":147},"    const { name, family: { mother, father, sister }, age } = pig\n",[127,78442,78443,78445,78447],{"class":129,"line":2166},[127,78444,52952],{"class":147},[127,78446,52348],{"class":140},[127,78448,51846],{"class":147},[19,78450,78451],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[117,78453,78456],{"className":78454,"code":78455,"language":76976,"meta":122,"style":122},"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",[124,78457,78458,78463,78474,78486,78498,78507,78511,78522,78534,78544,78549,78553,78563,78574,78583,78587,78591,78602,78613,78622,78626,78631],{"__ignoreMap":122},[127,78459,78460],{"class":129,"line":130},[127,78461,78462],{"class":133},"    \u002F\u002F 这是后台传递过来的数据\n",[127,78464,78465,78467,78470,78472],{"class":129,"line":137},[127,78466,11763],{"class":290},[127,78468,78469],{"class":147}," msg ",[127,78471,725],{"class":290},[127,78473,148],{"class":147},[127,78475,78476,78479,78481,78484],{"class":129,"line":151},[127,78477,78478],{"class":781},"      \"code\"",[127,78480,1533],{"class":290},[127,78482,78483],{"class":154}," 200",[127,78485,32006],{"class":147},[127,78487,78488,78491,78493,78496],{"class":129,"line":167},[127,78489,78490],{"class":781},"      \"msg\"",[127,78492,1533],{"class":290},[127,78494,78495],{"class":781}," \"获取新闻列表成功\"",[127,78497,32006],{"class":147},[127,78499,78500,78503,78505],{"class":129,"line":415},[127,78501,78502],{"class":781},"      \"data\"",[127,78504,1533],{"class":290},[127,78506,55981],{"class":147},[127,78508,78509],{"class":129,"line":421},[127,78510,3052],{"class":147},[127,78512,78513,78516,78518,78520],{"class":129,"line":1766},[127,78514,78515],{"class":781},"          \"id\"",[127,78517,1533],{"class":290},[127,78519,25659],{"class":154},[127,78521,32006],{"class":147},[127,78523,78524,78527,78529,78532],{"class":129,"line":1856},[127,78525,78526],{"class":781},"          \"title\"",[127,78528,1533],{"class":290},[127,78530,78531],{"class":781}," \"5G商用自己，三大运用商收入下降\"",[127,78533,32006],{"class":147},[127,78535,78536,78539,78541],{"class":129,"line":1862},[127,78537,78538],{"class":781},"          \"count\"",[127,78540,1533],{"class":290},[127,78542,78543],{"class":154}," 58\n",[127,78545,78546],{"class":129,"line":1874},[127,78547,78548],{"class":147},"        },\n",[127,78550,78551],{"class":129,"line":2155},[127,78552,3052],{"class":147},[127,78554,78555,78557,78559,78561],{"class":129,"line":2160},[127,78556,78515],{"class":781},[127,78558,1533],{"class":290},[127,78560,15297],{"class":154},[127,78562,32006],{"class":147},[127,78564,78565,78567,78569,78572],{"class":129,"line":2166},[127,78566,78526],{"class":781},[127,78568,1533],{"class":290},[127,78570,78571],{"class":781}," \"国际媒体头条速览\"",[127,78573,32006],{"class":147},[127,78575,78576,78578,78580],{"class":129,"line":2171},[127,78577,78538],{"class":781},[127,78579,1533],{"class":290},[127,78581,78582],{"class":154}," 56\n",[127,78584,78585],{"class":129,"line":2185},[127,78586,78548],{"class":147},[127,78588,78589],{"class":129,"line":2190},[127,78590,3052],{"class":147},[127,78592,78593,78595,78597,78600],{"class":129,"line":2196},[127,78594,78515],{"class":781},[127,78596,1533],{"class":290},[127,78598,78599],{"class":154}," 3",[127,78601,32006],{"class":147},[127,78603,78604,78606,78608,78611],{"class":129,"line":2217},[127,78605,78526],{"class":781},[127,78607,1533],{"class":290},[127,78609,78610],{"class":781}," \"乌克兰和俄罗斯持续冲突\"",[127,78612,32006],{"class":147},[127,78614,78615,78617,78619],{"class":129,"line":2222},[127,78616,78538],{"class":781},[127,78618,1533],{"class":290},[127,78620,78621],{"class":154}," 1669\n",[127,78623,78624],{"class":129,"line":2236},[127,78625,78548],{"class":147},[127,78627,78628],{"class":129,"line":2241},[127,78629,78630],{"class":147},"      ]\n",[127,78632,78633],{"class":129,"line":2270},[127,78634,2729],{"class":147},[19,78636,78637],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78639,78640],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78642,78643],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78645,78646],{},"function({data}) {",[19,78648,78649],{},"console.log(data)",[19,78651,1620],{},[19,78653,78654],{},"render(msg)",[19,78656,78657],{},"实参传递给形参的时候解构了",[19,78659,78660],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78662,78663],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78665,78666],{},"function render({data:mydata}) {",[19,78668,78669],{},"  console.log(data)",[19,78671,1620],{},[62,78673,78675],{"id":78674},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78677,78678],{},"有两种情况：一个是数组结构，一个是立即执行函数",[632,78680,78681],{},[635,78682,78683],{},"如果对一个数组进行遍历，有两种方式：",[19,78685,78686],{},"①法1",[19,78688,78689],{},"const arr=[1,2,3]",[19,78691,78692],{},"arr.map(function(item,index) {",[19,78694,78695],{},"  console.log(item)",[19,78697,52999],{},[19,78699,78700],{},[23,78701],{"alt":122,"src":78702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78704,78705],{},"②法2",[19,78707,78708],{},"const str='pink'",[19,78710,78711],{},"[1,2,3].map(function(item,index) {",[19,78713,78714],{},"console.log(item)",[19,78716,52999],{},[19,78718,78719],{},[23,78720],{"alt":122,"src":78721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78723,78724],{},"此时会报错",[19,78726,78727],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78729,78714],{},[19,78731,52999],{},[19,78733,78734],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78736,78738],{"id":78737},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78740,78741],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78743,78744],{},"可以理解为加强版的for循环",[19,78746,78747],{},[23,78748],{"alt":122,"src":78749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78751,78752],{},"里边不写return，不返回数组，只遍历不返回",[19,78754,78755],{},"map是返回数组",[19,78757,78758],{},"forEach主要用于遍历数组对象",[117,78760,78762],{"className":53602,"code":78761,"language":53604,"meta":122,"style":122},"  \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",[124,78763,78764,78772,78777,78782,78787,78792,78796,78801],{"__ignoreMap":122},[127,78765,78766,78768,78770],{"class":129,"line":130},[127,78767,52679],{"class":147},[127,78769,52348],{"class":140},[127,78771,51846],{"class":147},[127,78773,78774],{"class":129,"line":137},[127,78775,78776],{"class":147},"    const arr = ['red', 'green', 'pink']\n",[127,78778,78779],{"class":129,"line":151},[127,78780,78781],{"class":147},"    const result = arr.forEach(function (item, index) {\n",[127,78783,78784],{"class":129,"line":167},[127,78785,78786],{"class":147},"      console.log(item)\n",[127,78788,78789],{"class":129,"line":415},[127,78790,78791],{"class":147},"      console.log(index)\n",[127,78793,78794],{"class":129,"line":421},[127,78795,34001],{"class":147},[127,78797,78798],{"class":129,"line":1766},[127,78799,78800],{"class":147},"    console.log(result)\n",[127,78802,78803,78805,78807],{"class":129,"line":1856},[127,78804,52952],{"class":147},[127,78806,52348],{"class":140},[127,78808,51846],{"class":147},[19,78810,78811],{},[23,78812],{"alt":122,"src":78813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78815,78817],{"id":78816},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78819,78820],{},[23,78821],{"alt":122,"src":78822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78824,78825],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[117,78827,78829],{"className":53602,"code":78828,"language":53604,"meta":122,"style":122},"\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",[124,78830,78831,78839,78847,78852,78857,78861,78865,78870,78874,78879,78887],{"__ignoreMap":122},[127,78832,78833,78835,78837],{"class":129,"line":130},[127,78834,1584],{"class":147},[127,78836,275],{"class":140},[127,78838,51846],{"class":147},[127,78840,78841,78843,78845],{"class":129,"line":137},[127,78842,52679],{"class":147},[127,78844,52348],{"class":140},[127,78846,51846],{"class":147},[127,78848,78849],{"class":129,"line":151},[127,78850,78851],{"class":147},"    const arr = [10, 20, 30]\n",[127,78853,78854],{"class":129,"line":167},[127,78855,78856],{"class":147},"    const newArr = arr.filter(function (item, index) {\n",[127,78858,78859],{"class":129,"line":415},[127,78860,78786],{"class":147},[127,78862,78863],{"class":129,"line":421},[127,78864,78791],{"class":147},[127,78866,78867],{"class":129,"line":1766},[127,78868,78869],{"class":147},"      return item >= 20\n",[127,78871,78872],{"class":129,"line":1856},[127,78873,34001],{"class":147},[127,78875,78876],{"class":129,"line":1862},[127,78877,78878],{"class":147},"    console.log(newArr)\n",[127,78880,78881,78883,78885],{"class":129,"line":1874},[127,78882,52952],{"class":147},[127,78884,52348],{"class":140},[127,78886,51846],{"class":147},[127,78888,78889,78891,78893],{"class":129,"line":2155},[127,78890,52321],{"class":147},[127,78892,275],{"class":140},[127,78894,51846],{"class":147},[19,78896,78897],{},"这个也可以写成箭头函数：",[117,78899,78901],{"className":51173,"code":78900,"language":51175,"meta":122,"style":122},"const newArr = arr.filter(item => item >= 20)\n",[124,78902,78903],{"__ignoreMap":122},[127,78904,78905],{"class":129,"line":130},[127,78906,78900],{"class":147},[14,78908,78910],{"id":78909},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78912,78913],{},[23,78914],{"alt":122,"src":78915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78917,78918],{},"步骤：",[19,78920,78921],{},"①：渲染页面模块",[1681,78923,78924,78927],{},[635,78925,78926],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[635,78928,78929],{},"用forEach+字符串的形式",[19,78931,78932],{},"②：点击不同需求，显示不同页面内容",[1681,78934,78935,78938,78941,78944,78947],{},[635,78936,78937],{},"点击采取事件委托方式 .filter",[635,78939,78940],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[635,78942,78943],{},"筛选条件是根据点击的 data-index 来判断",[635,78945,78946],{},"可以使用对象解构，把事件对象解构",[635,78948,78949],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[117,78951,78953],{"className":51173,"code":78952,"language":51175,"meta":122,"style":122},"\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",[124,78954,78955,78965,78979,78983,78991,79005,79025,79037,79045,79051,79061,79071,79081,79085,79089,79095,79108,79120,79130,79142,79146,79150,79157,79170,79182,79199,79217,79230,79234,79238,79250,79260,79264,79268,79275,79316,79343,79353,79357,79361,79369,79381,79385,79389,79397,79409,79421,79432,79436,79440,79449,79461,79472,79476,79480,79489,79501,79513,79517,79521,79528,79538,79550,79562,79577,79581,79585,79593,79609,79619,79629,79639,79651,79655,79659,79669,79680,79690,79694,79702,79710,79714,79722,79737,79763,79788,79813,79832,79840,79854,79859,79864,79869,79874,79879,79887,79895,79900,79911,79916,79926,79936,79946,79956,79960,79964,79973,79982,79991,80000,80004,80008,80017,80026,80035,80044,80048,80052,80061,80070,80079,80088,80092,80096,80105,80114,80123,80132,80136,80140,80149,80158,80167,80176,80180,80184,80193,80202,80211,80220,80224,80228,80237,80246,80254,80263,80267,80271,80275,80280,80292,80297,80309,80313,80330,80358,80367,80372,80382,80392,80401,80406,80411,80415,80420,80437,80441,80446,80454,80459,80486,80491,80511,80516,80528,80533,80538,80543,80554,80568,80605,80623,80656,80673,80697,80701,80706,80712,80716,80720,80724,80732,80740,80744],{"__ignoreMap":122},[127,78956,78957,78959,78961,78963],{"class":129,"line":130},[127,78958,51837],{"class":147},[127,78960,51840],{"class":140},[127,78962,51843],{"class":143},[127,78964,51846],{"class":147},[127,78966,78967,78969,78971,78973,78975,78977],{"class":129,"line":137},[127,78968,1584],{"class":147},[127,78970,51175],{"class":140},[127,78972,51855],{"class":143},[127,78974,725],{"class":147},[127,78976,51860],{"class":781},[127,78978,51846],{"class":147},[127,78980,78981],{"class":129,"line":151},[127,78982,2942],{"emptyLinePlaceholder":606},[127,78984,78985,78987,78989],{"class":129,"line":167},[127,78986,1584],{"class":147},[127,78988,51873],{"class":140},[127,78990,51846],{"class":147},[127,78992,78993,78995,78997,78999,79001,79003],{"class":129,"line":415},[127,78994,52679],{"class":147},[127,78996,51883],{"class":140},[127,78998,51886],{"class":143},[127,79000,725],{"class":147},[127,79002,51891],{"class":781},[127,79004,51846],{"class":147},[127,79006,79007,79009,79011,79013,79015,79017,79019,79021,79023],{"class":129,"line":421},[127,79008,52679],{"class":147},[127,79010,51883],{"class":140},[127,79012,15462],{"class":143},[127,79014,725],{"class":147},[127,79016,51930],{"class":781},[127,79018,51910],{"class":143},[127,79020,725],{"class":147},[127,79022,51937],{"class":781},[127,79024,51846],{"class":147},[127,79026,79027,79029,79031,79033,79035],{"class":129,"line":1766},[127,79028,52679],{"class":147},[127,79030,51946],{"class":140},[127,79032,51949],{"class":147},[127,79034,51946],{"class":140},[127,79036,51846],{"class":147},[127,79038,79039,79041,79043],{"class":129,"line":1856},[127,79040,52679],{"class":147},[127,79042,575],{"class":140},[127,79044,51846],{"class":147},[127,79046,79047,79049],{"class":129,"line":1862},[127,79048,6945],{"class":140},[127,79050,148],{"class":147},[127,79052,79053,79055,79057,79059],{"class":129,"line":1874},[127,79054,55230],{"class":154},[127,79056,158],{"class":147},[127,79058,867],{"class":154},[127,79060,164],{"class":147},[127,79062,79063,79065,79067,79069],{"class":129,"line":2155},[127,79064,55241],{"class":154},[127,79066,158],{"class":147},[127,79068,867],{"class":154},[127,79070,164],{"class":147},[127,79072,79073,79075,79077,79079],{"class":129,"line":2160},[127,79074,73125],{"class":154},[127,79076,158],{"class":147},[127,79078,61038],{"class":154},[127,79080,164],{"class":147},[127,79082,79083],{"class":129,"line":2166},[127,79084,2729],{"class":147},[127,79086,79087],{"class":129,"line":2171},[127,79088,2942],{"emptyLinePlaceholder":606},[127,79090,79091,79093],{"class":129,"line":2185},[127,79092,62656],{"class":143},[127,79094,148],{"class":147},[127,79096,79097,79099,79101,79104,79106],{"class":129,"line":2190},[127,79098,55305],{"class":154},[127,79100,158],{"class":147},[127,79102,79103],{"class":154},"990",[127,79105,291],{"class":290},[127,79107,164],{"class":147},[127,79109,79110,79112,79114,79116,79118],{"class":129,"line":2196},[127,79111,55241],{"class":154},[127,79113,158],{"class":147},[127,79115,867],{"class":154},[127,79117,52093],{"class":154},[127,79119,164],{"class":147},[127,79121,79122,79124,79126,79128],{"class":129,"line":2217},[127,79123,55543],{"class":154},[127,79125,158],{"class":147},[127,79127,52015],{"class":154},[127,79129,164],{"class":147},[127,79131,79132,79135,79137,79140],{"class":129,"line":2222},[127,79133,79134],{"class":154},"      flex-wrap",[127,79136,158],{"class":147},[127,79138,79139],{"class":154},"wrap",[127,79141,164],{"class":147},[127,79143,79144],{"class":129,"line":2236},[127,79145,2729],{"class":147},[127,79147,79148],{"class":129,"line":2241},[127,79149,2942],{"emptyLinePlaceholder":606},[127,79151,79152,79155],{"class":129,"line":2270},[127,79153,79154],{"class":143},"    .item",[127,79156,148],{"class":147},[127,79158,79159,79161,79163,79166,79168],{"class":129,"line":2275},[127,79160,55305],{"class":154},[127,79162,158],{"class":147},[127,79164,79165],{"class":154},"240",[127,79167,291],{"class":290},[127,79169,164],{"class":147},[127,79171,79172,79174,79176,79178,79180],{"class":129,"line":2292},[127,79173,62533],{"class":154},[127,79175,158],{"class":147},[127,79177,1121],{"class":154},[127,79179,291],{"class":290},[127,79181,164],{"class":147},[127,79183,79184,79186,79188,79190,79192,79195,79197],{"class":129,"line":2297},[127,79185,55230],{"class":154},[127,79187,158],{"class":147},[127,79189,1374],{"class":154},[127,79191,291],{"class":290},[127,79193,79194],{"class":154}," 30",[127,79196,291],{"class":290},[127,79198,164],{"class":147},[127,79200,79201,79203,79205,79207,79210,79213,79215],{"class":129,"line":2302},[127,79202,62393],{"class":154},[127,79204,158],{"class":147},[127,79206,28661],{"class":154},[127,79208,79209],{"class":154}," ease",[127,79211,79212],{"class":154}," .5",[127,79214,1369],{"class":290},[127,79216,164],{"class":147},[127,79218,79219,79222,79224,79226,79228],{"class":129,"line":2307},[127,79220,79221],{"class":154},"      margin-bottom",[127,79223,158],{"class":147},[127,79225,1374],{"class":154},[127,79227,291],{"class":290},[127,79229,164],{"class":147},[127,79231,79232],{"class":129,"line":2321},[127,79233,2729],{"class":147},[127,79235,79236],{"class":129,"line":2326},[127,79237,2942],{"emptyLinePlaceholder":606},[127,79239,79240,79243,79245,79248],{"class":129,"line":3119},[127,79241,79242],{"class":143},"    .item:nth-child",[127,79244,681],{"class":147},[127,79246,79247],{"class":154},"4n",[127,79249,12984],{"class":147},[127,79251,79252,79254,79256,79258],{"class":129,"line":3133},[127,79253,62533],{"class":154},[127,79255,158],{"class":147},[127,79257,867],{"class":154},[127,79259,164],{"class":147},[127,79261,79262],{"class":129,"line":3141},[127,79263,2729],{"class":147},[127,79265,79266],{"class":129,"line":3146},[127,79267,2942],{"emptyLinePlaceholder":606},[127,79269,79270,79273],{"class":129,"line":3152},[127,79271,79272],{"class":143},"    .item:hover",[127,79274,148],{"class":147},[127,79276,79277,79280,79282,79284,79286,79288,79290,79292,79294,79297,79299,79301,79303,79305,79307,79309,79311,79314],{"class":129,"line":3158},[127,79278,79279],{"class":154},"      box-shadow",[127,79281,158],{"class":147},[127,79283,867],{"class":154},[127,79285,291],{"class":290},[127,79287,4635],{"class":154},[127,79289,291],{"class":290},[127,79291,2690],{"class":154},[127,79293,291],{"class":290},[127,79295,79296],{"class":154}," rgba",[127,79298,681],{"class":147},[127,79300,867],{"class":154},[127,79302,12977],{"class":147},[127,79304,867],{"class":154},[127,79306,12977],{"class":147},[127,79308,867],{"class":154},[127,79310,12977],{"class":147},[127,79312,79313],{"class":154},".2",[127,79315,3261],{"class":147},[127,79317,79318,79321,79323,79326,79328,79330,79332,79335,79337,79339,79341],{"class":129,"line":3163},[127,79319,79320],{"class":154},"      transform",[127,79322,158],{"class":147},[127,79324,79325],{"class":154},"translate3d",[127,79327,681],{"class":147},[127,79329,867],{"class":154},[127,79331,12977],{"class":147},[127,79333,79334],{"class":154},"-4",[127,79336,291],{"class":290},[127,79338,12977],{"class":147},[127,79340,867],{"class":154},[127,79342,3261],{"class":147},[127,79344,79345,79347,79349,79351],{"class":129,"line":8490},[127,79346,62558],{"class":154},[127,79348,158],{"class":147},[127,79350,62563],{"class":154},[127,79352,164],{"class":147},[127,79354,79355],{"class":129,"line":8514},[127,79356,2729],{"class":147},[127,79358,79359],{"class":129,"line":8519},[127,79360,2942],{"emptyLinePlaceholder":606},[127,79362,79363,79365,79367],{"class":129,"line":8525},[127,79364,79154],{"class":143},[127,79366,56149],{"class":140},[127,79368,148],{"class":147},[127,79370,79371,79373,79375,79377,79379],{"class":129,"line":8552},[127,79372,55305],{"class":154},[127,79374,158],{"class":147},[127,79376,986],{"class":154},[127,79378,1003],{"class":290},[127,79380,164],{"class":147},[127,79382,79383],{"class":129,"line":8557},[127,79384,2729],{"class":147},[127,79386,79387],{"class":129,"line":8563},[127,79388,2942],{"emptyLinePlaceholder":606},[127,79390,79391,79393,79395],{"class":129,"line":8575},[127,79392,79154],{"class":143},[127,79394,62837],{"class":143},[127,79396,148],{"class":147},[127,79398,79399,79401,79403,79405,79407],{"class":129,"line":8587},[127,79400,55456],{"class":154},[127,79402,158],{"class":147},[127,79404,1324],{"class":154},[127,79406,291],{"class":290},[127,79408,164],{"class":147},[127,79410,79411,79413,79415,79417,79419],{"class":129,"line":8599},[127,79412,79221],{"class":154},[127,79414,158],{"class":147},[127,79416,1121],{"class":154},[127,79418,291],{"class":290},[127,79420,164],{"class":147},[127,79422,79423,79425,79427,79430],{"class":129,"line":10258},[127,79424,57950],{"class":154},[127,79426,158],{"class":147},[127,79428,79429],{"class":154},"#666",[127,79431,164],{"class":147},[127,79433,79434],{"class":129,"line":10283},[127,79435,2729],{"class":147},[127,79437,79438],{"class":129,"line":10306},[127,79439,2942],{"emptyLinePlaceholder":606},[127,79441,79442,79444,79447],{"class":129,"line":10330},[127,79443,79154],{"class":143},[127,79445,79446],{"class":143}," .price",[127,79448,148],{"class":147},[127,79450,79451,79453,79455,79457,79459],{"class":129,"line":10335},[127,79452,55456],{"class":154},[127,79454,158],{"class":147},[127,79456,1424],{"class":154},[127,79458,291],{"class":290},[127,79460,164],{"class":147},[127,79462,79463,79465,79467,79470],{"class":129,"line":10340},[127,79464,57950],{"class":154},[127,79466,158],{"class":147},[127,79468,79469],{"class":154},"firebrick",[127,79471,164],{"class":147},[127,79473,79474],{"class":129,"line":10345},[127,79475,2729],{"class":147},[127,79477,79478],{"class":129,"line":10354},[127,79479,2942],{"emptyLinePlaceholder":606},[127,79481,79482,79484,79487],{"class":129,"line":10359},[127,79483,79154],{"class":143},[127,79485,79486],{"class":143}," .price::before",[127,79488,148],{"class":147},[127,79490,79491,79494,79496,79499],{"class":129,"line":10365},[127,79492,79493],{"class":154},"      content",[127,79495,158],{"class":147},[127,79497,79498],{"class":781},"'￥'",[127,79500,164],{"class":147},[127,79502,79503,79505,79507,79509,79511],{"class":129,"line":10386},[127,79504,55456],{"class":154},[127,79506,158],{"class":147},[127,79508,1224],{"class":154},[127,79510,291],{"class":290},[127,79512,164],{"class":147},[127,79514,79515],{"class":129,"line":10392},[127,79516,2729],{"class":147},[127,79518,79519],{"class":129,"line":10406},[127,79520,2942],{"emptyLinePlaceholder":606},[127,79522,79523,79526],{"class":129,"line":10412},[127,79524,79525],{"class":143},"    .filter",[127,79527,148],{"class":147},[127,79529,79530,79532,79534,79536],{"class":129,"line":10439},[127,79531,55543],{"class":154},[127,79533,158],{"class":147},[127,79535,52015],{"class":154},[127,79537,164],{"class":147},[127,79539,79540,79542,79544,79546,79548],{"class":129,"line":10448},[127,79541,55305],{"class":154},[127,79543,158],{"class":147},[127,79545,79103],{"class":154},[127,79547,291],{"class":290},[127,79549,164],{"class":147},[127,79551,79552,79554,79556,79558,79560],{"class":129,"line":10454},[127,79553,55241],{"class":154},[127,79555,158],{"class":147},[127,79557,867],{"class":154},[127,79559,52093],{"class":154},[127,79561,164],{"class":147},[127,79563,79564,79566,79568,79570,79572,79574],{"class":129,"line":10462},[127,79565,55230],{"class":154},[127,79567,158],{"class":147},[127,79569,1330],{"class":154},[127,79571,291],{"class":290},[127,79573,79194],{"class":154},[127,79575,79576],{"class":290},"px\n",[127,79578,79579],{"class":129,"line":10467},[127,79580,2729],{"class":147},[127,79582,79583],{"class":129,"line":17145},[127,79584,2942],{"emptyLinePlaceholder":606},[127,79586,79587,79589,79591],{"class":129,"line":17151},[127,79588,79525],{"class":143},[127,79590,1943],{"class":140},[127,79592,148],{"class":147},[127,79594,79595,79597,79599,79601,79603,79605,79607],{"class":129,"line":17174},[127,79596,55230],{"class":154},[127,79598,158],{"class":147},[127,79600,1121],{"class":154},[127,79602,291],{"class":290},[127,79604,9492],{"class":154},[127,79606,291],{"class":290},[127,79608,164],{"class":147},[127,79610,79611,79613,79615,79617],{"class":129,"line":17180},[127,79612,62254],{"class":154},[127,79614,158],{"class":147},[127,79616,62351],{"class":154},[127,79618,164],{"class":147},[127,79620,79621,79623,79625,79627],{"class":129,"line":17203},[127,79622,57950],{"class":154},[127,79624,158],{"class":147},[127,79626,79429],{"class":154},[127,79628,164],{"class":147},[127,79630,79631,79633,79635,79637],{"class":129,"line":17217},[127,79632,64503],{"class":154},[127,79634,158],{"class":147},[127,79636,469],{"class":154},[127,79638,164],{"class":147},[127,79640,79641,79643,79645,79647,79649],{"class":129,"line":17237},[127,79642,62283],{"class":154},[127,79644,158],{"class":147},[127,79646,1374],{"class":154},[127,79648,291],{"class":290},[127,79650,164],{"class":147},[127,79652,79653],{"class":129,"line":17243},[127,79654,2729],{"class":147},[127,79656,79657],{"class":129,"line":17254},[127,79658,2942],{"emptyLinePlaceholder":606},[127,79660,79661,79663,79665,79667],{"class":129,"line":17277},[127,79662,79525],{"class":143},[127,79664,1943],{"class":140},[127,79666,62433],{"class":143},[127,79668,148],{"class":147},[127,79670,79671,79673,79675,79678],{"class":129,"line":17299},[127,79672,55418],{"class":154},[127,79674,158],{"class":147},[127,79676,79677],{"class":154},"#05943c",[127,79679,164],{"class":147},[127,79681,79682,79684,79686,79688],{"class":129,"line":17304},[127,79683,57950],{"class":154},[127,79685,158],{"class":147},[127,79687,61375],{"class":154},[127,79689,164],{"class":147},[127,79691,79692],{"class":129,"line":17310},[127,79693,2729],{"class":147},[127,79695,79696,79698,79700],{"class":129,"line":17324},[127,79697,52952],{"class":147},[127,79699,575],{"class":140},[127,79701,51846],{"class":147},[127,79703,79704,79706,79708],{"class":129,"line":17337},[127,79705,52321],{"class":147},[127,79707,51873],{"class":140},[127,79709,51846],{"class":147},[127,79711,79712],{"class":129,"line":17342},[127,79713,2942],{"emptyLinePlaceholder":606},[127,79715,79716,79718,79720],{"class":129,"line":17356},[127,79717,1584],{"class":147},[127,79719,275],{"class":140},[127,79721,51846],{"class":147},[127,79723,79724,79726,79728,79730,79732,79735],{"class":129,"line":17361},[127,79725,52679],{"class":147},[127,79727,52147],{"class":140},[127,79729,54021],{"class":143},[127,79731,725],{"class":147},[127,79733,79734],{"class":781},"\"filter\"",[127,79736,51846],{"class":147},[127,79738,79739,79741,79743,79745,79747,79749,79752,79754,79756,79759,79761],{"class":129,"line":17367},[127,79740,51880],{"class":147},[127,79742,457],{"class":140},[127,79744,61590],{"class":143},[127,79746,725],{"class":147},[127,79748,61595],{"class":781},[127,79750,79751],{"class":143}," data-index",[127,79753,725],{"class":147},[127,79755,4220],{"class":781},[127,79757,79758],{"class":147},">0-100元\u003C\u002F",[127,79760,457],{"class":140},[127,79762,51846],{"class":147},[127,79764,79765,79767,79769,79771,79773,79775,79777,79779,79781,79784,79786],{"class":129,"line":17372},[127,79766,51880],{"class":147},[127,79768,457],{"class":140},[127,79770,61590],{"class":143},[127,79772,725],{"class":147},[127,79774,61595],{"class":781},[127,79776,79751],{"class":143},[127,79778,725],{"class":147},[127,79780,4243],{"class":781},[127,79782,79783],{"class":147},">100-300元\u003C\u002F",[127,79785,457],{"class":140},[127,79787,51846],{"class":147},[127,79789,79790,79792,79794,79796,79798,79800,79802,79804,79806,79809,79811],{"class":129,"line":17386},[127,79791,51880],{"class":147},[127,79793,457],{"class":140},[127,79795,61590],{"class":143},[127,79797,725],{"class":147},[127,79799,61595],{"class":781},[127,79801,79751],{"class":143},[127,79803,725],{"class":147},[127,79805,4256],{"class":781},[127,79807,79808],{"class":147},">300元以上\u003C\u002F",[127,79810,457],{"class":140},[127,79812,51846],{"class":147},[127,79814,79815,79817,79819,79821,79823,79825,79828,79830],{"class":129,"line":17391},[127,79816,51880],{"class":147},[127,79818,457],{"class":140},[127,79820,61590],{"class":143},[127,79822,725],{"class":147},[127,79824,61595],{"class":781},[127,79826,79827],{"class":147},">全部区间\u003C\u002F",[127,79829,457],{"class":140},[127,79831,51846],{"class":147},[127,79833,79834,79836,79838],{"class":129,"line":17396},[127,79835,52952],{"class":147},[127,79837,52147],{"class":140},[127,79839,51846],{"class":147},[127,79841,79842,79844,79846,79848,79850,79852],{"class":129,"line":17410},[127,79843,52679],{"class":147},[127,79845,52147],{"class":140},[127,79847,54021],{"class":143},[127,79849,725],{"class":147},[127,79851,63141],{"class":781},[127,79853,51846],{"class":147},[127,79855,79856],{"class":129,"line":17422},[127,79857,79858],{"class":133},"    \u003C!-- \u003Cdiv class=\"item\">\n",[127,79860,79861],{"class":129,"line":17427},[127,79862,79863],{"class":133},"      \u003Cimg src=\"\" alt=\"\">\n",[127,79865,79866],{"class":129,"line":17440},[127,79867,79868],{"class":133},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[127,79870,79871],{"class":129,"line":17445},[127,79872,79873],{"class":133},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[127,79875,79876],{"class":129,"line":17450},[127,79877,79878],{"class":133},"    \u003C\u002Fdiv> -->\n",[127,79880,79881,79883,79885],{"class":129,"line":17455},[127,79882,52952],{"class":147},[127,79884,52147],{"class":140},[127,79886,51846],{"class":147},[127,79888,79889,79891,79893],{"class":129,"line":17468},[127,79890,52679],{"class":147},[127,79892,52348],{"class":140},[127,79894,51846],{"class":147},[127,79896,79897],{"class":129,"line":17473},[127,79898,79899],{"class":133},"    \u002F\u002F 2. 初始化数据\n",[127,79901,79902,79904,79907,79909],{"class":129,"line":33173},[127,79903,11763],{"class":290},[127,79905,79906],{"class":154}," goodsList",[127,79908,14106],{"class":290},[127,79910,55981],{"class":147},[127,79912,79913],{"class":129,"line":33179},[127,79914,79915],{"class":147},"      {\n",[127,79917,79918,79921,79924],{"class":129,"line":33185},[127,79919,79920],{"class":147},"        id: ",[127,79922,79923],{"class":781},"'4001172'",[127,79925,32006],{"class":147},[127,79927,79928,79931,79934],{"class":129,"line":33191},[127,79929,79930],{"class":147},"        name: ",[127,79932,79933],{"class":781},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[127,79935,32006],{"class":147},[127,79937,79938,79941,79944],{"class":129,"line":33197},[127,79939,79940],{"class":147},"        price: ",[127,79942,79943],{"class":781},"'289.00'",[127,79945,32006],{"class":147},[127,79947,79948,79951,79954],{"class":129,"line":33208},[127,79949,79950],{"class":147},"        picture: ",[127,79952,79953],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[127,79955,32006],{"class":147},[127,79957,79958],{"class":129,"line":33214},[127,79959,78421],{"class":147},[127,79961,79962],{"class":129,"line":33234},[127,79963,79915],{"class":147},[127,79965,79966,79968,79971],{"class":129,"line":33240},[127,79967,79920],{"class":147},[127,79969,79970],{"class":781},"'4001594'",[127,79972,32006],{"class":147},[127,79974,79975,79977,79980],{"class":129,"line":33251},[127,79976,79930],{"class":147},[127,79978,79979],{"class":781},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[127,79981,32006],{"class":147},[127,79983,79984,79986,79989],{"class":129,"line":33257},[127,79985,79940],{"class":147},[127,79987,79988],{"class":781},"'288.00'",[127,79990,32006],{"class":147},[127,79992,79993,79995,79998],{"class":129,"line":33263},[127,79994,79950],{"class":147},[127,79996,79997],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[127,79999,32006],{"class":147},[127,80001,80002],{"class":129,"line":33269},[127,80003,78421],{"class":147},[127,80005,80006],{"class":129,"line":33275},[127,80007,79915],{"class":147},[127,80009,80010,80012,80015],{"class":129,"line":33281},[127,80011,79920],{"class":147},[127,80013,80014],{"class":781},"'4001009'",[127,80016,32006],{"class":147},[127,80018,80019,80021,80024],{"class":129,"line":33287},[127,80020,79930],{"class":147},[127,80022,80023],{"class":781},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[127,80025,32006],{"class":147},[127,80027,80028,80030,80033],{"class":129,"line":33293},[127,80029,79940],{"class":147},[127,80031,80032],{"class":781},"'109.00'",[127,80034,32006],{"class":147},[127,80036,80037,80039,80042],{"class":129,"line":33313},[127,80038,79950],{"class":147},[127,80040,80041],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[127,80043,32006],{"class":147},[127,80045,80046],{"class":129,"line":33319},[127,80047,78421],{"class":147},[127,80049,80050],{"class":129,"line":33335},[127,80051,79915],{"class":147},[127,80053,80054,80056,80059],{"class":129,"line":33341},[127,80055,79920],{"class":147},[127,80057,80058],{"class":781},"'4001874'",[127,80060,32006],{"class":147},[127,80062,80063,80065,80068],{"class":129,"line":33355},[127,80064,79930],{"class":147},[127,80066,80067],{"class":781},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[127,80069,32006],{"class":147},[127,80071,80072,80074,80077],{"class":129,"line":33361},[127,80073,79940],{"class":147},[127,80075,80076],{"class":781},"'488.00'",[127,80078,32006],{"class":147},[127,80080,80081,80083,80086],{"class":129,"line":33376},[127,80082,79950],{"class":147},[127,80084,80085],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[127,80087,32006],{"class":147},[127,80089,80090],{"class":129,"line":33382},[127,80091,78421],{"class":147},[127,80093,80094],{"class":129,"line":33391},[127,80095,79915],{"class":147},[127,80097,80098,80100,80103],{"class":129,"line":33397},[127,80099,79920],{"class":147},[127,80101,80102],{"class":781},"'4001649'",[127,80104,32006],{"class":147},[127,80106,80107,80109,80112],{"class":129,"line":33406},[127,80108,79930],{"class":147},[127,80110,80111],{"class":781},"'大师监制龙泉青瓷茶叶罐'",[127,80113,32006],{"class":147},[127,80115,80116,80118,80121],{"class":129,"line":33412},[127,80117,79940],{"class":147},[127,80119,80120],{"class":781},"'139.00'",[127,80122,32006],{"class":147},[127,80124,80125,80127,80130],{"class":129,"line":33418},[127,80126,79950],{"class":147},[127,80128,80129],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[127,80131,32006],{"class":147},[127,80133,80134],{"class":129,"line":33427},[127,80135,78421],{"class":147},[127,80137,80138],{"class":129,"line":33433},[127,80139,79915],{"class":147},[127,80141,80142,80144,80147],{"class":129,"line":33444},[127,80143,79920],{"class":147},[127,80145,80146],{"class":781},"'3997185'",[127,80148,32006],{"class":147},[127,80150,80151,80153,80156],{"class":129,"line":33450},[127,80152,79930],{"class":147},[127,80154,80155],{"class":781},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[127,80157,32006],{"class":147},[127,80159,80160,80162,80165],{"class":129,"line":33469},[127,80161,79940],{"class":147},[127,80163,80164],{"class":781},"'108.00'",[127,80166,32006],{"class":147},[127,80168,80169,80171,80174],{"class":129,"line":33475},[127,80170,79950],{"class":147},[127,80172,80173],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[127,80175,32006],{"class":147},[127,80177,80178],{"class":129,"line":33486},[127,80179,78421],{"class":147},[127,80181,80182],{"class":129,"line":33492},[127,80183,79915],{"class":147},[127,80185,80186,80188,80191],{"class":129,"line":33512},[127,80187,79920],{"class":147},[127,80189,80190],{"class":781},"'3997403'",[127,80192,32006],{"class":147},[127,80194,80195,80197,80200],{"class":129,"line":33528},[127,80196,79930],{"class":147},[127,80198,80199],{"class":781},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[127,80201,32006],{"class":147},[127,80203,80204,80206,80209],{"class":129,"line":33534},[127,80205,79940],{"class":147},[127,80207,80208],{"class":781},"'100.00'",[127,80210,32006],{"class":147},[127,80212,80213,80215,80218],{"class":129,"line":33548},[127,80214,79950],{"class":147},[127,80216,80217],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[127,80219,32006],{"class":147},[127,80221,80222],{"class":129,"line":33554},[127,80223,78421],{"class":147},[127,80225,80226],{"class":129,"line":33560},[127,80227,79915],{"class":147},[127,80229,80230,80232,80235],{"class":129,"line":33571},[127,80231,79920],{"class":147},[127,80233,80234],{"class":781},"'3998274'",[127,80236,32006],{"class":147},[127,80238,80239,80241,80244],{"class":129,"line":33577},[127,80240,79930],{"class":147},[127,80242,80243],{"class":781},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[127,80245,32006],{"class":147},[127,80247,80248,80250,80252],{"class":129,"line":33583},[127,80249,79940],{"class":147},[127,80251,80120],{"class":781},[127,80253,32006],{"class":147},[127,80255,80256,80258,80261],{"class":129,"line":33593},[127,80257,79950],{"class":147},[127,80259,80260],{"class":781},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[127,80262,32006],{"class":147},[127,80264,80265],{"class":129,"line":33599},[127,80266,78421],{"class":147},[127,80268,80269],{"class":129,"line":33610},[127,80270,53644],{"class":147},[127,80272,80273],{"class":129,"line":33616},[127,80274,2942],{"emptyLinePlaceholder":606},[127,80276,80277],{"class":129,"line":33626},[127,80278,80279],{"class":133},"    \u002F\u002F 1.渲染函数\n",[127,80281,80282,80284,80286,80288,80290],{"class":129,"line":33631},[127,80283,70617],{"class":290},[127,80285,70620],{"class":143},[127,80287,681],{"class":147},[127,80289,4422],{"class":5758},[127,80291,12984],{"class":147},[127,80293,80294],{"class":129,"line":33637},[127,80295,80296],{"class":133},"      \u002F\u002F 声明空字符串\n",[127,80298,80299,80302,80305,80307],{"class":129,"line":33686},[127,80300,80301],{"class":290},"      let",[127,80303,80304],{"class":147}," str ",[127,80306,725],{"class":290},[127,80308,70637],{"class":781},[127,80310,80311],{"class":129,"line":33733},[127,80312,70642],{"class":133},[127,80314,80315,80317,80320,80322,80325,80328],{"class":129,"line":33738},[127,80316,58540],{"class":147},[127,80318,80319],{"class":143},"forEach",[127,80321,681],{"class":147},[127,80323,80324],{"class":5758},"item",[127,80326,80327],{"class":290}," =>",[127,80329,148],{"class":147},[127,80331,80332,80334,80337,80340,80342,80345,80347,80350,80353,80355],{"class":129,"line":33744},[127,80333,61803],{"class":290},[127,80335,80336],{"class":147}," { ",[127,80338,80339],{"class":154},"name",[127,80341,12977],{"class":147},[127,80343,80344],{"class":154},"price",[127,80346,12977],{"class":147},[127,80348,80349],{"class":154},"picture",[127,80351,80352],{"class":147}," } ",[127,80354,725],{"class":290},[127,80356,80357],{"class":147}," item\n",[127,80359,80360,80363,80365],{"class":129,"line":33763},[127,80361,80362],{"class":147},"        str ",[127,80364,10019],{"class":290},[127,80366,70701],{"class":781},[127,80368,80369],{"class":129,"line":33769},[127,80370,80371],{"class":781},"          \u003Cdiv class=\"item\">\n",[127,80373,80374,80377,80379],{"class":129,"line":33789},[127,80375,80376],{"class":781},"            \u003Cimg src=\"${",[127,80378,80349],{"class":147},[127,80380,80381],{"class":781},"}\" alt=\"\">\n",[127,80383,80384,80387,80389],{"class":129,"line":33795},[127,80385,80386],{"class":781},"            \u003Cp class=\"name\">${",[127,80388,80339],{"class":147},[127,80390,80391],{"class":781},"}\u003C\u002Fp>\n",[127,80393,80394,80397,80399],{"class":129,"line":33801},[127,80395,80396],{"class":781},"            \u003Cp class=\"price\">${",[127,80398,80344],{"class":147},[127,80400,80391],{"class":781},[127,80402,80403],{"class":129,"line":33811},[127,80404,80405],{"class":781},"          \u003C\u002Fdiv>\n",[127,80407,80408],{"class":129,"line":33816},[127,80409,80410],{"class":781},"        `\n",[127,80412,80413],{"class":129,"line":33822},[127,80414,65348],{"class":147},[127,80416,80417],{"class":129,"line":33838},[127,80418,80419],{"class":133},"      \u002F\u002F 追加给List\n",[127,80421,80422,80424,80426,80428,80431,80433,80435],{"class":129,"line":33883},[127,80423,56305],{"class":147},[127,80425,54934],{"class":143},[127,80427,681],{"class":147},[127,80429,80430],{"class":781},"'.list'",[127,80432,74778],{"class":147},[127,80434,725],{"class":290},[127,80436,74514],{"class":147},[127,80438,80439],{"class":129,"line":33889},[127,80440,2729],{"class":147},[127,80442,80443],{"class":129,"line":33895},[127,80444,80445],{"class":133},"    \u002F\u002F 页面一打开就需要渲染\n",[127,80447,80448,80451],{"class":129,"line":33901},[127,80449,80450],{"class":143},"    render",[127,80452,80453],{"class":147},"(goodsList)\n",[127,80455,80456],{"class":129,"line":33912},[127,80457,80458],{"class":133},"    \u002F\u002F 2.过滤筛选\n",[127,80460,80461,80463,80465,80467,80470,80472,80474,80476,80478,80480,80482,80484],{"class":129,"line":33918},[127,80462,52942],{"class":147},[127,80464,54934],{"class":143},[127,80466,681],{"class":147},[127,80468,80469],{"class":781},"'.filter'",[127,80471,31366],{"class":147},[127,80473,58346],{"class":143},[127,80475,681],{"class":147},[127,80477,58351],{"class":781},[127,80479,12977],{"class":147},[127,80481,752],{"class":5758},[127,80483,80327],{"class":290},[127,80485,148],{"class":147},[127,80487,80488],{"class":129,"line":33924},[127,80489,80490],{"class":133},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[127,80492,80493,80495,80497,80500,80502,80504,80506,80508],{"class":129,"line":33930},[127,80494,58761],{"class":290},[127,80496,80336],{"class":147},[127,80498,80499],{"class":154},"tagName",[127,80501,12977],{"class":147},[127,80503,32077],{"class":154},[127,80505,80352],{"class":147},[127,80507,725],{"class":290},[127,80509,80510],{"class":147}," e.target\n",[127,80512,80513],{"class":129,"line":33948},[127,80514,80515],{"class":133},"      \u002F\u002F 判断\n",[127,80517,80518,80520,80522,80524,80526],{"class":129,"line":33962},[127,80519,55015],{"class":290},[127,80521,67567],{"class":147},[127,80523,55021],{"class":290},[127,80525,68789],{"class":781},[127,80527,12984],{"class":147},[127,80529,80530],{"class":129,"line":33971},[127,80531,80532],{"class":133},"        \u002F\u002F console.log(11)\n",[127,80534,80535],{"class":129,"line":33980},[127,80536,80537],{"class":133},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[127,80539,80540],{"class":129,"line":33989},[127,80541,80542],{"class":133},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[127,80544,80545,80547,80549,80551],{"class":129,"line":33998},[127,80546,52365],{"class":290},[127,80548,52368],{"class":147},[127,80550,725],{"class":290},[127,80552,80553],{"class":147}," goodsList\n",[127,80555,80556,80558,80561,80563,80566],{"class":129,"line":34004},[127,80557,3039],{"class":290},[127,80559,80560],{"class":147}," (dataset.index ",[127,80562,55021],{"class":290},[127,80564,80565],{"class":781}," '1'",[127,80567,12984],{"class":147},[127,80569,80570,80573,80575,80578,80581,80583,80585,80587,80590,80592,80594,80597,80599,80601,80603],{"class":129,"line":34010},[127,80571,80572],{"class":147},"          arr ",[127,80574,725],{"class":290},[127,80576,80577],{"class":147}," goodsList.",[127,80579,80580],{"class":143},"filter",[127,80582,681],{"class":147},[127,80584,80324],{"class":5758},[127,80586,80327],{"class":290},[127,80588,80589],{"class":147}," item.price ",[127,80591,2253],{"class":290},[127,80593,4635],{"class":154},[127,80595,80596],{"class":290}," &&",[127,80598,80589],{"class":147},[127,80600,2131],{"class":290},[127,80602,6296],{"class":154},[127,80604,687],{"class":147},[127,80606,80607,80610,80612,80614,80616,80618,80621],{"class":129,"line":34018},[127,80608,80609],{"class":147},"        } ",[127,80611,2244],{"class":290},[127,80613,2247],{"class":290},[127,80615,80560],{"class":147},[127,80617,55021],{"class":290},[127,80619,80620],{"class":781}," '2'",[127,80622,12984],{"class":147},[127,80624,80625,80627,80629,80631,80633,80635,80637,80639,80641,80643,80645,80647,80649,80651,80654],{"class":129,"line":34023},[127,80626,80572],{"class":147},[127,80628,725],{"class":290},[127,80630,80577],{"class":147},[127,80632,80580],{"class":143},[127,80634,681],{"class":147},[127,80636,80324],{"class":5758},[127,80638,80327],{"class":290},[127,80640,80589],{"class":147},[127,80642,2253],{"class":290},[127,80644,6296],{"class":154},[127,80646,80596],{"class":290},[127,80648,80589],{"class":147},[127,80650,2131],{"class":290},[127,80652,80653],{"class":154}," 300",[127,80655,687],{"class":147},[127,80657,80658,80660,80662,80664,80666,80668,80671],{"class":129,"line":34029},[127,80659,80609],{"class":147},[127,80661,2244],{"class":290},[127,80663,2247],{"class":290},[127,80665,80560],{"class":147},[127,80667,55021],{"class":290},[127,80669,80670],{"class":781}," '3'",[127,80672,12984],{"class":147},[127,80674,80675,80677,80679,80681,80683,80685,80687,80689,80691,80693,80695],{"class":129,"line":34040},[127,80676,80572],{"class":147},[127,80678,725],{"class":290},[127,80680,80577],{"class":147},[127,80682,80580],{"class":143},[127,80684,681],{"class":147},[127,80686,80324],{"class":5758},[127,80688,80327],{"class":290},[127,80690,80589],{"class":147},[127,80692,2253],{"class":290},[127,80694,80653],{"class":154},[127,80696,687],{"class":147},[127,80698,80699],{"class":129,"line":34046},[127,80700,3071],{"class":147},[127,80702,80703],{"class":129,"line":34066},[127,80704,80705],{"class":133},"        \u002F\u002F 渲染函数\n",[127,80707,80708,80710],{"class":129,"line":34072},[127,80709,70941],{"class":143},[127,80711,52947],{"class":147},[127,80713,80714],{"class":129,"line":34078},[127,80715,52933],{"class":147},[127,80717,80718],{"class":129,"line":34084},[127,80719,2942],{"emptyLinePlaceholder":606},[127,80721,80722],{"class":129,"line":34101},[127,80723,34001],{"class":147},[127,80725,80726,80728,80730],{"class":129,"line":34107},[127,80727,52952],{"class":147},[127,80729,52348],{"class":140},[127,80731,51846],{"class":147},[127,80733,80734,80736,80738],{"class":129,"line":34113},[127,80735,52321],{"class":147},[127,80737,275],{"class":140},[127,80739,51846],{"class":147},[127,80741,80742],{"class":129,"line":34119},[127,80743,2942],{"emptyLinePlaceholder":606},[127,80745,80746,80748,80750],{"class":129,"line":34125},[127,80747,52321],{"class":147},[127,80749,51175],{"class":140},[127,80751,51846],{"class":147},[14,80753,80755],{"id":80754},"_410-深入了解对象","4.10 深入了解对象",[62,80757,80759],{"id":80758},"_4101-创建对象","4.10.1 创建对象",[19,80761,80762],{},[23,80763],{"alt":122,"src":80764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80766,80767],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[62,80769,80771],{"id":80770},"_4102-构造函数","4.10.2 构造函数",[19,80773,80774,80777],{},[30,80775,80776],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80779,80780,80783],{},[30,80781,80782],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[117,80785,80787],{"className":51173,"code":80786,"language":51175,"meta":122,"style":122},"\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",[124,80788,80789,80797,80802,80823,80836,80848,80860,80864,80869,80896,80901,80928],{"__ignoreMap":122},[127,80790,80791,80793,80795],{"class":129,"line":130},[127,80792,1584],{"class":147},[127,80794,52348],{"class":140},[127,80796,51846],{"class":147},[127,80798,80799],{"class":129,"line":137},[127,80800,80801],{"class":133},"\u002F\u002F例：\n",[127,80803,80804,80806,80809,80811,80813,80815,80817,80819,80821],{"class":129,"line":151},[127,80805,54984],{"class":290},[127,80807,80808],{"class":143}," Pig",[127,80810,681],{"class":147},[127,80812,80339],{"class":5758},[127,80814,1053],{"class":147},[127,80816,70754],{"class":5758},[127,80818,1053],{"class":147},[127,80820,70771],{"class":5758},[127,80822,12984],{"class":147},[127,80824,80825,80828,80831,80833],{"class":129,"line":167},[127,80826,80827],{"class":154},"    this",[127,80829,80830],{"class":147},".name",[127,80832,725],{"class":290},[127,80834,80835],{"class":147},"name\n",[127,80837,80838,80840,80843,80845],{"class":129,"line":415},[127,80839,80827],{"class":154},[127,80841,80842],{"class":147},".age",[127,80844,725],{"class":290},[127,80846,80847],{"class":147},"age\n",[127,80849,80850,80852,80855,80857],{"class":129,"line":421},[127,80851,80827],{"class":154},[127,80853,80854],{"class":147},".gender",[127,80856,725],{"class":290},[127,80858,80859],{"class":147},"gender    \n",[127,80861,80862],{"class":129,"line":1766},[127,80863,170],{"class":147},[127,80865,80866],{"class":129,"line":1856},[127,80867,80868],{"class":133},"\u002F\u002F创建佩奇对象\n",[127,80870,80871,80873,80876,80878,80880,80882,80885,80887,80889,80891,80894],{"class":129,"line":1862},[127,80872,7334],{"class":290},[127,80874,80875],{"class":154}," Peppa",[127,80877,12259],{"class":290},[127,80879,80808],{"class":143},[127,80881,681],{"class":147},[127,80883,80884],{"class":781},"'佩奇'",[127,80886,1053],{"class":147},[127,80888,1019],{"class":154},[127,80890,1053],{"class":147},[127,80892,80893],{"class":781},"'女'",[127,80895,687],{"class":147},[127,80897,80898],{"class":129,"line":1874},[127,80899,80900],{"class":133},"\u002F\u002F创建乔治对象\n",[127,80902,80903,80905,80908,80910,80912,80914,80917,80919,80921,80923,80926],{"class":129,"line":2155},[127,80904,7334],{"class":290},[127,80906,80907],{"class":154}," George",[127,80909,12259],{"class":290},[127,80911,80808],{"class":143},[127,80913,681],{"class":147},[127,80915,80916],{"class":781},"'乔治'",[127,80918,1053],{"class":147},[127,80920,749],{"class":154},[127,80922,1053],{"class":147},[127,80924,80925],{"class":781},"'男'",[127,80927,687],{"class":147},[127,80929,80930,80932,80934],{"class":129,"line":2160},[127,80931,52321],{"class":147},[127,80933,52348],{"class":140},[127,80935,51846],{"class":147},[19,80937,80938],{},[23,80939],{"alt":122,"src":80940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80942,80943],{},[23,80944],{"alt":122,"src":80945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80947,80948],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80950,80951],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80953,80954],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80956,80957],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80959,80960],{},"这里用等号是因为：对象.属性=值",[19,80962,80963],{},"①利用对象字面量创建对象",[19,80965,80966],{},"const o={",[19,80968,80969],{},"name:'pink'",[19,80971,80972],{},"} ②利用new Object创建对象",[19,80974,80975],{},"const o=new Object({name:'pink'})",[19,80977,80978],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80980,80981],{},"构造函数创建对象的执行过程：",[19,80983,80984],{},[23,80985],{"alt":122,"src":80986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[62,80988,80990],{"id":80989},"_4103-实例成员","4.10.3 实例成员",[19,80992,80993],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[632,80995,80996,80999,81002],{},[635,80997,80998],{},"实例对象的属性和方法即为实例成员",[635,81000,81001],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[635,81003,81004],{},"构造函数创建的实例对象彼此独立互不影响",[62,81006,81008],{"id":81007},"_4104-静态成员","4.10.4 静态成员",[19,81010,81011],{},[23,81012],{"alt":122,"src":81013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81015,81016],{},"静态成员有Date.now() Math.PI Math.random()",[19,81018,81019],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81021,81022],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81024,81025],{},"function Pig(name) n {",[19,81027,81028],{},"this.name=name",[19,81030,1620],{},[19,81032,81033],{},"Pig.eyes=2",[19,81035,81036],{},"Pig.sayHai=function () { console.log(this) }",[19,81038,81039],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81041,81042],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81044,11874],{},[632,81046,81047,81050,81053,81056,81059],{},[635,81048,81049],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[635,81051,81052],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[635,81054,81055],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[635,81057,81058],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[635,81060,81061],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81063,81064],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[62,81066,81068],{"id":81067},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81070,81071],{},"内置构造函数包含：",[19,81073,81074],{},[23,81075],{"alt":122,"src":81076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81078,81079],{},[23,81080],{"alt":122,"src":81081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81083,81084],{},"这些基本数据类型，js对他们进行了包装",[52348,81086,81087],{},"\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",[22539,81089,81091],{"id":81090},"_41051-object","4.10.5.1 Object",[19,81093,81094],{},"Object 是内置的构造函数，用于创建普通对象",[19,81096,81097],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[117,81099,81101],{"className":51173,"code":81100,"language":51175,"meta":122,"style":122},"const user=new Object({name:'小明',age:15})\n",[124,81102,81103],{"__ignoreMap":122},[127,81104,81105],{"class":129,"line":130},[127,81106,81100],{"class":147},[19,81108,81109],{},"三个常用的静态方法：",[23451,81111,81113],{"id":81112},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81115,81116],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81118,81119],{},[23,81120],{"alt":122,"src":81121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81123,81124],{},[23,81125],{"alt":122,"src":81126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[117,81128,81130],{"className":53602,"code":81129,"language":53604,"meta":122,"style":122},"\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",[124,81131,81132,81140,81148,81153,81158,81163,81168,81173,81178,81186],{"__ignoreMap":122},[127,81133,81134,81136,81138],{"class":129,"line":130},[127,81135,1584],{"class":147},[127,81137,275],{"class":140},[127,81139,51846],{"class":147},[127,81141,81142,81144,81146],{"class":129,"line":137},[127,81143,52679],{"class":147},[127,81145,52348],{"class":140},[127,81147,51846],{"class":147},[127,81149,81150],{"class":129,"line":151},[127,81151,81152],{"class":147},"    const o = { name: 'pink', age: 6 }\n",[127,81154,81155],{"class":129,"line":167},[127,81156,81157],{"class":147},"    \u002F\u002F 获得所有属性名\n",[127,81159,81160],{"class":129,"line":415},[127,81161,81162],{"class":147},"    const arr = Object.keys(o)\n",[127,81164,81165],{"class":129,"line":421},[127,81166,81167],{"class":147},"    console.log(arr)\n",[127,81169,81170],{"class":129,"line":1766},[127,81171,81172],{"class":147},"    \u002F\u002F 获得所有属性值\n",[127,81174,81175],{"class":129,"line":1856},[127,81176,81177],{"class":147},"    console.log(Object.values(o))\n",[127,81179,81180,81182,81184],{"class":129,"line":1862},[127,81181,52952],{"class":147},[127,81183,52348],{"class":140},[127,81185,51846],{"class":147},[127,81187,81188,81190,81192],{"class":129,"line":1874},[127,81189,52321],{"class":147},[127,81191,275],{"class":140},[127,81193,51846],{"class":147},[23451,81195,81197],{"id":81196},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81199,81200],{},"Object.assign(oo,o)",[19,81202,81203],{},"后的东西添加给前 是追加",[19,81205,81206],{},[23,81207],{"alt":122,"src":81208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81210,81211],{},[23,81212],{"alt":122,"src":81213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[117,81215,81217],{"className":53602,"code":81216,"language":53604,"meta":122,"style":122},"\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",[124,81218,81219,81227,81235,81239,81243,81247,81251,81255,81259,81264,81269,81274,81279,81284,81292],{"__ignoreMap":122},[127,81220,81221,81223,81225],{"class":129,"line":130},[127,81222,1584],{"class":147},[127,81224,275],{"class":140},[127,81226,51846],{"class":147},[127,81228,81229,81231,81233],{"class":129,"line":137},[127,81230,52679],{"class":147},[127,81232,52348],{"class":140},[127,81234,51846],{"class":147},[127,81236,81237],{"class":129,"line":151},[127,81238,81152],{"class":147},[127,81240,81241],{"class":129,"line":167},[127,81242,81157],{"class":147},[127,81244,81245],{"class":129,"line":415},[127,81246,81162],{"class":147},[127,81248,81249],{"class":129,"line":421},[127,81250,81167],{"class":147},[127,81252,81253],{"class":129,"line":1766},[127,81254,81172],{"class":147},[127,81256,81257],{"class":129,"line":1856},[127,81258,81177],{"class":147},[127,81260,81261],{"class":129,"line":1862},[127,81262,81263],{"class":147},"    const oo = {}\n",[127,81265,81266],{"class":129,"line":1874},[127,81267,81268],{"class":147},"    Object.assign(oo, o)\n",[127,81270,81271],{"class":129,"line":2155},[127,81272,81273],{"class":147},"    console.log(oo)\n",[127,81275,81276],{"class":129,"line":2160},[127,81277,81278],{"class":147},"    Object.assign(o, { gender: '女' })\n",[127,81280,81281],{"class":129,"line":2166},[127,81282,81283],{"class":147},"    console.log(o)\n",[127,81285,81286,81288,81290],{"class":129,"line":2171},[127,81287,52952],{"class":147},[127,81289,52348],{"class":140},[127,81291,51846],{"class":147},[127,81293,81294,81296,81298],{"class":129,"line":2185},[127,81295,52321],{"class":147},[127,81297,275],{"class":140},[127,81299,51846],{"class":147},[19,81301,81302],{},[23,81303],{"alt":122,"src":81304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22539,81306,81308],{"id":81307},"_41052-array","4.10.5.2 Array",[19,81310,81311],{},"Array 是内置的构造函数，用于创建数组",[19,81313,81314],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[117,81316,81318],{"className":51173,"code":81317,"language":51175,"meta":122,"style":122},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[124,81319,81320,81325],{"__ignoreMap":122},[127,81321,81322],{"class":129,"line":130},[127,81323,81324],{"class":147},"const arr=new Array(3,5)\n",[127,81326,81327],{"class":129,"line":137},[127,81328,81329],{"class":147},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81331,81332],{},"Array的实例方法，这个方法是实例成员",[19,81334,81335],{},[23,81336],{"alt":122,"src":81337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23451,81339,81341],{"id":81340},"_410521-reduce","4.10.5.2.1 reduce",[19,81343,81344],{},[23,81345],{"alt":122,"src":81346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[117,81348,81350],{"className":53602,"code":81349,"language":53604,"meta":122,"style":122},"\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",[124,81351,81352,81360,81368,81373,81378,81383,81388,81392,81397,81402,81407,81411,81416,81421,81425,81430,81435,81440,81448],{"__ignoreMap":122},[127,81353,81354,81356,81358],{"class":129,"line":130},[127,81355,1584],{"class":147},[127,81357,275],{"class":140},[127,81359,51846],{"class":147},[127,81361,81362,81364,81366],{"class":129,"line":137},[127,81363,52679],{"class":147},[127,81365,52348],{"class":140},[127,81367,51846],{"class":147},[127,81369,81370],{"class":129,"line":151},[127,81371,81372],{"class":147},"    const arr = [1, 5, 8]\n",[127,81374,81375],{"class":129,"line":167},[127,81376,81377],{"class":147},"    \u002F\u002F 1.没有初始值\n",[127,81379,81380],{"class":129,"line":415},[127,81381,81382],{"class":147},"    const total = arr.reduce(function (prev, current) {\n",[127,81384,81385],{"class":129,"line":421},[127,81386,81387],{"class":147},"      return prev + current\n",[127,81389,81390],{"class":129,"line":1766},[127,81391,34001],{"class":147},[127,81393,81394],{"class":129,"line":1856},[127,81395,81396],{"class":147},"    console.log(total)   \u002F\u002F14\n",[127,81398,81399],{"class":129,"line":1862},[127,81400,81401],{"class":147},"    \u002F\u002F 2.有初始值\n",[127,81403,81404],{"class":129,"line":1874},[127,81405,81406],{"class":147},"    const total1 = arr.reduce(function (prev, current) {\n",[127,81408,81409],{"class":129,"line":2155},[127,81410,81387],{"class":147},[127,81412,81413],{"class":129,"line":2160},[127,81414,81415],{"class":147},"    }, 10)\n",[127,81417,81418],{"class":129,"line":2166},[127,81419,81420],{"class":147},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[127,81422,81423],{"class":129,"line":2171},[127,81424,2942],{"emptyLinePlaceholder":606},[127,81426,81427],{"class":129,"line":2185},[127,81428,81429],{"class":147},"    \u002F\u002F 3.箭头函数写法\n",[127,81431,81432],{"class":129,"line":2190},[127,81433,81434],{"class":147},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[127,81436,81437],{"class":129,"line":2196},[127,81438,81439],{"class":147},"    console.log(total2)   \u002F\u002F24\n",[127,81441,81442,81444,81446],{"class":129,"line":2217},[127,81443,52952],{"class":147},[127,81445,52348],{"class":140},[127,81447,51846],{"class":147},[127,81449,81450,81452,81454],{"class":129,"line":2222},[127,81451,52321],{"class":147},[127,81453,275],{"class":140},[127,81455,51846],{"class":147},[19,81457,81458],{},"执行过程：",[632,81460,81461,81464,81467],{},[635,81462,81463],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[635,81465,81466],{},"每一次循环，把返回值给作为下一次循环的上一次值",[635,81468,81469],{},"如果有起始值，则起始值作为上一次值",[117,81471,81473],{"className":53602,"code":81472,"language":53604,"meta":122,"style":122},"\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",[124,81474,81475,81483,81491,81495,81499,81503,81507,81511,81515,81520,81525,81530,81535,81540,81544,81548,81552,81556,81560,81564,81569,81573,81578,81582,81587,81592,81596,81600,81604,81612],{"__ignoreMap":122},[127,81476,81477,81479,81481],{"class":129,"line":130},[127,81478,1584],{"class":147},[127,81480,275],{"class":140},[127,81482,51846],{"class":147},[127,81484,81485,81487,81489],{"class":129,"line":137},[127,81486,52679],{"class":147},[127,81488,52348],{"class":140},[127,81490,51846],{"class":147},[127,81492,81493],{"class":129,"line":151},[127,81494,81372],{"class":147},[127,81496,81497],{"class":129,"line":167},[127,81498,81377],{"class":147},[127,81500,81501],{"class":129,"line":415},[127,81502,81382],{"class":147},[127,81504,81505],{"class":129,"line":421},[127,81506,81387],{"class":147},[127,81508,81509],{"class":129,"line":1766},[127,81510,34001],{"class":147},[127,81512,81513],{"class":129,"line":1856},[127,81514,81396],{"class":147},[127,81516,81517],{"class":129,"line":1862},[127,81518,81519],{"class":147},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[127,81521,81522],{"class":129,"line":1874},[127,81523,81524],{"class":147},"    \u002F\u002F     1              5                    6\n",[127,81526,81527],{"class":129,"line":2155},[127,81528,81529],{"class":147},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[127,81531,81532],{"class":129,"line":2160},[127,81533,81534],{"class":147},"    \u002F\u002F     6              8                    14\n",[127,81536,81537],{"class":129,"line":2166},[127,81538,81539],{"class":147},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[127,81541,81542],{"class":129,"line":2171},[127,81543,81401],{"class":147},[127,81545,81546],{"class":129,"line":2185},[127,81547,81406],{"class":147},[127,81549,81550],{"class":129,"line":2190},[127,81551,81387],{"class":147},[127,81553,81554],{"class":129,"line":2196},[127,81555,81415],{"class":147},[127,81557,81558],{"class":129,"line":2217},[127,81559,81420],{"class":147},[127,81561,81562],{"class":129,"line":2222},[127,81563,81519],{"class":147},[127,81565,81566],{"class":129,"line":2236},[127,81567,81568],{"class":147},"    \u002F\u002F     10             1                     11\n",[127,81570,81571],{"class":129,"line":2241},[127,81572,81529],{"class":147},[127,81574,81575],{"class":129,"line":2270},[127,81576,81577],{"class":147},"    \u002F\u002F     11             5                    16\n",[127,81579,81580],{"class":129,"line":2275},[127,81581,81529],{"class":147},[127,81583,81584],{"class":129,"line":2292},[127,81585,81586],{"class":147},"    \u002F\u002F     16             8                    24\n",[127,81588,81589],{"class":129,"line":2297},[127,81590,81591],{"class":147},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[127,81593,81594],{"class":129,"line":2302},[127,81595,81429],{"class":147},[127,81597,81598],{"class":129,"line":2307},[127,81599,81434],{"class":147},[127,81601,81602],{"class":129,"line":2321},[127,81603,81439],{"class":147},[127,81605,81606,81608,81610],{"class":129,"line":2326},[127,81607,52952],{"class":147},[127,81609,52348],{"class":140},[127,81611,51846],{"class":147},[127,81613,81614,81616,81618],{"class":129,"line":3119},[127,81615,52321],{"class":147},[127,81617,275],{"class":140},[127,81619,51846],{"class":147},[23451,81621,81623],{"id":81622},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81625,81626],{},[23,81627],{"alt":122,"src":81628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[117,81630,81632],{"className":53602,"code":81631,"language":53604,"meta":122,"style":122},"\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",[124,81633,81634,81642,81650,81655,81660,81665,81670,81674,81679,81684,81689,81694,81699,81704,81708,81713,81717,81722,81730],{"__ignoreMap":122},[127,81635,81636,81638,81640],{"class":129,"line":130},[127,81637,1584],{"class":147},[127,81639,275],{"class":140},[127,81641,51846],{"class":147},[127,81643,81644,81646,81648],{"class":129,"line":137},[127,81645,52679],{"class":147},[127,81647,52348],{"class":140},[127,81649,51846],{"class":147},[127,81651,81652],{"class":129,"line":151},[127,81653,81654],{"class":147},"    const arr = [\n",[127,81656,81657],{"class":129,"line":167},[127,81658,81659],{"class":147},"      { name: '张三', salary: 10000 },\n",[127,81661,81662],{"class":129,"line":415},[127,81663,81664],{"class":147},"      { name: '李四', salary: 10000 },\n",[127,81666,81667],{"class":129,"line":421},[127,81668,81669],{"class":147},"      { name: '王五', salary: 10000 }\n",[127,81671,81672],{"class":129,"line":1766},[127,81673,53644],{"class":147},[127,81675,81676],{"class":129,"line":1856},[127,81677,81678],{"class":147},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[127,81680,81681],{"class":129,"line":1862},[127,81682,81683],{"class":147},"    \u002F\u002F prev是累计值\n",[127,81685,81686],{"class":129,"line":1874},[127,81687,81688],{"class":147},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[127,81690,81691],{"class":129,"line":2155},[127,81692,81693],{"class":147},"    console.log(total)\n",[127,81695,81696],{"class":129,"line":2160},[127,81697,81698],{"class":147},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[127,81700,81701],{"class":129,"line":2166},[127,81702,81703],{"class":147},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[127,81705,81706],{"class":129,"line":2171},[127,81707,81698],{"class":147},[127,81709,81710],{"class":129,"line":2185},[127,81711,81712],{"class":147},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[127,81714,81715],{"class":129,"line":2190},[127,81716,81698],{"class":147},[127,81718,81719],{"class":129,"line":2196},[127,81720,81721],{"class":147},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[127,81723,81724,81726,81728],{"class":129,"line":2217},[127,81725,52952],{"class":147},[127,81727,52348],{"class":140},[127,81729,51846],{"class":147},[127,81731,81732,81734,81736],{"class":129,"line":2222},[127,81733,52321],{"class":147},[127,81735,275],{"class":140},[127,81737,51846],{"class":147},[23451,81739,81741],{"id":81740},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81743,81744],{},[23,81745],{"alt":122,"src":81746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81748,81749],{},[23,81750],{"alt":122,"src":81751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[632,81753,81754],{},[635,81755,81756],{},"find()",[19,81758,81759],{},"循环查找，找到第一个就ok",[19,81761,81762],{},[457,81763,81766],{"href":81764,"rel":81765},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24405],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[117,81768,81770],{"className":51173,"code":81769,"language":51175,"meta":122,"style":122},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[124,81771,81772,81777,81782],{"__ignoreMap":122},[127,81773,81774],{"class":129,"line":130},[127,81775,81776],{"class":147},"const array1 = [5, 12, 8, 130, 44]\n",[127,81778,81779],{"class":129,"line":137},[127,81780,81781],{"class":147},"const found = array1.find((element) => element > 10)\n",[127,81783,81784],{"class":129,"line":151},[127,81785,81786],{"class":147},"console.log(found)  \u002F\u002F12\n",[19,81788,81789,81791,81792,81797,81798,81801,81802,81804,81805,81810,81811,81813,81814,81816,81817,81819,81820],{},[124,81790,81756],{}," 方法是一个",[457,81793,81796],{"href":81794,"rel":81795},"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",[24405],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[124,81799,81800],{},"callbackFn"," 函数，直到 ",[124,81803,81800],{}," 返回一个",[457,81806,81809],{"href":81807,"rel":81808},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24405],"真值","。然后 ",[124,81812,81756],{}," 返回该元素并停止迭代数组。如果 ",[124,81815,81800],{}," 从未返回真值，则 ",[124,81818,81756],{}," 返回 ",[124,81821,81822],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[117,81824,81826],{"className":53602,"code":81825,"language":53604,"meta":122,"style":122},"\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",[124,81827,81828,81836,81844,81849,81854,81859,81863,81868,81873,81877,81882,81887,81891,81895,81900,81905,81909,81913,81918,81923,81928,81933,81938,81942,81947,81952,81957,81962,81966,81971,81979],{"__ignoreMap":122},[127,81829,81830,81832,81834],{"class":129,"line":130},[127,81831,1584],{"class":147},[127,81833,275],{"class":140},[127,81835,51846],{"class":147},[127,81837,81838,81840,81842],{"class":129,"line":137},[127,81839,52679],{"class":147},[127,81841,52348],{"class":140},[127,81843,51846],{"class":147},[127,81845,81846],{"class":129,"line":151},[127,81847,81848],{"class":147},"    const arr = ['red', 'blue', 'green']\n",[127,81850,81851],{"class":129,"line":167},[127,81852,81853],{"class":147},"    const found = arr.find(item => item === 'pink')\n",[127,81855,81856],{"class":129,"line":415},[127,81857,81858],{"class":147},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[127,81860,81861],{"class":129,"line":421},[127,81862,2942],{"emptyLinePlaceholder":606},[127,81864,81865],{"class":129,"line":1766},[127,81866,81867],{"class":147},"    \u002F\u002F 使用场景，用于查找数据\n",[127,81869,81870],{"class":129,"line":1856},[127,81871,81872],{"class":147},"    const arr1 = [\n",[127,81874,81875],{"class":129,"line":1862},[127,81876,79915],{"class":147},[127,81878,81879],{"class":129,"line":1874},[127,81880,81881],{"class":147},"        name: '小米',\n",[127,81883,81884],{"class":129,"line":2155},[127,81885,81886],{"class":147},"        price: 1999\n",[127,81888,81889],{"class":129,"line":2160},[127,81890,78421],{"class":147},[127,81892,81893],{"class":129,"line":2166},[127,81894,79915],{"class":147},[127,81896,81897],{"class":129,"line":2171},[127,81898,81899],{"class":147},"        name: '华为',\n",[127,81901,81902],{"class":129,"line":2185},[127,81903,81904],{"class":147},"        price: 3999\n",[127,81906,81907],{"class":129,"line":2190},[127,81908,52933],{"class":147},[127,81910,81911],{"class":129,"line":2196},[127,81912,53644],{"class":147},[127,81914,81915],{"class":129,"line":2217},[127,81916,81917],{"class":147},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[127,81919,81920],{"class":129,"line":2222},[127,81921,81922],{"class":147},"    \u002F\u002F const found1 = arr1.find(item => {\n",[127,81924,81925],{"class":129,"line":2236},[127,81926,81927],{"class":147},"    \u002F\u002F   if (item.name === '小米') {\n",[127,81929,81930],{"class":129,"line":2241},[127,81931,81932],{"class":147},"    \u002F\u002F     return item\n",[127,81934,81935],{"class":129,"line":2270},[127,81936,81937],{"class":147},"    \u002F\u002F   }\n",[127,81939,81940],{"class":129,"line":2275},[127,81941,63823],{"class":147},[127,81943,81944],{"class":129,"line":2292},[127,81945,81946],{"class":147},"    \u002F\u002F 另一种写法\n",[127,81948,81949],{"class":129,"line":2297},[127,81950,81951],{"class":147},"    const found1 = arr1.find(item => {\n",[127,81953,81954],{"class":129,"line":2302},[127,81955,81956],{"class":147},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[127,81958,81959],{"class":129,"line":2307},[127,81960,81961],{"class":147},"      return item.name = '小米'\n",[127,81963,81964],{"class":129,"line":2321},[127,81965,34001],{"class":147},[127,81967,81968],{"class":129,"line":2326},[127,81969,81970],{"class":147},"    console.log(found1)\n",[127,81972,81973,81975,81977],{"class":129,"line":3119},[127,81974,52952],{"class":147},[127,81976,52348],{"class":140},[127,81978,51846],{"class":147},[127,81980,81981,81983,81985],{"class":129,"line":3133},[127,81982,52321],{"class":147},[127,81984,275],{"class":140},[127,81986,51846],{"class":147},[19,81988,81989],{},[23,81990],{"alt":122,"src":81991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81993,81994],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[632,81996,81997],{"start":137},[635,81998,81999],{},"every()返回的是布尔值",[19,82001,82002],{},[457,82003,82006],{"href":82004,"rel":82005},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24405],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82008,82009],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82011,82012],{},"some是只有有一个就没问题",[19,82014,82015],{},"every是必须全是才行",[117,82017,82021],{"className":82018,"code":82019,"language":82020,"meta":122,"style":122},"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",[124,82022,82023,82039,82053,82057,82066],{"__ignoreMap":122},[127,82024,82025,82027,82030,82032,82034,82037],{"class":129,"line":130},[127,82026,54984],{"class":290},[127,82028,82029],{"class":147}," isBigEnough(element, ",[127,82031,74587],{"class":290},[127,82033,12977],{"class":147},[127,82035,82036],{"class":290},"array",[127,82038,12984],{"class":147},[127,82040,82041,82044,82047,82049,82051],{"class":129,"line":137},[127,82042,82043],{"class":290},"  return",[127,82045,82046],{"class":147}," element ",[127,82048,2253],{"class":290},[127,82050,2580],{"class":154},[127,82052,164],{"class":147},[127,82054,82055],{"class":129,"line":151},[127,82056,170],{"class":147},[127,82058,82059,82062,82064],{"class":129,"line":167},[127,82060,82061],{"class":147},"[12, 5, 8, 130, 44].every(isBigEnough); ",[127,82063,33869],{"class":290},[127,82065,55051],{"class":147},[127,82067,82068,82071,82073],{"class":129,"line":415},[127,82069,82070],{"class":147},"[12, 54, 18, 130, 44].every(isBigEnough); ",[127,82072,33869],{"class":290},[127,82074,58473],{"class":147},[117,82076,82078],{"className":53602,"code":82077,"language":53604,"meta":122,"style":122},"\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",[124,82079,82080,82088,82096,82101,82105,82110,82115,82123],{"__ignoreMap":122},[127,82081,82082,82084,82086],{"class":129,"line":130},[127,82083,1584],{"class":147},[127,82085,275],{"class":140},[127,82087,51846],{"class":147},[127,82089,82090,82092,82094],{"class":129,"line":137},[127,82091,52679],{"class":147},[127,82093,52348],{"class":140},[127,82095,51846],{"class":147},[127,82097,82098],{"class":129,"line":151},[127,82099,82100],{"class":147},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[127,82102,82103],{"class":129,"line":167},[127,82104,78851],{"class":147},[127,82106,82107],{"class":129,"line":415},[127,82108,82109],{"class":147},"    const flag = arr.every(item => item >= 10)\n",[127,82111,82112],{"class":129,"line":421},[127,82113,82114],{"class":147},"    console.log(flag)    \u002F\u002Ftrue\n",[127,82116,82117,82119,82121],{"class":129,"line":1766},[127,82118,52952],{"class":147},[127,82120,52348],{"class":140},[127,82122,51846],{"class":147},[127,82124,82125,82127,82129],{"class":129,"line":1856},[127,82126,52321],{"class":147},[127,82128,275],{"class":140},[127,82130,51846],{"class":147},[117,82132,82134],{"className":53602,"code":82133,"language":53604,"meta":122,"style":122},"\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",[124,82135,82136,82144,82152,82156,82161,82166,82171,82179],{"__ignoreMap":122},[127,82137,82138,82140,82142],{"class":129,"line":130},[127,82139,1584],{"class":147},[127,82141,275],{"class":140},[127,82143,51846],{"class":147},[127,82145,82146,82148,82150],{"class":129,"line":137},[127,82147,52679],{"class":147},[127,82149,52348],{"class":140},[127,82151,51846],{"class":147},[127,82153,82154],{"class":129,"line":151},[127,82155,82100],{"class":147},[127,82157,82158],{"class":129,"line":167},[127,82159,82160],{"class":147},"    const arr = [10, 0, 5]\n",[127,82162,82163],{"class":129,"line":415},[127,82164,82165],{"class":147},"    const flag = arr.some(item => item >= 10)\n",[127,82167,82168],{"class":129,"line":421},[127,82169,82170],{"class":147},"    console.log(flag)   \u002F\u002Ftrue\n",[127,82172,82173,82175,82177],{"class":129,"line":1766},[127,82174,52952],{"class":147},[127,82176,52348],{"class":140},[127,82178,51846],{"class":147},[127,82180,82181,82183,82185],{"class":129,"line":1856},[127,82182,52321],{"class":147},[127,82184,275],{"class":140},[127,82186,51846],{"class":147},[23451,82188,82190],{"id":82189},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82192,82193],{},[23,82194],{"alt":122,"src":82195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[117,82197,82199],{"className":51173,"code":82198,"language":51175,"meta":122,"style":122},"\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",[124,82200,82201,82211,82225,82229,82237,82251,82271,82283,82291,82298,82310,82322,82334,82346,82356,82366,82370,82378,82386,82390,82398,82410,82418,82440,82445,82450,82483,82491,82499,82503],{"__ignoreMap":122},[127,82202,82203,82205,82207,82209],{"class":129,"line":130},[127,82204,51837],{"class":147},[127,82206,51840],{"class":140},[127,82208,51843],{"class":143},[127,82210,51846],{"class":147},[127,82212,82213,82215,82217,82219,82221,82223],{"class":129,"line":137},[127,82214,1584],{"class":147},[127,82216,51175],{"class":140},[127,82218,51855],{"class":143},[127,82220,725],{"class":147},[127,82222,51860],{"class":781},[127,82224,51846],{"class":147},[127,82226,82227],{"class":129,"line":151},[127,82228,2942],{"emptyLinePlaceholder":606},[127,82230,82231,82233,82235],{"class":129,"line":167},[127,82232,1584],{"class":147},[127,82234,51873],{"class":140},[127,82236,51846],{"class":147},[127,82238,82239,82241,82243,82245,82247,82249],{"class":129,"line":415},[127,82240,52679],{"class":147},[127,82242,51883],{"class":140},[127,82244,51886],{"class":143},[127,82246,725],{"class":147},[127,82248,51891],{"class":781},[127,82250,51846],{"class":147},[127,82252,82253,82255,82257,82259,82261,82263,82265,82267,82269],{"class":129,"line":421},[127,82254,52679],{"class":147},[127,82256,51883],{"class":140},[127,82258,15462],{"class":143},[127,82260,725],{"class":147},[127,82262,51930],{"class":781},[127,82264,51910],{"class":143},[127,82266,725],{"class":147},[127,82268,51937],{"class":781},[127,82270,51846],{"class":147},[127,82272,82273,82275,82277,82279,82281],{"class":129,"line":1766},[127,82274,52679],{"class":147},[127,82276,51946],{"class":140},[127,82278,51949],{"class":147},[127,82280,51946],{"class":140},[127,82282,51846],{"class":147},[127,82284,82285,82287,82289],{"class":129,"line":1856},[127,82286,52679],{"class":147},[127,82288,575],{"class":140},[127,82290,51846],{"class":147},[127,82292,82293,82296],{"class":129,"line":1862},[127,82294,82295],{"class":140},"    div",[127,82297,148],{"class":147},[127,82299,82300,82302,82304,82306,82308],{"class":129,"line":1874},[127,82301,55305],{"class":154},[127,82303,158],{"class":147},[127,82305,2265],{"class":154},[127,82307,291],{"class":290},[127,82309,164],{"class":147},[127,82311,82312,82314,82316,82318,82320],{"class":129,"line":2155},[127,82313,55319],{"class":154},[127,82315,158],{"class":147},[127,82317,1076],{"class":154},[127,82319,291],{"class":290},[127,82321,164],{"class":147},[127,82323,82324,82326,82328,82330,82332],{"class":129,"line":2160},[127,82325,57893],{"class":154},[127,82327,158],{"class":147},[127,82329,1076],{"class":154},[127,82331,291],{"class":290},[127,82333,164],{"class":147},[127,82335,82336,82338,82340,82342,82344],{"class":129,"line":2166},[127,82337,65666],{"class":154},[127,82339,158],{"class":147},[127,82341,1173],{"class":154},[127,82343,291],{"class":290},[127,82345,164],{"class":147},[127,82347,82348,82350,82352,82354],{"class":129,"line":2171},[127,82349,57820],{"class":154},[127,82351,158],{"class":147},[127,82353,161],{"class":154},[127,82355,164],{"class":147},[127,82357,82358,82360,82362,82364],{"class":129,"line":2185},[127,82359,55418],{"class":154},[127,82361,158],{"class":147},[127,82363,52181],{"class":154},[127,82365,164],{"class":147},[127,82367,82368],{"class":129,"line":2190},[127,82369,2729],{"class":147},[127,82371,82372,82374,82376],{"class":129,"line":2196},[127,82373,52952],{"class":147},[127,82375,575],{"class":140},[127,82377,51846],{"class":147},[127,82379,82380,82382,82384],{"class":129,"line":2217},[127,82381,52321],{"class":147},[127,82383,51873],{"class":140},[127,82385,51846],{"class":147},[127,82387,82388],{"class":129,"line":2222},[127,82389,2942],{"emptyLinePlaceholder":606},[127,82391,82392,82394,82396],{"class":129,"line":2236},[127,82393,1584],{"class":147},[127,82395,275],{"class":140},[127,82397,51846],{"class":147},[127,82399,82400,82402,82404,82406,82408],{"class":129,"line":2241},[127,82401,52679],{"class":147},[127,82403,52147],{"class":140},[127,82405,55848],{"class":147},[127,82407,52147],{"class":140},[127,82409,51846],{"class":147},[127,82411,82412,82414,82416],{"class":129,"line":2270},[127,82413,52679],{"class":147},[127,82415,52348],{"class":140},[127,82417,51846],{"class":147},[127,82419,82420,82422,82425,82427,82430,82433,82435,82438],{"class":129,"line":2275},[127,82421,11763],{"class":290},[127,82423,82424],{"class":154}," spec",[127,82426,14106],{"class":290},[127,82428,82429],{"class":147}," { size: ",[127,82431,82432],{"class":781},"'40cm*40cm'",[127,82434,55998],{"class":147},[127,82436,82437],{"class":781},"'黑色'",[127,82439,56138],{"class":147},[127,82441,82442],{"class":129,"line":2292},[127,82443,82444],{"class":133},"    \u002F\u002F const arr = Object.values(spec)\n",[127,82446,82447],{"class":129,"line":2297},[127,82448,82449],{"class":133},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[127,82451,82452,82454,82456,82458,82461,82463,82465,82468,82471,82474,82476,82478,82481],{"class":129,"line":2302},[127,82453,52942],{"class":147},[127,82455,54934],{"class":143},[127,82457,681],{"class":147},[127,82459,82460],{"class":781},"'div'",[127,82462,74778],{"class":147},[127,82464,725],{"class":290},[127,82466,82467],{"class":147}," Object.",[127,82469,82470],{"class":143},"values",[127,82472,82473],{"class":147},"(spec).",[127,82475,74752],{"class":143},[127,82477,681],{"class":147},[127,82479,82480],{"class":781},"'\u002F'",[127,82482,687],{"class":147},[127,82484,82485,82487,82489],{"class":129,"line":2307},[127,82486,52952],{"class":147},[127,82488,52348],{"class":140},[127,82490,51846],{"class":147},[127,82492,82493,82495,82497],{"class":129,"line":2321},[127,82494,52321],{"class":147},[127,82496,275],{"class":140},[127,82498,51846],{"class":147},[127,82500,82501],{"class":129,"line":2326},[127,82502,2942],{"emptyLinePlaceholder":606},[127,82504,82505,82507,82509],{"class":129,"line":3119},[127,82506,52321],{"class":147},[127,82508,51175],{"class":140},[127,82510,51846],{"class":147},[19,82512,82513],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23451,82515,82517],{"id":82516},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82519,82520],{},"静态方法，将伪数组转换为真数组",[19,82522,82523],{},[23,82524],{"alt":122,"src":82525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[117,82527,82529],{"className":53602,"code":82528,"language":53604,"meta":122,"style":122},"\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",[124,82530,82531,82539,82547,82559,82571,82583,82591,82599,82604,82609,82614,82619,82627],{"__ignoreMap":122},[127,82532,82533,82535,82537],{"class":129,"line":130},[127,82534,1584],{"class":147},[127,82536,275],{"class":140},[127,82538,51846],{"class":147},[127,82540,82541,82543,82545],{"class":129,"line":137},[127,82542,52679],{"class":147},[127,82544,1681],{"class":140},[127,82546,51846],{"class":147},[127,82548,82549,82551,82553,82555,82557],{"class":129,"line":151},[127,82550,51880],{"class":147},[127,82552,635],{"class":140},[127,82554,55848],{"class":147},[127,82556,635],{"class":140},[127,82558,51846],{"class":147},[127,82560,82561,82563,82565,82567,82569],{"class":129,"line":167},[127,82562,51880],{"class":147},[127,82564,635],{"class":140},[127,82566,55848],{"class":147},[127,82568,635],{"class":140},[127,82570,51846],{"class":147},[127,82572,82573,82575,82577,82579,82581],{"class":129,"line":415},[127,82574,51880],{"class":147},[127,82576,635],{"class":140},[127,82578,55848],{"class":147},[127,82580,635],{"class":140},[127,82582,51846],{"class":147},[127,82584,82585,82587,82589],{"class":129,"line":421},[127,82586,52952],{"class":147},[127,82588,1681],{"class":140},[127,82590,51846],{"class":147},[127,82592,82593,82595,82597],{"class":129,"line":1766},[127,82594,52679],{"class":147},[127,82596,52348],{"class":140},[127,82598,51846],{"class":147},[127,82600,82601],{"class":129,"line":1856},[127,82602,82603],{"class":147},"    const lis = document.querySelectorAll('li')\n",[127,82605,82606],{"class":129,"line":1862},[127,82607,82608],{"class":147},"    const liss = Array.from(lis)\n",[127,82610,82611],{"class":129,"line":1874},[127,82612,82613],{"class":147},"    liss.pop()\n",[127,82615,82616],{"class":129,"line":2155},[127,82617,82618],{"class":147},"    console.log(liss)\n",[127,82620,82621,82623,82625],{"class":129,"line":2160},[127,82622,52952],{"class":147},[127,82624,52348],{"class":140},[127,82626,51846],{"class":147},[127,82628,82629,82631,82633],{"class":129,"line":2166},[127,82630,52321],{"class":147},[127,82632,275],{"class":140},[127,82634,51846],{"class":147},[19,82636,82637],{},[23,82638],{"alt":122,"src":82639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22539,82641,82643],{"id":82642},"_41053-string","4.10.5.3 String",[19,82645,82646],{},[23,82647],{"alt":122,"src":82648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23451,82650,82652],{"id":82651},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[117,82654,82656],{"className":53602,"code":82655,"language":53604,"meta":122,"style":122},"\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",[124,82657,82658,82666,82674,82679,82684,82689,82693,82698,82703,82708,82716],{"__ignoreMap":122},[127,82659,82660,82662,82664],{"class":129,"line":130},[127,82661,1584],{"class":147},[127,82663,275],{"class":140},[127,82665,51846],{"class":147},[127,82667,82668,82670,82672],{"class":129,"line":137},[127,82669,52679],{"class":147},[127,82671,52348],{"class":140},[127,82673,51846],{"class":147},[127,82675,82676],{"class":129,"line":151},[127,82677,82678],{"class":147},"    \u002F\u002F 把字符串转化为数组\n",[127,82680,82681],{"class":129,"line":167},[127,82682,82683],{"class":147},"    const str = 'pink,red'\n",[127,82685,82686],{"class":129,"line":415},[127,82687,82688],{"class":147},"    const arr = str.split(',')\n",[127,82690,82691],{"class":129,"line":421},[127,82692,81167],{"class":147},[127,82694,82695],{"class":129,"line":1766},[127,82696,82697],{"class":147},"    const str1 = '2025-8-25'\n",[127,82699,82700],{"class":129,"line":1856},[127,82701,82702],{"class":147},"    const arr1 = str1.split('-')\n",[127,82704,82705],{"class":129,"line":1862},[127,82706,82707],{"class":147},"    console.log(arr1)\n",[127,82709,82710,82712,82714],{"class":129,"line":1874},[127,82711,52952],{"class":147},[127,82713,52348],{"class":140},[127,82715,51846],{"class":147},[127,82717,82718,82720,82722],{"class":129,"line":2155},[127,82719,52321],{"class":147},[127,82721,275],{"class":140},[127,82723,51846],{"class":147},[23451,82725,82727],{"id":82726},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82729,5723],{},[19,82731,82732],{},"substring(indexStart)",[19,82734,82735],{},"substring(indexStart, indexEnd)",[1681,82737,82738,82749,82761,82771],{},[635,82739,82740,82741,82744,82745,82748],{},"如果省略了 ",[124,82742,82743],{},"indexEnd","，则 ",[124,82746,82747],{},"substring()"," 提取字符直到字符串的末尾",[635,82750,82751,82752,82755,82756,82744,82758,82760],{},"如果 ",[124,82753,82754],{},"indexStart"," 等于 ",[124,82757,82743],{},[124,82759,82747],{}," 返回一个空字符串",[635,82762,82751,82763,82765,82766,82744,82768,82770],{},[124,82764,82754],{}," 大于 ",[124,82767,82743],{},[124,82769,82747],{}," 的效果就像交换了这两个参数一样",[635,82772,82773],{},"结束的索引号不包含想要截取的部分",[117,82775,82777],{"className":82018,"code":82776,"language":82020,"meta":122,"style":122},"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",[124,82778,82779,82791,82795,82829,82859,82863,82894,82898,82925,82955,82985,82989,83020],{"__ignoreMap":122},[127,82780,82781,82784,82786,82789],{"class":129,"line":130},[127,82782,82783],{"class":147},"const anyString ",[127,82785,725],{"class":290},[127,82787,82788],{"class":781}," \"Mozilla\"",[127,82790,164],{"class":147},[127,82792,82793],{"class":129,"line":137},[127,82794,2942],{"emptyLinePlaceholder":606},[127,82796,82797,82800,82802,82804,82806,82809,82811,82814,82816,82818,82820,82822,82824,82826],{"class":129,"line":151},[127,82798,82799],{"class":154},"console",[127,82801,1233],{"class":147},[127,82803,58780],{"class":154},[127,82805,681],{"class":147},[127,82807,82808],{"class":154},"anyString",[127,82810,1233],{"class":147},[127,82812,82813],{"class":154},"substring",[127,82815,681],{"class":147},[127,82817,867],{"class":154},[127,82819,12977],{"class":147},[127,82821,893],{"class":154},[127,82823,75782],{"class":147},[127,82825,33869],{"class":290},[127,82827,82828],{"class":781}," 'M'\n",[127,82830,82831,82833,82835,82837,82839,82841,82843,82845,82847,82849,82851,82853,82855,82857],{"class":129,"line":167},[127,82832,82799],{"class":154},[127,82834,1233],{"class":147},[127,82836,58780],{"class":154},[127,82838,681],{"class":147},[127,82840,82808],{"class":154},[127,82842,1233],{"class":147},[127,82844,82813],{"class":154},[127,82846,681],{"class":147},[127,82848,893],{"class":154},[127,82850,12977],{"class":147},[127,82852,867],{"class":154},[127,82854,75782],{"class":147},[127,82856,33869],{"class":290},[127,82858,82828],{"class":781},[127,82860,82861],{"class":129,"line":415},[127,82862,2942],{"emptyLinePlaceholder":606},[127,82864,82865,82867,82869,82871,82873,82875,82877,82879,82881,82883,82885,82887,82889,82891],{"class":129,"line":421},[127,82866,82799],{"class":154},[127,82868,1233],{"class":147},[127,82870,58780],{"class":154},[127,82872,681],{"class":147},[127,82874,82808],{"class":154},[127,82876,1233],{"class":147},[127,82878,82813],{"class":154},[127,82880,681],{"class":147},[127,82882,867],{"class":154},[127,82884,12977],{"class":147},[127,82886,1019],{"class":154},[127,82888,75782],{"class":147},[127,82890,33869],{"class":290},[127,82892,82893],{"class":781}," 'Mozill'\n",[127,82895,82896],{"class":129,"line":1766},[127,82897,2942],{"emptyLinePlaceholder":606},[127,82899,82900,82902,82904,82906,82908,82910,82912,82914,82916,82918,82920,82922],{"class":129,"line":1856},[127,82901,82799],{"class":154},[127,82903,1233],{"class":147},[127,82905,58780],{"class":154},[127,82907,681],{"class":147},[127,82909,82808],{"class":154},[127,82911,1233],{"class":147},[127,82913,82813],{"class":154},[127,82915,681],{"class":147},[127,82917,968],{"class":154},[127,82919,75782],{"class":147},[127,82921,33869],{"class":290},[127,82923,82924],{"class":781}," 'lla'\n",[127,82926,82927,82929,82931,82933,82935,82937,82939,82941,82943,82945,82947,82949,82951,82953],{"class":129,"line":1862},[127,82928,82799],{"class":154},[127,82930,1233],{"class":147},[127,82932,58780],{"class":154},[127,82934,681],{"class":147},[127,82936,82808],{"class":154},[127,82938,1233],{"class":147},[127,82940,82813],{"class":154},[127,82942,681],{"class":147},[127,82944,968],{"class":154},[127,82946,12977],{"class":147},[127,82948,1044],{"class":154},[127,82950,75838],{"class":147},[127,82952,33869],{"class":290},[127,82954,82924],{"class":781},[127,82956,82957,82959,82961,82963,82965,82967,82969,82971,82973,82975,82977,82979,82981,82983],{"class":129,"line":1874},[127,82958,82799],{"class":154},[127,82960,1233],{"class":147},[127,82962,58780],{"class":154},[127,82964,681],{"class":147},[127,82966,82808],{"class":154},[127,82968,1233],{"class":147},[127,82970,82813],{"class":154},[127,82972,681],{"class":147},[127,82974,1044],{"class":154},[127,82976,12977],{"class":147},[127,82978,968],{"class":154},[127,82980,75782],{"class":147},[127,82982,33869],{"class":290},[127,82984,82924],{"class":781},[127,82986,82987],{"class":129,"line":2155},[127,82988,2942],{"emptyLinePlaceholder":606},[127,82990,82991,82993,82995,82997,82999,83001,83003,83005,83007,83009,83011,83013,83015,83017],{"class":129,"line":2160},[127,82992,82799],{"class":154},[127,82994,1233],{"class":147},[127,82996,58780],{"class":154},[127,82998,681],{"class":147},[127,83000,82808],{"class":154},[127,83002,1233],{"class":147},[127,83004,82813],{"class":154},[127,83006,681],{"class":147},[127,83008,867],{"class":154},[127,83010,12977],{"class":147},[127,83012,1044],{"class":154},[127,83014,75782],{"class":147},[127,83016,33869],{"class":290},[127,83018,83019],{"class":781}," 'Mozilla'\n",[127,83021,83022,83024,83026,83028,83030,83032,83034,83036,83038,83040,83042,83044,83046,83048],{"class":129,"line":2166},[127,83023,82799],{"class":154},[127,83025,1233],{"class":147},[127,83027,58780],{"class":154},[127,83029,681],{"class":147},[127,83031,82808],{"class":154},[127,83033,1233],{"class":147},[127,83035,82813],{"class":154},[127,83037,681],{"class":147},[127,83039,867],{"class":154},[127,83041,12977],{"class":147},[127,83043,1121],{"class":154},[127,83045,75782],{"class":147},[127,83047,33869],{"class":290},[127,83049,83019],{"class":781},[23451,83051,83053],{"id":83052},"_410533-startswith","4.10.5.3.3 startsWith",[19,83055,83056,83059,83060,83065,83066,83068,83069],{},[124,83057,83058],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[30,83061,83062],{},[124,83063,83064],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[124,83067,1907],{}," 或 ",[124,83070,66553],{},[117,83072,83074],{"className":78024,"code":83073,"language":78026,"meta":122,"style":122},"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",[124,83075,83076,83088,83107,83112,83132],{"__ignoreMap":122},[127,83077,83078,83080,83083,83085],{"class":129,"line":130},[127,83079,7334],{"class":290},[127,83081,83082],{"class":147}," str1 ",[127,83084,725],{"class":290},[127,83086,83087],{"class":781}," \"Saturday night plans\"\n",[127,83089,83090,83092,83094,83097,83100,83102,83105],{"class":129,"line":137},[127,83091,78061],{"class":147},[127,83093,58780],{"class":143},[127,83095,83096],{"class":147},"(str1.",[127,83098,83099],{"class":143},"startsWith",[127,83101,681],{"class":147},[127,83103,83104],{"class":781},"\"Sat\"",[127,83106,31037],{"class":147},[127,83108,83109],{"class":129,"line":151},[127,83110,83111],{"class":133},"\u002F\u002F Expected output: true\n",[127,83113,83114,83116,83118,83120,83122,83124,83126,83128,83130],{"class":129,"line":167},[127,83115,78061],{"class":147},[127,83117,58780],{"class":143},[127,83119,83096],{"class":147},[127,83121,83099],{"class":143},[127,83123,681],{"class":147},[127,83125,83104],{"class":781},[127,83127,12977],{"class":147},[127,83129,749],{"class":154},[127,83131,31037],{"class":147},[127,83133,83134],{"class":129,"line":415},[127,83135,83136],{"class":133},"\u002F\u002F Expected output: false\n",[117,83138,83140],{"className":51173,"code":83139,"language":51175,"meta":122,"style":122},"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",[124,83141,83142,83147,83152,83156,83161,83166],{"__ignoreMap":122},[127,83143,83144],{"class":129,"line":130},[127,83145,83146],{"class":147},"startsWith(searchString)\n",[127,83148,83149],{"class":129,"line":137},[127,83150,83151],{"class":147},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[127,83153,83154],{"class":129,"line":151},[127,83155,2942],{"emptyLinePlaceholder":606},[127,83157,83158],{"class":129,"line":167},[127,83159,83160],{"class":147},"const str3 = 'pink老师上课中'\n",[127,83162,83163],{"class":129,"line":415},[127,83164,83165],{"class":147},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[127,83167,83168],{"class":129,"line":421},[127,83169,83170],{"class":147},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23451,83172,83174],{"id":83173},"_410534-includes","4.10.5.3.4 includes",[19,83176,83177],{},"includes(searchString) includes(searchString, position)",[632,83179,83180],{},[635,83181,83182],{},"searchString:",[19,83184,83185,83186,83188,83189,83194,83195,83200,83201,22041,83204,83207,83208,83211],{},"一个要在 ",[124,83187,1844],{}," 中查找的字符串。",[457,83190,83193],{"href":83191,"rel":83192},"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",[24405],"不能是正则表达式","。所有非正则表达式的值都会被",[457,83196,83199],{"href":83197,"rel":83198},"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",[24405],"强制转换为字符串","，因此如果该参数被省略或传入 ",[124,83202,83203],{},"undefined",[124,83205,83206],{},"includes()"," 方法会在字符串中搜索 ",[124,83209,83210],{},"\"undefined\"","，这通常不是你想要的",[632,83213,83214],{"start":137},[635,83215,83216,1533],{},[124,83217,83218],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83220,83221,83222,83225,83226],{},"在字符串中开始搜索 ",[124,83223,83224],{},"searchString"," 的位置。默认值为 ",[124,83227,867],{},[632,83229,83230],{"start":151},[635,83231,83232],{},"返回值：",[19,83234,83235,83236,83238,83239,83243,83244],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[124,83237,83224],{}," 为空字符串的情况），则返回 ",[30,83240,83241],{},[124,83242,1907],{}," ，否则返回 ",[30,83245,83246],{},[124,83247,66553],{},[632,83249,83250],{"start":167},[635,83251,83252],{},"异常：",[19,83254,82751,83255,14337,83257,83261],{},[124,83256,83224],{},[457,83258,83260],{"href":83191,"rel":83259},[24405],"是一个正则表达式","，则会抛出",[19,83263,83264],{},"只要是有就是true，不需要非得以谁开头结尾",[117,83266,83268],{"className":78024,"code":83267,"language":78026,"meta":122,"style":122},"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",[124,83269,83270,83281,83304,83323,83343,83365,83384],{"__ignoreMap":122},[127,83271,83272,83274,83276,83278],{"class":129,"line":130},[127,83273,7334],{"class":290},[127,83275,80304],{"class":147},[127,83277,725],{"class":290},[127,83279,83280],{"class":781}," \"To be, or not to be, that is the question.\"\n",[127,83282,83283,83285,83287,83290,83293,83295,83298,83301],{"class":129,"line":137},[127,83284,78061],{"class":147},[127,83286,58780],{"class":143},[127,83288,83289],{"class":147},"(str.",[127,83291,83292],{"class":143},"includes",[127,83294,681],{"class":147},[127,83296,83297],{"class":781},"\"To be\"",[127,83299,83300],{"class":147},"))",[127,83302,83303],{"class":133},"  \u002F\u002F true\n",[127,83305,83306,83308,83310,83312,83314,83316,83319,83321],{"class":129,"line":151},[127,83307,78061],{"class":147},[127,83309,58780],{"class":143},[127,83311,83289],{"class":147},[127,83313,83292],{"class":143},[127,83315,681],{"class":147},[127,83317,83318],{"class":781},"\"question\"",[127,83320,83300],{"class":147},[127,83322,83303],{"class":133},[127,83324,83325,83327,83329,83331,83333,83335,83338,83340],{"class":129,"line":167},[127,83326,78061],{"class":147},[127,83328,58780],{"class":143},[127,83330,83289],{"class":147},[127,83332,83292],{"class":143},[127,83334,681],{"class":147},[127,83336,83337],{"class":781},"\"nonexistent\"",[127,83339,83300],{"class":147},[127,83341,83342],{"class":133},"  \u002F\u002F false\n",[127,83344,83345,83347,83349,83351,83353,83355,83357,83359,83361,83363],{"class":129,"line":415},[127,83346,78061],{"class":147},[127,83348,58780],{"class":143},[127,83350,83289],{"class":147},[127,83352,83292],{"class":143},[127,83354,681],{"class":147},[127,83356,83297],{"class":781},[127,83358,12977],{"class":147},[127,83360,893],{"class":154},[127,83362,83300],{"class":147},[127,83364,83342],{"class":133},[127,83366,83367,83369,83371,83373,83375,83377,83380,83382],{"class":129,"line":421},[127,83368,78061],{"class":147},[127,83370,58780],{"class":143},[127,83372,83289],{"class":147},[127,83374,83292],{"class":143},[127,83376,681],{"class":147},[127,83378,83379],{"class":781},"\"TO BE\"",[127,83381,83300],{"class":147},[127,83383,83342],{"class":133},[127,83385,83386,83388,83390,83392,83394,83396,83398,83400],{"class":129,"line":1766},[127,83387,78061],{"class":147},[127,83389,58780],{"class":143},[127,83391,83289],{"class":147},[127,83393,83292],{"class":143},[127,83395,681],{"class":147},[127,83397,8194],{"class":781},[127,83399,83300],{"class":147},[127,83401,83303],{"class":133},[23451,83403,83405],{"id":83404},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[117,83407,83409],{"className":53602,"code":83408,"language":53604,"meta":122,"style":122},"\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",[124,83410,83411,83419,83427,83432,83437,83442,83447,83452,83460],{"__ignoreMap":122},[127,83412,83413,83415,83417],{"class":129,"line":130},[127,83414,1584],{"class":147},[127,83416,275],{"class":140},[127,83418,51846],{"class":147},[127,83420,83421,83423,83425],{"class":129,"line":137},[127,83422,52679],{"class":147},[127,83424,52348],{"class":140},[127,83426,51846],{"class":147},[127,83428,83429],{"class":129,"line":151},[127,83430,83431],{"class":147},"    const num = 10\n",[127,83433,83434],{"class":129,"line":167},[127,83435,83436],{"class":147},"    \u002F\u002F 强制转换\n",[127,83438,83439],{"class":129,"line":415},[127,83440,83441],{"class":147},"    console.log(String(num))\n",[127,83443,83444],{"class":129,"line":421},[127,83445,83446],{"class":147},"    \u002F\u002F toString()方法转换\n",[127,83448,83449],{"class":129,"line":1766},[127,83450,83451],{"class":147},"    console.log(num.toString())\n",[127,83453,83454,83456,83458],{"class":129,"line":1856},[127,83455,52952],{"class":147},[127,83457,52348],{"class":140},[127,83459,51846],{"class":147},[127,83461,83462,83464,83466],{"class":129,"line":1862},[127,83463,52321],{"class":147},[127,83465,275],{"class":140},[127,83467,51846],{"class":147},[23451,83469,83471],{"id":83470},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83473,83474],{},[23,83475],{"alt":122,"src":83476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[117,83478,83480],{"className":51173,"code":83479,"language":51175,"meta":122,"style":122},"\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",[124,83481,83482,83492,83506,83510,83518,83532,83552,83564,83572,83576,83584,83596,83604,83616,83621,83626,83631,83678,83694,83702,83710,83714],{"__ignoreMap":122},[127,83483,83484,83486,83488,83490],{"class":129,"line":130},[127,83485,51837],{"class":147},[127,83487,51840],{"class":140},[127,83489,51843],{"class":143},[127,83491,51846],{"class":147},[127,83493,83494,83496,83498,83500,83502,83504],{"class":129,"line":137},[127,83495,1584],{"class":147},[127,83497,51175],{"class":140},[127,83499,51855],{"class":143},[127,83501,725],{"class":147},[127,83503,51860],{"class":781},[127,83505,51846],{"class":147},[127,83507,83508],{"class":129,"line":151},[127,83509,2942],{"emptyLinePlaceholder":606},[127,83511,83512,83514,83516],{"class":129,"line":167},[127,83513,1584],{"class":147},[127,83515,51873],{"class":140},[127,83517,51846],{"class":147},[127,83519,83520,83522,83524,83526,83528,83530],{"class":129,"line":415},[127,83521,52679],{"class":147},[127,83523,51883],{"class":140},[127,83525,51886],{"class":143},[127,83527,725],{"class":147},[127,83529,51891],{"class":781},[127,83531,51846],{"class":147},[127,83533,83534,83536,83538,83540,83542,83544,83546,83548,83550],{"class":129,"line":421},[127,83535,52679],{"class":147},[127,83537,51883],{"class":140},[127,83539,15462],{"class":143},[127,83541,725],{"class":147},[127,83543,51930],{"class":781},[127,83545,51910],{"class":143},[127,83547,725],{"class":147},[127,83549,51937],{"class":781},[127,83551,51846],{"class":147},[127,83553,83554,83556,83558,83560,83562],{"class":129,"line":1766},[127,83555,52679],{"class":147},[127,83557,51946],{"class":140},[127,83559,51949],{"class":147},[127,83561,51946],{"class":140},[127,83563,51846],{"class":147},[127,83565,83566,83568,83570],{"class":129,"line":1856},[127,83567,52321],{"class":147},[127,83569,51873],{"class":140},[127,83571,51846],{"class":147},[127,83573,83574],{"class":129,"line":1862},[127,83575,2942],{"emptyLinePlaceholder":606},[127,83577,83578,83580,83582],{"class":129,"line":1874},[127,83579,1584],{"class":147},[127,83581,275],{"class":140},[127,83583,51846],{"class":147},[127,83585,83586,83588,83590,83592,83594],{"class":129,"line":2155},[127,83587,52679],{"class":147},[127,83589,52147],{"class":140},[127,83591,55848],{"class":147},[127,83593,52147],{"class":140},[127,83595,51846],{"class":147},[127,83597,83598,83600,83602],{"class":129,"line":2160},[127,83599,52679],{"class":147},[127,83601,52348],{"class":140},[127,83603,51846],{"class":147},[127,83605,83606,83608,83611,83613],{"class":129,"line":2166},[127,83607,11763],{"class":290},[127,83609,83610],{"class":154}," gift",[127,83612,14106],{"class":290},[127,83614,83615],{"class":781}," '50g的茶叶，清洗球'\n",[127,83617,83618],{"class":129,"line":2171},[127,83619,83620],{"class":133},"    \u002F\u002F 1.把字符串拆分为数组\n",[127,83622,83623],{"class":129,"line":2185},[127,83624,83625],{"class":133},"    \u002F\u002F console.log(gift.split(','))\n",[127,83627,83628],{"class":129,"line":2190},[127,83629,83630],{"class":133},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[127,83632,83633,83635,83637,83639,83642,83645,83647,83650,83652,83654,83656,83658,83660,83663,83665,83668,83670,83672,83674,83676],{"class":129,"line":2196},[127,83634,11763],{"class":290},[127,83636,74448],{"class":154},[127,83638,14106],{"class":290},[127,83640,83641],{"class":147}," gift.",[127,83643,83644],{"class":143},"split",[127,83646,681],{"class":147},[127,83648,83649],{"class":781},"'，'",[127,83651,31366],{"class":147},[127,83653,74573],{"class":143},[127,83655,681],{"class":147},[127,83657,80324],{"class":5758},[127,83659,80327],{"class":290},[127,83661,83662],{"class":781}," `\u003Cspan>【赠品】${",[127,83664,80324],{"class":147},[127,83666,83667],{"class":781},"}\u003C\u002Fspan>\u003Cbr>`",[127,83669,31366],{"class":147},[127,83671,74752],{"class":143},[127,83673,681],{"class":147},[127,83675,74757],{"class":781},[127,83677,687],{"class":147},[127,83679,83680,83682,83684,83686,83688,83690,83692],{"class":129,"line":2217},[127,83681,52942],{"class":147},[127,83683,54934],{"class":143},[127,83685,681],{"class":147},[127,83687,82460],{"class":781},[127,83689,74778],{"class":147},[127,83691,725],{"class":290},[127,83693,74514],{"class":147},[127,83695,83696,83698,83700],{"class":129,"line":2222},[127,83697,52952],{"class":147},[127,83699,52348],{"class":140},[127,83701,51846],{"class":147},[127,83703,83704,83706,83708],{"class":129,"line":2236},[127,83705,52321],{"class":147},[127,83707,275],{"class":140},[127,83709,51846],{"class":147},[127,83711,83712],{"class":129,"line":2241},[127,83713,2942],{"emptyLinePlaceholder":606},[127,83715,83716,83718,83720],{"class":129,"line":2270},[127,83717,52321],{"class":147},[127,83719,51175],{"class":140},[127,83721,51846],{"class":147},[22539,83723,83725],{"id":83724},"_41054-number","4.10.5.4 Number",[19,83727,83728],{},[23,83729],{"alt":122,"src":83730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83732,83733],{},"整数也可以进行toFixed来保留小数",[19,83735,83736],{},"比如：",[19,83738,83739],{},"const price=10",[19,83741,83742],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22539,83744,83746],{"id":83745},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83748,83749],{},[23,83750],{"alt":122,"src":83751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[117,83753,83755],{"className":51173,"code":83754,"language":51175,"meta":122,"style":122},"\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",[124,83756,83757,83767,83781,83785,83793,83807,83827,83839,83847,83853,83863,83873,83883,83887,83891,83897,83909,83923,83927,83931,83937,83949,83965,83975,83991,83995,83999,84005,84015,84025,84029,84033,84041,84053,84065,84077,84081,84085,84093,84105,84109,84113,84124,84134,84146,84158,84168,84172,84176,84184,84193,84205,84215,84225,84229,84233,84241,84250,84257,84267,84279,84283,84287,84296,84306,84317,84329,84341,84345,84349,84358,84368,84379,84383,84387,84393,84405,84417,84427,84437,84455,84467,84471,84475,84484,84496,84506,84516,84528,84532,84540,84548,84552,84560,84574,84582,84596,84624,84632,84640,84650,84654,84662,84670,84679,84687,84696,84706,84710,84714,84722,84730,84739,84747,84755,84768,84772,84776,84784,84792,84801,84809,84817,84832,84836,84840,84848,84856,84865,84873,84881,84895,84903,84907,84911,84916,84942,84947,84984,84989,85012,85017,85071,85076,85112,85116,85122,85127,85136,85150,85159,85178,85187,85197,85202,85207,85220,85225,85279,85305,85313,85321,85325],{"__ignoreMap":122},[127,83758,83759,83761,83763,83765],{"class":129,"line":130},[127,83760,51837],{"class":147},[127,83762,51840],{"class":140},[127,83764,51843],{"class":143},[127,83766,51846],{"class":147},[127,83768,83769,83771,83773,83775,83777,83779],{"class":129,"line":137},[127,83770,1584],{"class":147},[127,83772,51175],{"class":140},[127,83774,51855],{"class":143},[127,83776,725],{"class":147},[127,83778,51860],{"class":781},[127,83780,51846],{"class":147},[127,83782,83783],{"class":129,"line":151},[127,83784,2942],{"emptyLinePlaceholder":606},[127,83786,83787,83789,83791],{"class":129,"line":167},[127,83788,1584],{"class":147},[127,83790,51873],{"class":140},[127,83792,51846],{"class":147},[127,83794,83795,83797,83799,83801,83803,83805],{"class":129,"line":415},[127,83796,52679],{"class":147},[127,83798,51883],{"class":140},[127,83800,51886],{"class":143},[127,83802,725],{"class":147},[127,83804,51891],{"class":781},[127,83806,51846],{"class":147},[127,83808,83809,83811,83813,83815,83817,83819,83821,83823,83825],{"class":129,"line":421},[127,83810,52679],{"class":147},[127,83812,51883],{"class":140},[127,83814,15462],{"class":143},[127,83816,725],{"class":147},[127,83818,51930],{"class":781},[127,83820,51910],{"class":143},[127,83822,725],{"class":147},[127,83824,51937],{"class":781},[127,83826,51846],{"class":147},[127,83828,83829,83831,83833,83835,83837],{"class":129,"line":1766},[127,83830,52679],{"class":147},[127,83832,51946],{"class":140},[127,83834,51949],{"class":147},[127,83836,51946],{"class":140},[127,83838,51846],{"class":147},[127,83840,83841,83843,83845],{"class":129,"line":1856},[127,83842,52679],{"class":147},[127,83844,575],{"class":140},[127,83846,51846],{"class":147},[127,83848,83849,83851],{"class":129,"line":1862},[127,83850,6945],{"class":140},[127,83852,148],{"class":147},[127,83854,83855,83857,83859,83861],{"class":129,"line":1874},[127,83856,55230],{"class":154},[127,83858,158],{"class":147},[127,83860,867],{"class":154},[127,83862,164],{"class":147},[127,83864,83865,83867,83869,83871],{"class":129,"line":2155},[127,83866,55241],{"class":154},[127,83868,158],{"class":147},[127,83870,867],{"class":154},[127,83872,164],{"class":147},[127,83874,83875,83877,83879,83881],{"class":129,"line":2160},[127,83876,73125],{"class":154},[127,83878,158],{"class":147},[127,83880,61038],{"class":154},[127,83882,164],{"class":147},[127,83884,83885],{"class":129,"line":2166},[127,83886,2729],{"class":147},[127,83888,83889],{"class":129,"line":2171},[127,83890,2942],{"emptyLinePlaceholder":606},[127,83892,83893,83895],{"class":129,"line":2185},[127,83894,62656],{"class":143},[127,83896,148],{"class":147},[127,83898,83899,83901,83903,83905,83907],{"class":129,"line":2190},[127,83900,55305],{"class":154},[127,83902,158],{"class":147},[127,83904,79103],{"class":154},[127,83906,291],{"class":290},[127,83908,164],{"class":147},[127,83910,83911,83913,83915,83917,83919,83921],{"class":129,"line":2196},[127,83912,55241],{"class":154},[127,83914,158],{"class":147},[127,83916,986],{"class":154},[127,83918,291],{"class":290},[127,83920,52093],{"class":154},[127,83922,164],{"class":147},[127,83924,83925],{"class":129,"line":2217},[127,83926,2729],{"class":147},[127,83928,83929],{"class":129,"line":2222},[127,83930,2942],{"emptyLinePlaceholder":606},[127,83932,83933,83935],{"class":129,"line":2236},[127,83934,79154],{"class":143},[127,83936,148],{"class":147},[127,83938,83939,83941,83943,83945,83947],{"class":129,"line":2241},[127,83940,55230],{"class":154},[127,83942,158],{"class":147},[127,83944,1250],{"class":154},[127,83946,291],{"class":290},[127,83948,164],{"class":147},[127,83950,83951,83953,83955,83957,83959,83961,83963],{"class":129,"line":2270},[127,83952,62393],{"class":154},[127,83954,158],{"class":147},[127,83956,28661],{"class":154},[127,83958,79209],{"class":154},[127,83960,79212],{"class":154},[127,83962,1369],{"class":290},[127,83964,164],{"class":147},[127,83966,83967,83969,83971,83973],{"class":129,"line":2275},[127,83968,55543],{"class":154},[127,83970,158],{"class":147},[127,83972,52015],{"class":154},[127,83974,164],{"class":147},[127,83976,83977,83979,83981,83983,83985,83987,83989],{"class":129,"line":2292},[127,83978,62510],{"class":154},[127,83980,158],{"class":147},[127,83982,893],{"class":154},[127,83984,291],{"class":290},[127,83986,52058],{"class":154},[127,83988,62777],{"class":154},[127,83990,164],{"class":147},[127,83992,83993],{"class":129,"line":2297},[127,83994,2729],{"class":147},[127,83996,83997],{"class":129,"line":2302},[127,83998,2942],{"emptyLinePlaceholder":606},[127,84000,84001,84003],{"class":129,"line":2307},[127,84002,79272],{"class":143},[127,84004,148],{"class":147},[127,84006,84007,84009,84011,84013],{"class":129,"line":2321},[127,84008,62558],{"class":154},[127,84010,158],{"class":147},[127,84012,62563],{"class":154},[127,84014,164],{"class":147},[127,84016,84017,84019,84021,84023],{"class":129,"line":2326},[127,84018,55418],{"class":154},[127,84020,158],{"class":147},[127,84022,62351],{"class":154},[127,84024,164],{"class":147},[127,84026,84027],{"class":129,"line":3119},[127,84028,2729],{"class":147},[127,84030,84031],{"class":129,"line":3133},[127,84032,2942],{"emptyLinePlaceholder":606},[127,84034,84035,84037,84039],{"class":129,"line":3141},[127,84036,79154],{"class":143},[127,84038,56149],{"class":140},[127,84040,148],{"class":147},[127,84042,84043,84045,84047,84049,84051],{"class":129,"line":3146},[127,84044,55305],{"class":154},[127,84046,158],{"class":147},[127,84048,1286],{"class":154},[127,84050,291],{"class":290},[127,84052,164],{"class":147},[127,84054,84055,84057,84059,84061,84063],{"class":129,"line":3152},[127,84056,55319],{"class":154},[127,84058,158],{"class":147},[127,84060,1286],{"class":154},[127,84062,291],{"class":290},[127,84064,164],{"class":147},[127,84066,84067,84069,84071,84073,84075],{"class":129,"line":3158},[127,84068,62283],{"class":154},[127,84070,158],{"class":147},[127,84072,994],{"class":154},[127,84074,291],{"class":290},[127,84076,164],{"class":147},[127,84078,84079],{"class":129,"line":3163},[127,84080,2729],{"class":147},[127,84082,84083],{"class":129,"line":8490},[127,84084,2942],{"emptyLinePlaceholder":606},[127,84086,84087,84089,84091],{"class":129,"line":8514},[127,84088,79154],{"class":143},[127,84090,62837],{"class":143},[127,84092,148],{"class":147},[127,84094,84095,84097,84099,84101,84103],{"class":129,"line":8519},[127,84096,55305],{"class":154},[127,84098,158],{"class":147},[127,84100,2265],{"class":154},[127,84102,291],{"class":290},[127,84104,164],{"class":147},[127,84106,84107],{"class":129,"line":8525},[127,84108,2729],{"class":147},[127,84110,84111],{"class":129,"line":8552},[127,84112,2942],{"emptyLinePlaceholder":606},[127,84114,84115,84117,84119,84122],{"class":129,"line":8557},[127,84116,79154],{"class":143},[127,84118,62837],{"class":143},[127,84120,84121],{"class":143}," .tag",[127,84123,148],{"class":147},[127,84125,84126,84128,84130,84132],{"class":129,"line":8563},[127,84127,55543],{"class":154},[127,84129,158],{"class":147},[127,84131,61402],{"class":154},[127,84133,164],{"class":147},[127,84135,84136,84138,84140,84142,84144],{"class":129,"line":8575},[127,84137,55230],{"class":154},[127,84139,158],{"class":147},[127,84141,530],{"class":154},[127,84143,291],{"class":290},[127,84145,164],{"class":147},[127,84147,84148,84150,84152,84154,84156],{"class":129,"line":8587},[127,84149,55456],{"class":154},[127,84151,158],{"class":147},[127,84153,1173],{"class":154},[127,84155,291],{"class":290},[127,84157,164],{"class":147},[127,84159,84160,84162,84164,84166],{"class":129,"line":8599},[127,84161,57950],{"class":154},[127,84163,158],{"class":147},[127,84165,62603],{"class":154},[127,84167,164],{"class":147},[127,84169,84170],{"class":129,"line":10258},[127,84171,2729],{"class":147},[127,84173,84174],{"class":129,"line":10283},[127,84175,2942],{"emptyLinePlaceholder":606},[127,84177,84178,84180,84182],{"class":129,"line":10306},[127,84179,79154],{"class":143},[127,84181,79446],{"class":143},[127,84183,32006],{"class":147},[127,84185,84186,84188,84191],{"class":129,"line":10330},[127,84187,79154],{"class":143},[127,84189,84190],{"class":143}," .sub-total",[127,84192,148],{"class":147},[127,84194,84195,84197,84199,84201,84203],{"class":129,"line":10335},[127,84196,55456],{"class":154},[127,84198,158],{"class":147},[127,84200,1324],{"class":154},[127,84202,291],{"class":290},[127,84204,164],{"class":147},[127,84206,84207,84209,84211,84213],{"class":129,"line":10340},[127,84208,57950],{"class":154},[127,84210,158],{"class":147},[127,84212,79469],{"class":154},[127,84214,164],{"class":147},[127,84216,84217,84219,84221,84223],{"class":129,"line":10345},[127,84218,62370],{"class":154},[127,84220,158],{"class":147},[127,84222,893],{"class":154},[127,84224,164],{"class":147},[127,84226,84227],{"class":129,"line":10354},[127,84228,2729],{"class":147},[127,84230,84231],{"class":129,"line":10359},[127,84232,2942],{"emptyLinePlaceholder":606},[127,84234,84235,84237,84239],{"class":129,"line":10365},[127,84236,79154],{"class":143},[127,84238,79486],{"class":143},[127,84240,32006],{"class":147},[127,84242,84243,84245,84248],{"class":129,"line":10386},[127,84244,79154],{"class":143},[127,84246,84247],{"class":143}," .sub-total::before",[127,84249,32006],{"class":147},[127,84251,84252,84255],{"class":129,"line":10392},[127,84253,84254],{"class":143},"    .amount::before",[127,84256,148],{"class":147},[127,84258,84259,84261,84263,84265],{"class":129,"line":10406},[127,84260,79493],{"class":154},[127,84262,158],{"class":147},[127,84264,79498],{"class":781},[127,84266,164],{"class":147},[127,84268,84269,84271,84273,84275,84277],{"class":129,"line":10412},[127,84270,55456],{"class":154},[127,84272,158],{"class":147},[127,84274,1173],{"class":154},[127,84276,291],{"class":290},[127,84278,164],{"class":147},[127,84280,84281],{"class":129,"line":10439},[127,84282,2729],{"class":147},[127,84284,84285],{"class":129,"line":10448},[127,84286,2942],{"emptyLinePlaceholder":606},[127,84288,84289,84291,84294],{"class":129,"line":10454},[127,84290,79154],{"class":143},[127,84292,84293],{"class":143}," .spec",[127,84295,148],{"class":147},[127,84297,84298,84300,84302,84304],{"class":129,"line":10462},[127,84299,62370],{"class":154},[127,84301,158],{"class":147},[127,84303,530],{"class":154},[127,84305,164],{"class":147},[127,84307,84308,84310,84312,84315],{"class":129,"line":10467},[127,84309,57950],{"class":154},[127,84311,158],{"class":147},[127,84313,84314],{"class":154},"#888",[127,84316,164],{"class":147},[127,84318,84319,84321,84323,84325,84327],{"class":129,"line":17145},[127,84320,55456],{"class":154},[127,84322,158],{"class":147},[127,84324,1224],{"class":154},[127,84326,291],{"class":290},[127,84328,164],{"class":147},[127,84330,84331,84333,84335,84337,84339],{"class":129,"line":17151},[127,84332,62533],{"class":154},[127,84334,158],{"class":147},[127,84336,1374],{"class":154},[127,84338,291],{"class":290},[127,84340,164],{"class":147},[127,84342,84343],{"class":129,"line":17174},[127,84344,2729],{"class":147},[127,84346,84347],{"class":129,"line":17180},[127,84348,2942],{"emptyLinePlaceholder":606},[127,84350,84351,84353,84356],{"class":129,"line":17203},[127,84352,79154],{"class":143},[127,84354,84355],{"class":143}," .count",[127,84357,148],{"class":147},[127,84359,84360,84362,84364,84366],{"class":129,"line":17217},[127,84361,62370],{"class":154},[127,84363,158],{"class":147},[127,84365,893],{"class":154},[127,84367,164],{"class":147},[127,84369,84370,84372,84374,84377],{"class":129,"line":17237},[127,84371,57950],{"class":154},[127,84373,158],{"class":147},[127,84375,84376],{"class":154},"#aaa",[127,84378,164],{"class":147},[127,84380,84381],{"class":129,"line":17243},[127,84382,2729],{"class":147},[127,84384,84385],{"class":129,"line":17254},[127,84386,2942],{"emptyLinePlaceholder":606},[127,84388,84389,84391],{"class":129,"line":17277},[127,84390,73004],{"class":143},[127,84392,148],{"class":147},[127,84394,84395,84397,84399,84401,84403],{"class":129,"line":17299},[127,84396,55305],{"class":154},[127,84398,158],{"class":147},[127,84400,79103],{"class":154},[127,84402,291],{"class":290},[127,84404,164],{"class":147},[127,84406,84407,84409,84411,84413,84415],{"class":129,"line":17304},[127,84408,55241],{"class":154},[127,84410,158],{"class":147},[127,84412,867],{"class":154},[127,84414,52093],{"class":154},[127,84416,164],{"class":147},[127,84418,84419,84421,84423,84425],{"class":129,"line":17310},[127,84420,55543],{"class":154},[127,84422,158],{"class":147},[127,84424,52015],{"class":154},[127,84426,164],{"class":147},[127,84428,84429,84431,84433,84435],{"class":129,"line":17324},[127,84430,55554],{"class":154},[127,84432,158],{"class":147},[127,84434,52117],{"class":154},[127,84436,164],{"class":147},[127,84438,84439,84442,84444,84446,84448,84450,84453],{"class":129,"line":17337},[127,84440,84441],{"class":154},"      border-top",[127,84443,158],{"class":147},[127,84445,893],{"class":154},[127,84447,291],{"class":290},[127,84449,52058],{"class":154},[127,84451,84452],{"class":154}," #4e4e4e",[127,84454,164],{"class":147},[127,84456,84457,84459,84461,84463,84465],{"class":129,"line":17342},[127,84458,55230],{"class":154},[127,84460,158],{"class":147},[127,84462,1374],{"class":154},[127,84464,291],{"class":290},[127,84466,164],{"class":147},[127,84468,84469],{"class":129,"line":17356},[127,84470,2729],{"class":147},[127,84472,84473],{"class":129,"line":17361},[127,84474,2942],{"emptyLinePlaceholder":606},[127,84476,84477,84479,84482],{"class":129,"line":17367},[127,84478,73004],{"class":143},[127,84480,84481],{"class":143}," .amount",[127,84483,148],{"class":147},[127,84485,84486,84488,84490,84492,84494],{"class":129,"line":17372},[127,84487,55456],{"class":154},[127,84489,158],{"class":147},[127,84491,1324],{"class":154},[127,84493,291],{"class":290},[127,84495,164],{"class":147},[127,84497,84498,84500,84502,84504],{"class":129,"line":17386},[127,84499,57950],{"class":154},[127,84501,158],{"class":147},[127,84503,79469],{"class":154},[127,84505,164],{"class":147},[127,84507,84508,84510,84512,84514],{"class":129,"line":17391},[127,84509,62867],{"class":154},[127,84511,158],{"class":147},[127,84513,52027],{"class":154},[127,84515,164],{"class":147},[127,84517,84518,84520,84522,84524,84526],{"class":129,"line":17396},[127,84519,62283],{"class":154},[127,84521,158],{"class":147},[127,84523,1330],{"class":154},[127,84525,291],{"class":290},[127,84527,164],{"class":147},[127,84529,84530],{"class":129,"line":17410},[127,84531,2729],{"class":147},[127,84533,84534,84536,84538],{"class":129,"line":17422},[127,84535,52952],{"class":147},[127,84537,575],{"class":140},[127,84539,51846],{"class":147},[127,84541,84542,84544,84546],{"class":129,"line":17427},[127,84543,52321],{"class":147},[127,84545,51873],{"class":140},[127,84547,51846],{"class":147},[127,84549,84550],{"class":129,"line":17440},[127,84551,2942],{"emptyLinePlaceholder":606},[127,84553,84554,84556,84558],{"class":129,"line":17445},[127,84555,1584],{"class":147},[127,84557,275],{"class":140},[127,84559,51846],{"class":147},[127,84561,84562,84564,84566,84568,84570,84572],{"class":129,"line":17450},[127,84563,52679],{"class":147},[127,84565,52147],{"class":140},[127,84567,54021],{"class":143},[127,84569,725],{"class":147},[127,84571,63141],{"class":781},[127,84573,51846],{"class":147},[127,84575,84576,84578,84580],{"class":129,"line":17455},[127,84577,52952],{"class":147},[127,84579,52147],{"class":140},[127,84581,51846],{"class":147},[127,84583,84584,84586,84588,84590,84592,84594],{"class":129,"line":17468},[127,84585,52679],{"class":147},[127,84587,52147],{"class":140},[127,84589,54021],{"class":143},[127,84591,725],{"class":147},[127,84593,63113],{"class":781},[127,84595,51846],{"class":147},[127,84597,84598,84600,84602,84605,84607,84609,84611,84614,84616,84618,84620,84622],{"class":129,"line":17473},[127,84599,51880],{"class":147},[127,84601,52147],{"class":140},[127,84603,84604],{"class":147},">合计：\u003C",[127,84606,127],{"class":140},[127,84608,54021],{"class":143},[127,84610,725],{"class":147},[127,84612,84613],{"class":781},"\"amount\"",[127,84615,55848],{"class":147},[127,84617,127],{"class":140},[127,84619,55848],{"class":147},[127,84621,52147],{"class":140},[127,84623,51846],{"class":147},[127,84625,84626,84628,84630],{"class":129,"line":33173},[127,84627,52952],{"class":147},[127,84629,52147],{"class":140},[127,84631,51846],{"class":147},[127,84633,84634,84636,84638],{"class":129,"line":33179},[127,84635,52679],{"class":147},[127,84637,52348],{"class":140},[127,84639,51846],{"class":147},[127,84641,84642,84644,84646,84648],{"class":129,"line":33185},[127,84643,11763],{"class":290},[127,84645,79906],{"class":154},[127,84647,14106],{"class":290},[127,84649,55981],{"class":147},[127,84651,84652],{"class":129,"line":33191},[127,84653,79915],{"class":147},[127,84655,84656,84658,84660],{"class":129,"line":33197},[127,84657,79920],{"class":147},[127,84659,79923],{"class":781},[127,84661,32006],{"class":147},[127,84663,84664,84666,84668],{"class":129,"line":33208},[127,84665,79930],{"class":147},[127,84667,79933],{"class":781},[127,84669,32006],{"class":147},[127,84671,84672,84674,84677],{"class":129,"line":33214},[127,84673,79940],{"class":147},[127,84675,84676],{"class":154},"289.9",[127,84678,32006],{"class":147},[127,84680,84681,84683,84685],{"class":129,"line":33234},[127,84682,79950],{"class":147},[127,84684,79953],{"class":781},[127,84686,32006],{"class":147},[127,84688,84689,84692,84694],{"class":129,"line":33240},[127,84690,84691],{"class":147},"        count: ",[127,84693,530],{"class":154},[127,84695,32006],{"class":147},[127,84697,84698,84701,84704],{"class":129,"line":33251},[127,84699,84700],{"class":147},"        spec: { color: ",[127,84702,84703],{"class":781},"'白色'",[127,84705,56138],{"class":147},[127,84707,84708],{"class":129,"line":33257},[127,84709,78421],{"class":147},[127,84711,84712],{"class":129,"line":33263},[127,84713,79915],{"class":147},[127,84715,84716,84718,84720],{"class":129,"line":33269},[127,84717,79920],{"class":147},[127,84719,80014],{"class":781},[127,84721,32006],{"class":147},[127,84723,84724,84726,84728],{"class":129,"line":33275},[127,84725,79930],{"class":147},[127,84727,80023],{"class":781},[127,84729,32006],{"class":147},[127,84731,84732,84734,84737],{"class":129,"line":33281},[127,84733,79940],{"class":147},[127,84735,84736],{"class":154},"109.8",[127,84738,32006],{"class":147},[127,84740,84741,84743,84745],{"class":129,"line":33287},[127,84742,79950],{"class":147},[127,84744,80041],{"class":781},[127,84746,32006],{"class":147},[127,84748,84749,84751,84753],{"class":129,"line":33293},[127,84750,84691],{"class":147},[127,84752,749],{"class":154},[127,84754,32006],{"class":147},[127,84756,84757,84760,84762,84764,84766],{"class":129,"line":33313},[127,84758,84759],{"class":147},"        spec: { size: ",[127,84761,82432],{"class":781},[127,84763,55998],{"class":147},[127,84765,82437],{"class":781},[127,84767,56138],{"class":147},[127,84769,84770],{"class":129,"line":33319},[127,84771,78421],{"class":147},[127,84773,84774],{"class":129,"line":33335},[127,84775,79915],{"class":147},[127,84777,84778,84780,84782],{"class":129,"line":33341},[127,84779,79920],{"class":147},[127,84781,80058],{"class":781},[127,84783,32006],{"class":147},[127,84785,84786,84788,84790],{"class":129,"line":33355},[127,84787,79930],{"class":147},[127,84789,80067],{"class":781},[127,84791,32006],{"class":147},[127,84793,84794,84796,84799],{"class":129,"line":33361},[127,84795,79940],{"class":147},[127,84797,84798],{"class":154},"488",[127,84800,32006],{"class":147},[127,84802,84803,84805,84807],{"class":129,"line":33376},[127,84804,79950],{"class":147},[127,84806,80085],{"class":781},[127,84808,32006],{"class":147},[127,84810,84811,84813,84815],{"class":129,"line":33382},[127,84812,84691],{"class":147},[127,84814,893],{"class":154},[127,84816,32006],{"class":147},[127,84818,84819,84821,84824,84827,84830],{"class":129,"line":33391},[127,84820,84700],{"class":147},[127,84822,84823],{"class":781},"'青色'",[127,84825,84826],{"class":147},", sum: ",[127,84828,84829],{"class":781},"'一大四小'",[127,84831,56138],{"class":147},[127,84833,84834],{"class":129,"line":33397},[127,84835,78421],{"class":147},[127,84837,84838],{"class":129,"line":33406},[127,84839,79915],{"class":147},[127,84841,84842,84844,84846],{"class":129,"line":33412},[127,84843,79920],{"class":147},[127,84845,80102],{"class":781},[127,84847,32006],{"class":147},[127,84849,84850,84852,84854],{"class":129,"line":33418},[127,84851,79930],{"class":147},[127,84853,80111],{"class":781},[127,84855,32006],{"class":147},[127,84857,84858,84860,84863],{"class":129,"line":33427},[127,84859,79940],{"class":147},[127,84861,84862],{"class":154},"139",[127,84864,32006],{"class":147},[127,84866,84867,84869,84871],{"class":129,"line":33433},[127,84868,79950],{"class":147},[127,84870,80129],{"class":781},[127,84872,32006],{"class":147},[127,84874,84875,84877,84879],{"class":129,"line":33444},[127,84876,84691],{"class":147},[127,84878,893],{"class":154},[127,84880,32006],{"class":147},[127,84882,84883,84885,84888,84890,84893],{"class":129,"line":33450},[127,84884,84759],{"class":147},[127,84886,84887],{"class":781},"'小号'",[127,84889,55998],{"class":147},[127,84891,84892],{"class":781},"'紫色'",[127,84894,56004],{"class":147},[127,84896,84897,84900],{"class":129,"line":33469},[127,84898,84899],{"class":147},"        gift: ",[127,84901,84902],{"class":781},"'50g茶叶,清洗球'\n",[127,84904,84905],{"class":129,"line":33475},[127,84906,52933],{"class":147},[127,84908,84909],{"class":129,"line":33486},[127,84910,53644],{"class":147},[127,84912,84913],{"class":129,"line":33492},[127,84914,84915],{"class":133},"    \u002F\u002F  1.根据数据渲染页面\n",[127,84917,84918,84920,84922,84924,84926,84928,84930,84932,84934,84936,84938,84940],{"class":129,"line":33512},[127,84919,52942],{"class":147},[127,84921,54934],{"class":143},[127,84923,681],{"class":147},[127,84925,80430],{"class":781},[127,84927,74778],{"class":147},[127,84929,725],{"class":290},[127,84931,80577],{"class":147},[127,84933,74573],{"class":143},[127,84935,681],{"class":147},[127,84937,80324],{"class":5758},[127,84939,80327],{"class":290},[127,84941,148],{"class":147},[127,84943,84944],{"class":129,"line":33528},[127,84945,84946],{"class":133},"      \u002F\u002F 对象解构\n",[127,84948,84949,84951,84953,84955,84957,84959,84961,84964,84966,84968,84970,84973,84975,84978,84980,84982],{"class":129,"line":33534},[127,84950,58761],{"class":290},[127,84952,80336],{"class":147},[127,84954,80349],{"class":154},[127,84956,12977],{"class":147},[127,84958,80339],{"class":154},[127,84960,12977],{"class":147},[127,84962,84963],{"class":154},"count",[127,84965,12977],{"class":147},[127,84967,80344],{"class":154},[127,84969,12977],{"class":147},[127,84971,84972],{"class":154},"spec",[127,84974,12977],{"class":147},[127,84976,84977],{"class":154},"gift",[127,84979,80352],{"class":147},[127,84981,725],{"class":290},[127,84983,80357],{"class":147},[127,84985,84986],{"class":129,"line":33548},[127,84987,84988],{"class":133},"      \u002F\u002F 规格文字模块处理\n",[127,84990,84991,84993,84996,84998,85000,85002,85004,85006,85008,85010],{"class":129,"line":33554},[127,84992,58761],{"class":290},[127,84994,84995],{"class":154}," text",[127,84997,14106],{"class":290},[127,84999,82467],{"class":147},[127,85001,82470],{"class":143},[127,85003,82473],{"class":147},[127,85005,74752],{"class":143},[127,85007,681],{"class":147},[127,85009,82480],{"class":781},[127,85011,687],{"class":147},[127,85013,85014],{"class":129,"line":33560},[127,85015,85016],{"class":133},"      \u002F\u002F 处理赠品模块\n",[127,85018,85019,85021,85023,85025,85028,85030,85032,85034,85036,85039,85041,85043,85045,85047,85049,85052,85054,85057,85059,85061,85063,85065,85067,85069],{"class":129,"line":33571},[127,85020,58761],{"class":290},[127,85022,74448],{"class":154},[127,85024,14106],{"class":290},[127,85026,85027],{"class":147}," gift ",[127,85029,1660],{"class":290},[127,85031,83641],{"class":147},[127,85033,83644],{"class":143},[127,85035,681],{"class":147},[127,85037,85038],{"class":781},"','",[127,85040,31366],{"class":147},[127,85042,74573],{"class":143},[127,85044,681],{"class":147},[127,85046,80324],{"class":5758},[127,85048,80327],{"class":290},[127,85050,85051],{"class":781}," `\u003Cspan class=\"tag\">【赠品】${",[127,85053,80324],{"class":147},[127,85055,85056],{"class":781},"}\u003C\u002Fspan>`",[127,85058,31366],{"class":147},[127,85060,74752],{"class":143},[127,85062,681],{"class":147},[127,85064,74757],{"class":781},[127,85066,14256],{"class":147},[127,85068,1533],{"class":290},[127,85070,70637],{"class":781},[127,85072,85073],{"class":129,"line":33577},[127,85074,85075],{"class":133},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[127,85077,85078,85080,85083,85085,85088,85090,85092,85094,85097,85099,85101,85103,85106,85108,85110],{"class":129,"line":33583},[127,85079,58761],{"class":290},[127,85081,85082],{"class":154}," subtotal",[127,85084,14106],{"class":290},[127,85086,85087],{"class":147}," ((price ",[127,85089,1130],{"class":290},[127,85091,6296],{"class":154},[127,85093,7060],{"class":290},[127,85095,85096],{"class":147}," count) ",[127,85098,1259],{"class":290},[127,85100,6296],{"class":154},[127,85102,31366],{"class":147},[127,85104,85105],{"class":143},"toFixed",[127,85107,681],{"class":147},[127,85109,530],{"class":154},[127,85111,687],{"class":147},[127,85113,85114],{"class":129,"line":33593},[127,85115,2942],{"emptyLinePlaceholder":606},[127,85117,85118,85120],{"class":129,"line":33599},[127,85119,74511],{"class":290},[127,85121,70701],{"class":781},[127,85123,85124],{"class":129,"line":33610},[127,85125,85126],{"class":781},"        \u003Cdiv class=\"item\">\n",[127,85128,85129,85132,85134],{"class":129,"line":33616},[127,85130,85131],{"class":781},"          \u003Cimg src=\"${",[127,85133,80349],{"class":147},[127,85135,80381],{"class":781},[127,85137,85138,85141,85143,85146,85148],{"class":129,"line":33626},[127,85139,85140],{"class":781},"          \u003Cp class=\"name\">${",[127,85142,80339],{"class":147},[127,85144,85145],{"class":781},"}${",[127,85147,1844],{"class":147},[127,85149,80391],{"class":781},[127,85151,85152,85155,85157],{"class":129,"line":33631},[127,85153,85154],{"class":781},"          \u003Cp class=\"spec\">${",[127,85156,5729],{"class":147},[127,85158,80391],{"class":781},[127,85160,85161,85164,85166,85168,85170,85172,85174,85176],{"class":129,"line":33637},[127,85162,85163],{"class":781},"          \u003Cp class=\"price\">${",[127,85165,80344],{"class":147},[127,85167,1233],{"class":781},[127,85169,85105],{"class":143},[127,85171,681],{"class":781},[127,85173,530],{"class":154},[127,85175,1104],{"class":781},[127,85177,80391],{"class":781},[127,85179,85180,85183,85185],{"class":129,"line":33686},[127,85181,85182],{"class":781},"          \u003Cp class=\"count\">x${",[127,85184,84963],{"class":147},[127,85186,80391],{"class":781},[127,85188,85189,85192,85195],{"class":129,"line":33733},[127,85190,85191],{"class":781},"          \u003Cp class=\"sub-total\">${",[127,85193,85194],{"class":147},"subtotal",[127,85196,80391],{"class":781},[127,85198,85199],{"class":129,"line":33738},[127,85200,85201],{"class":781},"        \u003C\u002Fdiv> \n",[127,85203,85204],{"class":129,"line":33744},[127,85205,85206],{"class":781},"             `\n",[127,85208,85209,85212,85214,85216,85218],{"class":129,"line":33763},[127,85210,85211],{"class":147},"    }).",[127,85213,74752],{"class":143},[127,85215,681],{"class":147},[127,85217,74757],{"class":781},[127,85219,687],{"class":147},[127,85221,85222],{"class":129,"line":33769},[127,85223,85224],{"class":133},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[127,85226,85227,85229,85231,85233,85235,85238,85240,85243,85245,85247,85249,85252,85255,85257,85260,85262,85264,85266,85269,85271,85273,85275,85277],{"class":129,"line":33789},[127,85228,11763],{"class":290},[127,85230,63318],{"class":154},[127,85232,14106],{"class":290},[127,85234,80577],{"class":147},[127,85236,85237],{"class":143},"reduce",[127,85239,2918],{"class":147},[127,85241,85242],{"class":5758},"prev",[127,85244,12977],{"class":147},[127,85246,80324],{"class":5758},[127,85248,14256],{"class":147},[127,85250,85251],{"class":290},"=>",[127,85253,85254],{"class":147}," prev ",[127,85256,1156],{"class":290},[127,85258,85259],{"class":147}," (item.price ",[127,85261,1130],{"class":290},[127,85263,6296],{"class":154},[127,85265,7060],{"class":290},[127,85267,85268],{"class":147}," item.count) ",[127,85270,1259],{"class":290},[127,85272,6296],{"class":154},[127,85274,12977],{"class":147},[127,85276,867],{"class":154},[127,85278,687],{"class":147},[127,85280,85281,85283,85285,85287,85290,85292,85294,85297,85299,85301,85303],{"class":129,"line":33795},[127,85282,52942],{"class":147},[127,85284,54934],{"class":143},[127,85286,681],{"class":147},[127,85288,85289],{"class":781},"'.amount'",[127,85291,74778],{"class":147},[127,85293,725],{"class":290},[127,85295,85296],{"class":147}," total.",[127,85298,85105],{"class":143},[127,85300,681],{"class":147},[127,85302,530],{"class":154},[127,85304,687],{"class":147},[127,85306,85307,85309,85311],{"class":129,"line":33801},[127,85308,52952],{"class":147},[127,85310,52348],{"class":140},[127,85312,51846],{"class":147},[127,85314,85315,85317,85319],{"class":129,"line":33811},[127,85316,52321],{"class":147},[127,85318,275],{"class":140},[127,85320,51846],{"class":147},[127,85322,85323],{"class":129,"line":33816},[127,85324,2942],{"emptyLinePlaceholder":606},[127,85326,85327,85329,85331],{"class":129,"line":33822},[127,85328,52321],{"class":147},[127,85330,51175],{"class":140},[127,85332,51846],{"class":147},[14,85334,85336],{"id":85335},"_411-编程思想","4.11 编程思想",[62,85338,85340],{"id":85339},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85342,85343,85346],{},[30,85344,85345],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85348,85349],{},"调用就可以了",[19,85351,85352],{},[23,85353],{"alt":122,"src":85354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[62,85356,85358],{"id":85357},"_4112-面向对象","4.11.2 面向对象",[19,85360,85361],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85363,85364],{},[23,85365],{"alt":122,"src":85366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85368,85369],{},"面向对象的特性：",[1681,85371,85372,85375,85378],{},[635,85373,85374],{},"封装性",[635,85376,85377],{},"继承性",[635,85379,85380],{},"多态性",[62,85382,85384],{"id":85383},"_4113-两者比较","4.11.3 两者比较",[19,85386,85387],{},[23,85388],{"alt":122,"src":85389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85391,85393],{"id":85392},"_412-构造函数回顾","4.12 构造函数回顾",[19,85395,85396],{},[23,85397],{"alt":122,"src":85398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85400,85401],{},[23,85402],{"alt":122,"src":85403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85405,85406],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85408,85409],{},[23,85410],{"alt":122,"src":85411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85413,85415],{"id":85414},"_413-原型","4.13 原型",[62,85417,85419],{"id":85418},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85421,85422],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85424,85425],{},[23,85426],{"alt":122,"src":85427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85429,85430],{},[23,85431],{"alt":122,"src":85432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85434,85435],{},"原型是构造函数的属性，它也是一个对象",[19,85437,85438],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85440,85441],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[117,85443,85445],{"className":53602,"code":85444,"language":53604,"meta":122,"style":122},"\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",[124,85446,85447,85455,85460,85468,85473,85478,85483,85488,85493,85497,85501,85505,85510,85515,85519,85524,85529,85534,85539,85544,85548,85556],{"__ignoreMap":122},[127,85448,85449,85451,85453],{"class":129,"line":130},[127,85450,1584],{"class":147},[127,85452,275],{"class":140},[127,85454,51846],{"class":147},[127,85456,85457],{"class":129,"line":137},[127,85458,85459],{"class":133},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[127,85461,85462,85464,85466],{"class":129,"line":151},[127,85463,52679],{"class":147},[127,85465,52348],{"class":140},[127,85467,51846],{"class":147},[127,85469,85470],{"class":129,"line":167},[127,85471,85472],{"class":147},"    function Star(uname, age) {\n",[127,85474,85475],{"class":129,"line":415},[127,85476,85477],{"class":147},"      this.uname = uname,\n",[127,85479,85480],{"class":129,"line":421},[127,85481,85482],{"class":147},"        this.age = age\n",[127,85484,85485],{"class":129,"line":1766},[127,85486,85487],{"class":147},"      \u002F\u002F this.sing = function () {\n",[127,85489,85490],{"class":129,"line":1856},[127,85491,85492],{"class":147},"      \u002F\u002F   console.log('唱歌')\n",[127,85494,85495],{"class":129,"line":1862},[127,85496,2942],{"emptyLinePlaceholder":606},[127,85498,85499],{"class":129,"line":1874},[127,85500,60570],{"class":147},[127,85502,85503],{"class":129,"line":2155},[127,85504,2729],{"class":147},[127,85506,85507],{"class":129,"line":2160},[127,85508,85509],{"class":147},"    Star.prototype.sing = function () {\n",[127,85511,85512],{"class":129,"line":2166},[127,85513,85514],{"class":147},"      console.log('唱歌')\n",[127,85516,85517],{"class":129,"line":2171},[127,85518,2729],{"class":147},[127,85520,85521],{"class":129,"line":2185},[127,85522,85523],{"class":147},"    \u002F\u002F console.dir(Star.prototype)\n",[127,85525,85526],{"class":129,"line":2190},[127,85527,85528],{"class":147},"    const pink = new Star('pink', 18)\n",[127,85530,85531],{"class":129,"line":2196},[127,85532,85533],{"class":147},"    const red = new Star('red', 20)\n",[127,85535,85536],{"class":129,"line":2217},[127,85537,85538],{"class":147},"    pink.sing()\n",[127,85540,85541],{"class":129,"line":2222},[127,85542,85543],{"class":147},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[127,85545,85546],{"class":129,"line":2236},[127,85547,2942],{"emptyLinePlaceholder":606},[127,85549,85550,85552,85554],{"class":129,"line":2241},[127,85551,52952],{"class":147},[127,85553,52348],{"class":140},[127,85555,51846],{"class":147},[127,85557,85558,85560,85562],{"class":129,"line":2270},[127,85559,52321],{"class":147},[127,85561,275],{"class":140},[127,85563,51846],{"class":147},[19,85565,85566],{},[23,85567],{"alt":122,"src":85568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[117,85570,85572],{"className":53602,"code":85571,"language":53604,"meta":122,"style":122},"\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",[124,85573,85574,85582,85590,85595,85600,85605,85610,85614,85619,85624,85629,85633,85638,85642,85646,85651,85655,85663],{"__ignoreMap":122},[127,85575,85576,85578,85580],{"class":129,"line":130},[127,85577,1584],{"class":147},[127,85579,275],{"class":140},[127,85581,51846],{"class":147},[127,85583,85584,85586,85588],{"class":129,"line":137},[127,85585,52679],{"class":147},[127,85587,52348],{"class":140},[127,85589,51846],{"class":147},[127,85591,85592],{"class":129,"line":151},[127,85593,85594],{"class":147},"    let that\n",[127,85596,85597],{"class":129,"line":167},[127,85598,85599],{"class":147},"    function Star(uname) {\n",[127,85601,85602],{"class":129,"line":415},[127,85603,85604],{"class":147},"      this.uname = uname\n",[127,85606,85607],{"class":129,"line":421},[127,85608,85609],{"class":147},"      that = this\n",[127,85611,85612],{"class":129,"line":1766},[127,85613,2729],{"class":147},[127,85615,85616],{"class":129,"line":1856},[127,85617,85618],{"class":147},"    \u002F\u002F 实例对象是 ldh\n",[127,85620,85621],{"class":129,"line":1862},[127,85622,85623],{"class":147},"    const ldh = new Star('刘德华')\n",[127,85625,85626],{"class":129,"line":1874},[127,85627,85628],{"class":147},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[127,85630,85631],{"class":129,"line":2155},[127,85632,2942],{"emptyLinePlaceholder":606},[127,85634,85635],{"class":129,"line":2160},[127,85636,85637],{"class":147},"    Star.sing = function () {\n",[127,85639,85640],{"class":129,"line":2166},[127,85641,85514],{"class":147},[127,85643,85644],{"class":129,"line":2171},[127,85645,2729],{"class":147},[127,85647,85648],{"class":129,"line":2185},[127,85649,85650],{"class":147},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[127,85652,85653],{"class":129,"line":2190},[127,85654,2942],{"emptyLinePlaceholder":606},[127,85656,85657,85659,85661],{"class":129,"line":2196},[127,85658,52952],{"class":147},[127,85660,52348],{"class":140},[127,85662,51846],{"class":147},[127,85664,85665,85667,85669],{"class":129,"line":2217},[127,85666,52321],{"class":147},[127,85668,275],{"class":140},[127,85670,51846],{"class":147},[19,85672,85673],{},"构造函数的this指向的是实例对象；",[19,85675,85676],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[62,85678,85680],{"id":85679},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85682,85683],{},[23,85684],{"alt":122,"src":85685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[117,85687,85689],{"className":53602,"code":85688,"language":53604,"meta":122,"style":122},"\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",[124,85690,85691,85699,85707,85712,85717,85722,85727,85732,85737,85742,85747,85752,85757,85761,85766,85771,85776,85781,85785,85790,85795,85800,85805,85809,85814,85819,85824,85829,85833,85838,85842,85850],{"__ignoreMap":122},[127,85692,85693,85695,85697],{"class":129,"line":130},[127,85694,1584],{"class":147},[127,85696,275],{"class":140},[127,85698,51846],{"class":147},[127,85700,85701,85703,85705],{"class":129,"line":137},[127,85702,52679],{"class":147},[127,85704,52348],{"class":140},[127,85706,51846],{"class":147},[127,85708,85709],{"class":129,"line":151},[127,85710,85711],{"class":147},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[127,85713,85714],{"class":129,"line":167},[127,85715,85716],{"class":147},"    const arr = [1, 2, 3]\n",[127,85718,85719],{"class":129,"line":415},[127,85720,85721],{"class":147},"    \u002F\u002F 自己定义数组的扩展方法\n",[127,85723,85724],{"class":129,"line":421},[127,85725,85726],{"class":147},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[127,85728,85729],{"class":129,"line":1766},[127,85730,85731],{"class":147},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[127,85733,85734],{"class":129,"line":1856},[127,85735,85736],{"class":147},"    \u002F\u002F ①.最大值\n",[127,85738,85739],{"class":129,"line":1862},[127,85740,85741],{"class":147},"    Array.prototype.max = function () {\n",[127,85743,85744],{"class":129,"line":1874},[127,85745,85746],{"class":147},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[127,85748,85749],{"class":129,"line":2155},[127,85750,85751],{"class":147},"      return Math.max(...this)\n",[127,85753,85754],{"class":129,"line":2160},[127,85755,85756],{"class":147},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[127,85758,85759],{"class":129,"line":2166},[127,85760,2729],{"class":147},[127,85762,85763],{"class":129,"line":2171},[127,85764,85765],{"class":147},"    console.log(arr.max())\n",[127,85767,85768],{"class":129,"line":2185},[127,85769,85770],{"class":147},"    \u002F\u002F ②最小值\n",[127,85772,85773],{"class":129,"line":2190},[127,85774,85775],{"class":147},"    Array.prototype.min = function () {\n",[127,85777,85778],{"class":129,"line":2196},[127,85779,85780],{"class":147},"      return Math.min(...this)\n",[127,85782,85783],{"class":129,"line":2217},[127,85784,2729],{"class":147},[127,85786,85787],{"class":129,"line":2222},[127,85788,85789],{"class":147},"    console.log(arr.min())\n",[127,85791,85792],{"class":129,"line":2236},[127,85793,85794],{"class":147},"    \u002F\u002F③求和\n",[127,85796,85797],{"class":129,"line":2241},[127,85798,85799],{"class":147},"    Array.prototype.sum = function () {\n",[127,85801,85802],{"class":129,"line":2270},[127,85803,85804],{"class":147},"      return this.reduce((prev, current) => prev + current, 0)\n",[127,85806,85807],{"class":129,"line":2275},[127,85808,2729],{"class":147},[127,85810,85811],{"class":129,"line":2292},[127,85812,85813],{"class":147},"    console.log(arr.sum())\n",[127,85815,85816],{"class":129,"line":2297},[127,85817,85818],{"class":147},"    \u002F\u002F ③排序\n",[127,85820,85821],{"class":129,"line":2302},[127,85822,85823],{"class":147},"    Array.prototype.rever = function () {\n",[127,85825,85826],{"class":129,"line":2307},[127,85827,85828],{"class":147},"      return this.reverse()\n",[127,85830,85831],{"class":129,"line":2321},[127,85832,2729],{"class":147},[127,85834,85835],{"class":129,"line":2326},[127,85836,85837],{"class":147},"    console.log(arr.rever())\n",[127,85839,85840],{"class":129,"line":3119},[127,85841,2942],{"emptyLinePlaceholder":606},[127,85843,85844,85846,85848],{"class":129,"line":3133},[127,85845,52952],{"class":147},[127,85847,52348],{"class":140},[127,85849,51846],{"class":147},[127,85851,85852,85854,85856],{"class":129,"line":3141},[127,85853,52321],{"class":147},[127,85855,275],{"class":140},[127,85857,51846],{"class":147},[19,85859,85860],{},[23,85861],{"alt":122,"src":85862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[62,85864,85866],{"id":85865},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85868,85869],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85871,85872],{},[23,85873],{"alt":122,"src":85874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[117,85876,85878],{"className":53602,"code":85877,"language":53604,"meta":122,"style":122},"\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",[124,85879,85880,85888,85896,85901,85906,85910,85915,85920,85925,85933],{"__ignoreMap":122},[127,85881,85882,85884,85886],{"class":129,"line":130},[127,85883,1584],{"class":147},[127,85885,275],{"class":140},[127,85887,51846],{"class":147},[127,85889,85890,85892,85894],{"class":129,"line":137},[127,85891,52679],{"class":147},[127,85893,52348],{"class":140},[127,85895,51846],{"class":147},[127,85897,85898],{"class":129,"line":151},[127,85899,85900],{"class":147},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[127,85902,85903],{"class":129,"line":167},[127,85904,85905],{"class":147},"    function Star() {\n",[127,85907,85908],{"class":129,"line":415},[127,85909,2729],{"class":147},[127,85911,85912],{"class":129,"line":421},[127,85913,85914],{"class":147},"    const ldh = new Star()\n",[127,85916,85917],{"class":129,"line":1766},[127,85918,85919],{"class":147},"    console.log(Star.prototype)\n",[127,85921,85922],{"class":129,"line":1856},[127,85923,85924],{"class":147},"    console.log(Star.prototype.constructor === Star)\n",[127,85926,85927,85929,85931],{"class":129,"line":1862},[127,85928,52952],{"class":147},[127,85930,52348],{"class":140},[127,85932,51846],{"class":147},[127,85934,85935,85937,85939],{"class":129,"line":1874},[127,85936,52321],{"class":147},[127,85938,275],{"class":140},[127,85940,51846],{"class":147},[19,85942,85943],{},[23,85944],{"alt":122,"src":85945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85947,85948],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[117,85950,85952],{"className":53602,"code":85951,"language":53604,"meta":122,"style":122},"  \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",[124,85953,85954,85962,85966,85970,85974,85979,85984,85989,85993,85998,86003,86008,86013,86018,86023,86027,86031,86036,86041,86046,86050,86055,86060,86064,86068,86072],{"__ignoreMap":122},[127,85955,85956,85958,85960],{"class":129,"line":130},[127,85957,52679],{"class":147},[127,85959,52348],{"class":140},[127,85961,51846],{"class":147},[127,85963,85964],{"class":129,"line":137},[127,85965,85900],{"class":147},[127,85967,85968],{"class":129,"line":151},[127,85969,85905],{"class":147},[127,85971,85972],{"class":129,"line":167},[127,85973,2729],{"class":147},[127,85975,85976],{"class":129,"line":415},[127,85977,85978],{"class":147},"    \u002F\u002F const ldh = new Star()\n",[127,85980,85981],{"class":129,"line":421},[127,85982,85983],{"class":147},"    \u002F\u002F console.log(Star.prototype)\n",[127,85985,85986],{"class":129,"line":1766},[127,85987,85988],{"class":147},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[127,85990,85991],{"class":129,"line":1856},[127,85992,2942],{"emptyLinePlaceholder":606},[127,85994,85995],{"class":129,"line":1862},[127,85996,85997],{"class":147},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[127,85999,86000],{"class":129,"line":1874},[127,86001,86002],{"class":147},"    \u002F\u002F Star.prototype.sing = function () {\n",[127,86004,86005],{"class":129,"line":2155},[127,86006,86007],{"class":147},"    \u002F\u002F   console.log('唱歌')\n",[127,86009,86010],{"class":129,"line":2160},[127,86011,86012],{"class":147},"    \u002F\u002F }\n",[127,86014,86015],{"class":129,"line":2166},[127,86016,86017],{"class":147},"    \u002F\u002F Star.prototype.dance = function () {\n",[127,86019,86020],{"class":129,"line":2171},[127,86021,86022],{"class":147},"    \u002F\u002F   console.log('跳舞')\n",[127,86024,86025],{"class":129,"line":2185},[127,86026,86012],{"class":147},[127,86028,86029],{"class":129,"line":2190},[127,86030,85919],{"class":147},[127,86032,86033],{"class":129,"line":2196},[127,86034,86035],{"class":147},"    Star.prototype = {\n",[127,86037,86038],{"class":129,"line":2217},[127,86039,86040],{"class":147},"      sing: function () {\n",[127,86042,86043],{"class":129,"line":2222},[127,86044,86045],{"class":147},"        console.log('唱歌')\n",[127,86047,86048],{"class":129,"line":2236},[127,86049,78421],{"class":147},[127,86051,86052],{"class":129,"line":2241},[127,86053,86054],{"class":147},"      dance: function () {\n",[127,86056,86057],{"class":129,"line":2270},[127,86058,86059],{"class":147},"        console.log('跳舞')\n",[127,86061,86062],{"class":129,"line":2275},[127,86063,52933],{"class":147},[127,86065,86066],{"class":129,"line":2292},[127,86067,2729],{"class":147},[127,86069,86070],{"class":129,"line":2297},[127,86071,85919],{"class":147},[127,86073,86074,86076,86078],{"class":129,"line":2302},[127,86075,52952],{"class":147},[127,86077,52348],{"class":140},[127,86079,51846],{"class":147},[19,86081,86082],{},"进行输出结果后会发现：",[19,86084,86085],{},[23,86086],{"alt":122,"src":86087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86089,86090],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86092,86093],{},"所以，要重新指回创造这个原型对象的构造函数",[117,86095,86097],{"className":71742,"code":86096,"language":71744,"meta":122,"style":122},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[124,86098,86099,86113,86118,86123,86134,86147,86152,86163,86177,86181],{"__ignoreMap":122},[127,86100,86101,86104,86106,86109,86111],{"class":129,"line":130},[127,86102,86103],{"class":154},"Star",[127,86105,1233],{"class":147},[127,86107,86108],{"class":154},"prototype",[127,86110,14106],{"class":290},[127,86112,148],{"class":147},[127,86114,86115],{"class":129,"line":137},[127,86116,86117],{"class":133},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[127,86119,86120],{"class":129,"line":151},[127,86121,86122],{"class":147},"  constructor: Star,\n",[127,86124,86125,86128,86130,86132],{"class":129,"line":167},[127,86126,86127],{"class":143},"  sing",[127,86129,158],{"class":147},[127,86131,54984],{"class":290},[127,86133,54987],{"class":147},[127,86135,86136,86138,86140,86142,86145],{"class":129,"line":415},[127,86137,74282],{"class":147},[127,86139,58780],{"class":143},[127,86141,681],{"class":147},[127,86143,86144],{"class":781},"'唱歌'",[127,86146,687],{"class":147},[127,86148,86149],{"class":129,"line":421},[127,86150,86151],{"class":147},"   },\n",[127,86153,86154,86157,86159,86161],{"class":129,"line":1766},[127,86155,86156],{"class":143},"   dance",[127,86158,158],{"class":147},[127,86160,54984],{"class":290},[127,86162,54987],{"class":147},[127,86164,86165,86168,86170,86172,86175],{"class":129,"line":1856},[127,86166,86167],{"class":147},"     console.",[127,86169,58780],{"class":143},[127,86171,681],{"class":147},[127,86173,86174],{"class":781},"'跳舞'",[127,86176,687],{"class":147},[127,86178,86179],{"class":129,"line":1862},[127,86180,4851],{"class":147},[127,86182,86183],{"class":129,"line":1874},[127,86184,170],{"class":147},[19,86186,86187],{},[23,86188],{"alt":122,"src":86189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86191,86192],{},"总结1：",[19,86194,86195],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86197,86198],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86200,86201],{},"constructor指的是他的来源",[19,86203,86204],{},[23,86205],{"alt":122,"src":86206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86208,86209],{},[23,86210],{"alt":122,"src":86211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86213,86214],{},"总结2：",[19,86216,86217],{},[23,86218],{"alt":122,"src":86219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86221,86222],{},[23,86223],{"alt":122,"src":86224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86226,86227],{},[23,86228],{"alt":122,"src":86229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[62,86231,86233],{"id":86232},"_4134-对象原型","4.13.4 对象原型",[19,86235,86236],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86238,86239],{},"对象原型就是__proto__这个属性",[19,86241,86242],{},[23,86243],{"alt":122,"src":86244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86246,86247],{},[23,86248],{"alt":122,"src":86249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86251,86252],{},[23,86253],{"alt":122,"src":86254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86256,86257],{},[23,86258],{"alt":122,"src":86259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[117,86261,86263],{"className":53602,"code":86262,"language":53604,"meta":122,"style":122},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[124,86264,86265,86273,86281,86285,86289,86293,86298,86306],{"__ignoreMap":122},[127,86266,86267,86269,86271],{"class":129,"line":130},[127,86268,1584],{"class":147},[127,86270,275],{"class":140},[127,86272,51846],{"class":147},[127,86274,86275,86277,86279],{"class":129,"line":137},[127,86276,52679],{"class":147},[127,86278,52348],{"class":140},[127,86280,51846],{"class":147},[127,86282,86283],{"class":129,"line":151},[127,86284,85905],{"class":147},[127,86286,86287],{"class":129,"line":167},[127,86288,2729],{"class":147},[127,86290,86291],{"class":129,"line":415},[127,86292,85914],{"class":147},[127,86294,86295],{"class":129,"line":421},[127,86296,86297],{"class":147},"    console.log(ldh)\n",[127,86299,86300,86302,86304],{"class":129,"line":1766},[127,86301,52952],{"class":147},[127,86303,52348],{"class":140},[127,86305,51846],{"class":147},[127,86307,86308,86310,86312],{"class":129,"line":1856},[127,86309,52321],{"class":147},[127,86311,275],{"class":140},[127,86313,51846],{"class":147},[19,86315,86316],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86318,86319],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86321,86322],{},[23,86323],{"alt":122,"src":86324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86326,86327],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86329,86330],{},"对象原型指向原型对象",[19,86332,86333],{},[23,86334],{"alt":122,"src":86335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86337,86338],{},[23,86339],{"alt":122,"src":86340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86342,86343],{},[23,86344],{"alt":122,"src":86345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[62,86347,86349],{"id":86348},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86351,86352],{},[23,86353],{"alt":122,"src":86354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[632,86356,86357,86360,86363,86366],{},[635,86358,86359],{},"构造函数通过new的形式实例化得到实例对象",[635,86361,86362],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[635,86364,86365],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[635,86367,86368],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86370,86371],{},[23,86372],{"alt":122,"src":86373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86375,86376],{},"题目梳理：",[19,86378,86379],{},[23,86380],{"alt":122,"src":86381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[62,86383,86385],{"id":86384},"_4136-原型继承","4.13.6 原型继承",[19,86387,86388],{},[23,86389],{"alt":122,"src":86390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86392,86393],{},[23,86394],{"alt":122,"src":86395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86397,86398],{},[23,86399],{"alt":122,"src":86400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86402,86403],{},[23,86404],{"alt":122,"src":86405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86407,86408],{},[23,86409],{"alt":122,"src":86410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86412,86413],{},[23,86414],{"alt":122,"src":86415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86417,86418],{},[23,86419],{"alt":122,"src":86420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86422,86423],{},[23,86424],{"alt":122,"src":86425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86427,86428],{},"回顾：构造函数每次new得到对象都是不同的",[62,86430,86432],{"id":86431},"_4137-原型链","4.13.7 原型链",[19,86434,86435],{},[23,86436],{"alt":122,"src":86437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86439,86440],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86442,86443],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86445,86446],{},"大哥是Object",[19,86448,86449],{},[23,86450],{"alt":122,"src":86451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86453,86454],{},[23,86455],{"alt":122,"src":86456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86458,86459],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86461,86462],{},"万物皆对象",[62,86464,86466],{"id":86465},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86468,86469],{},"模态框",[19,86471,86472],{},"以后遇见这个效果直接使用这个就行",[19,86474,86475],{},[23,86476],{"alt":122,"src":86477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86479,86480],{},[23,86481],{"alt":122,"src":86482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86484,86485],{},[23,86486],{"alt":122,"src":86487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86489,86490],{},[23,86491],{"alt":122,"src":86492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86494,86495],{},"补充知识点：",[632,86497,86498],{},[635,86499,86500],{},"append()",[19,86502,86503],{},[23,86504],{"alt":122,"src":86505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[117,86507,86509],{"className":51173,"code":86508,"language":51175,"meta":122,"style":122},"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",[124,86510,86511,86516,86521,86526,86530,86534,86538,86543,86548,86553,86557],{"__ignoreMap":122},[127,86512,86513],{"class":129,"line":130},[127,86514,86515],{"class":147},"append(param1)\n",[127,86517,86518],{"class":129,"line":137},[127,86519,86520],{"class":147},"append(param1, param2)\n",[127,86522,86523],{"class":129,"line":151},[127,86524,86525],{"class":147},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[127,86527,86528],{"class":129,"line":167},[127,86529,2942],{"emptyLinePlaceholder":606},[127,86531,86532],{"class":129,"line":415},[127,86533,2942],{"emptyLinePlaceholder":606},[127,86535,86536],{"class":129,"line":421},[127,86537,2942],{"emptyLinePlaceholder":606},[127,86539,86540],{"class":129,"line":1766},[127,86541,86542],{"class":147},"let div = document.createElement(\"div\");\n",[127,86544,86545],{"class":129,"line":1856},[127,86546,86547],{"class":147},"let p = document.createElement(\"p\");\n",[127,86549,86550],{"class":129,"line":1862},[127,86551,86552],{"class":147},"div.append(p);\n",[127,86554,86555],{"class":129,"line":1874},[127,86556,2942],{"emptyLinePlaceholder":606},[127,86558,86559,86562,86564],{"class":129,"line":2155},[127,86560,86561],{"class":147},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[127,86563,19],{"class":140},[127,86565,86566],{"class":147},"> ]\n",[632,86568,86569],{"start":137},[635,86570,86571],{},"remove()",[19,86573,86574],{},"自己删自己",[19,86576,86577],{},[23,86578],{"alt":122,"src":86579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[117,86581,86583],{"className":51173,"code":86582,"language":51175,"meta":122,"style":122},"\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",[124,86584,86585,86595,86609,86613,86621,86635,86655,86667,86675,86682,86694,86707,86742,86754,86765,86777,86789,86801,86828,86838,86842,86846,86855,86867,86881,86891,86903,86907,86911,86921,86932,86942,86952,86965,86978,86988,86992,86996,87005,87015,87027,87031,87035,87044,87054,87064,87076,87080,87084,87094,87110,87121,87131,87141,87153,87165,87177,87181,87185,87198,87209,87213,87221,87229,87233,87241,87261,87281,87289,87294,87320,87325,87330,87349,87354,87366,87371,87382,87392,87402,87407,87412,87416,87421,87426,87431,87451,87456,87476,87481,87495,87500,87505,87510,87526,87530,87535,87564,87569,87574,87579,87590,87594,87598,87602,87607,87632,87637,87662,87667,87676,87680,87685,87710,87714,87739,87743,87752,87756,87761,87779,87789,87793,87801,87809,87813],{"__ignoreMap":122},[127,86586,86587,86589,86591,86593],{"class":129,"line":130},[127,86588,51837],{"class":147},[127,86590,51840],{"class":140},[127,86592,51843],{"class":143},[127,86594,51846],{"class":147},[127,86596,86597,86599,86601,86603,86605,86607],{"class":129,"line":137},[127,86598,1584],{"class":147},[127,86600,51175],{"class":140},[127,86602,51855],{"class":143},[127,86604,725],{"class":147},[127,86606,51860],{"class":781},[127,86608,51846],{"class":147},[127,86610,86611],{"class":129,"line":151},[127,86612,2942],{"emptyLinePlaceholder":606},[127,86614,86615,86617,86619],{"class":129,"line":167},[127,86616,1584],{"class":147},[127,86618,51873],{"class":140},[127,86620,51846],{"class":147},[127,86622,86623,86625,86627,86629,86631,86633],{"class":129,"line":415},[127,86624,52679],{"class":147},[127,86626,51883],{"class":140},[127,86628,51886],{"class":143},[127,86630,725],{"class":147},[127,86632,51891],{"class":781},[127,86634,51846],{"class":147},[127,86636,86637,86639,86641,86643,86645,86647,86649,86651,86653],{"class":129,"line":421},[127,86638,52679],{"class":147},[127,86640,51883],{"class":140},[127,86642,15462],{"class":143},[127,86644,725],{"class":147},[127,86646,51930],{"class":781},[127,86648,51910],{"class":143},[127,86650,725],{"class":147},[127,86652,51937],{"class":781},[127,86654,51846],{"class":147},[127,86656,86657,86659,86661,86663,86665],{"class":129,"line":1766},[127,86658,52679],{"class":147},[127,86660,51946],{"class":140},[127,86662,51949],{"class":147},[127,86664,51946],{"class":140},[127,86666,51846],{"class":147},[127,86668,86669,86671,86673],{"class":129,"line":1856},[127,86670,52679],{"class":147},[127,86672,575],{"class":140},[127,86674,51846],{"class":147},[127,86676,86677,86680],{"class":129,"line":1862},[127,86678,86679],{"class":143},"    .modal",[127,86681,148],{"class":147},[127,86683,86684,86686,86688,86690,86692],{"class":129,"line":1874},[127,86685,55305],{"class":154},[127,86687,158],{"class":147},[127,86689,4515],{"class":154},[127,86691,291],{"class":290},[127,86693,164],{"class":147},[127,86695,86696,86699,86701,86703,86705],{"class":129,"line":2155},[127,86697,86698],{"class":154},"      min-height",[127,86700,158],{"class":147},[127,86702,986],{"class":154},[127,86704,291],{"class":290},[127,86706,164],{"class":147},[127,86708,86709,86711,86713,86715,86717,86719,86721,86723,86725,86727,86729,86731,86733,86735,86737,86740],{"class":129,"line":2160},[127,86710,79279],{"class":154},[127,86712,158],{"class":147},[127,86714,867],{"class":154},[127,86716,4635],{"class":154},[127,86718,2580],{"class":154},[127,86720,291],{"class":290},[127,86722,79296],{"class":154},[127,86724,681],{"class":147},[127,86726,867],{"class":154},[127,86728,12977],{"class":147},[127,86730,867],{"class":154},[127,86732,12977],{"class":147},[127,86734,867],{"class":154},[127,86736,12977],{"class":147},[127,86738,86739],{"class":154},"0.1",[127,86741,3261],{"class":147},[127,86743,86744,86746,86748,86750,86752],{"class":129,"line":2166},[127,86745,55668],{"class":154},[127,86747,158],{"class":147},[127,86749,968],{"class":154},[127,86751,291],{"class":290},[127,86753,164],{"class":147},[127,86755,86756,86758,86760,86763],{"class":129,"line":2171},[127,86757,55293],{"class":154},[127,86759,158],{"class":147},[127,86761,86762],{"class":154},"fixed",[127,86764,164],{"class":147},[127,86766,86767,86770,86772,86775],{"class":129,"line":2185},[127,86768,86769],{"class":154},"      z-index",[127,86771,158],{"class":147},[127,86773,86774],{"class":154},"999",[127,86776,164],{"class":147},[127,86778,86779,86781,86783,86785,86787],{"class":129,"line":2190},[127,86780,55372],{"class":154},[127,86782,158],{"class":147},[127,86784,1330],{"class":154},[127,86786,1003],{"class":290},[127,86788,164],{"class":147},[127,86790,86791,86793,86795,86797,86799],{"class":129,"line":2196},[127,86792,55481],{"class":154},[127,86794,158],{"class":147},[127,86796,1330],{"class":154},[127,86798,1003],{"class":290},[127,86800,164],{"class":147},[127,86802,86803,86805,86807,86809,86811,86814,86816,86818,86820,86822,86824,86826],{"class":129,"line":2217},[127,86804,79320],{"class":154},[127,86806,158],{"class":147},[127,86808,79325],{"class":154},[127,86810,681],{"class":147},[127,86812,86813],{"class":154},"-50",[127,86815,1003],{"class":290},[127,86817,12977],{"class":147},[127,86819,86813],{"class":154},[127,86821,1003],{"class":290},[127,86823,12977],{"class":147},[127,86825,867],{"class":154},[127,86827,3261],{"class":147},[127,86829,86830,86832,86834,86836],{"class":129,"line":2222},[127,86831,55418],{"class":154},[127,86833,158],{"class":147},[127,86835,61375],{"class":154},[127,86837,164],{"class":147},[127,86839,86840],{"class":129,"line":2236},[127,86841,2729],{"class":147},[127,86843,86844],{"class":129,"line":2241},[127,86845,2942],{"emptyLinePlaceholder":606},[127,86847,86848,86850,86853],{"class":129,"line":2270},[127,86849,86679],{"class":143},[127,86851,86852],{"class":143}," .header",[127,86854,148],{"class":147},[127,86856,86857,86859,86861,86863,86865],{"class":129,"line":2275},[127,86858,57893],{"class":154},[127,86860,158],{"class":147},[127,86862,1076],{"class":154},[127,86864,291],{"class":290},[127,86866,164],{"class":147},[127,86868,86869,86871,86873,86875,86877,86879],{"class":129,"line":2292},[127,86870,55230],{"class":154},[127,86872,158],{"class":147},[127,86874,867],{"class":154},[127,86876,2580],{"class":154},[127,86878,291],{"class":290},[127,86880,164],{"class":147},[127,86882,86883,86885,86887,86889],{"class":129,"line":2297},[127,86884,55293],{"class":154},[127,86886,158],{"class":147},[127,86888,55298],{"class":154},[127,86890,164],{"class":147},[127,86892,86893,86895,86897,86899,86901],{"class":129,"line":2302},[127,86894,55456],{"class":154},[127,86896,158],{"class":147},[127,86898,1374],{"class":154},[127,86900,291],{"class":290},[127,86902,164],{"class":147},[127,86904,86905],{"class":129,"line":2307},[127,86906,2729],{"class":147},[127,86908,86909],{"class":129,"line":2321},[127,86910,2942],{"emptyLinePlaceholder":606},[127,86912,86913,86915,86917,86919],{"class":129,"line":2326},[127,86914,86679],{"class":143},[127,86916,86852],{"class":143},[127,86918,3574],{"class":140},[127,86920,148],{"class":147},[127,86922,86923,86926,86928,86930],{"class":129,"line":3119},[127,86924,86925],{"class":154},"      font-style",[127,86927,158],{"class":147},[127,86929,64374],{"class":154},[127,86931,164],{"class":147},[127,86933,86934,86936,86938,86940],{"class":129,"line":3133},[127,86935,57950],{"class":154},[127,86937,158],{"class":147},[127,86939,62603],{"class":154},[127,86941,164],{"class":147},[127,86943,86944,86946,86948,86950],{"class":129,"line":3141},[127,86945,55293],{"class":154},[127,86947,158],{"class":147},[127,86949,55365],{"class":154},[127,86951,164],{"class":147},[127,86953,86954,86957,86959,86961,86963],{"class":129,"line":3146},[127,86955,86956],{"class":154},"      right",[127,86958,158],{"class":147},[127,86960,1250],{"class":154},[127,86962,291],{"class":290},[127,86964,164],{"class":147},[127,86966,86967,86969,86971,86974,86976],{"class":129,"line":3152},[127,86968,55481],{"class":154},[127,86970,158],{"class":147},[127,86972,86973],{"class":154},"-2",[127,86975,291],{"class":290},[127,86977,164],{"class":147},[127,86979,86980,86982,86984,86986],{"class":129,"line":3158},[127,86981,62558],{"class":154},[127,86983,158],{"class":147},[127,86985,62563],{"class":154},[127,86987,164],{"class":147},[127,86989,86990],{"class":129,"line":3163},[127,86991,2729],{"class":147},[127,86993,86994],{"class":129,"line":8490},[127,86995,2942],{"emptyLinePlaceholder":606},[127,86997,86998,87000,87003],{"class":129,"line":8514},[127,86999,86679],{"class":143},[127,87001,87002],{"class":143}," .body",[127,87004,148],{"class":147},[127,87006,87007,87009,87011,87013],{"class":129,"line":8519},[127,87008,57820],{"class":154},[127,87010,158],{"class":147},[127,87012,161],{"class":154},[127,87014,164],{"class":147},[127,87016,87017,87019,87021,87023,87025],{"class":129,"line":8525},[127,87018,55230],{"class":154},[127,87020,158],{"class":147},[127,87022,1121],{"class":154},[127,87024,291],{"class":290},[127,87026,164],{"class":147},[127,87028,87029],{"class":129,"line":8552},[127,87030,2729],{"class":147},[127,87032,87033],{"class":129,"line":8557},[127,87034,2942],{"emptyLinePlaceholder":606},[127,87036,87037,87039,87042],{"class":129,"line":8563},[127,87038,86679],{"class":143},[127,87040,87041],{"class":143}," .footer",[127,87043,148],{"class":147},[127,87045,87046,87048,87050,87052],{"class":129,"line":8575},[127,87047,55543],{"class":154},[127,87049,158],{"class":147},[127,87051,52015],{"class":154},[127,87053,164],{"class":147},[127,87055,87056,87058,87060,87062],{"class":129,"line":8587},[127,87057,55554],{"class":154},[127,87059,158],{"class":147},[127,87061,52117],{"class":154},[127,87063,164],{"class":147},[127,87065,87066,87068,87070,87072,87074],{"class":129,"line":8599},[127,87067,55230],{"class":154},[127,87069,158],{"class":147},[127,87071,1121],{"class":154},[127,87073,291],{"class":290},[127,87075,164],{"class":147},[127,87077,87078],{"class":129,"line":10258},[127,87079,2729],{"class":147},[127,87081,87082],{"class":129,"line":10283},[127,87083,2942],{"emptyLinePlaceholder":606},[127,87085,87086,87088,87090,87092],{"class":129,"line":10306},[127,87087,86679],{"class":143},[127,87089,87041],{"class":143},[127,87091,1943],{"class":140},[127,87093,148],{"class":147},[127,87095,87096,87098,87100,87102,87104,87106,87108],{"class":129,"line":10330},[127,87097,55230],{"class":154},[127,87099,158],{"class":147},[127,87101,749],{"class":154},[127,87103,291],{"class":290},[127,87105,2625],{"class":154},[127,87107,291],{"class":290},[127,87109,164],{"class":147},[127,87111,87112,87114,87116,87119],{"class":129,"line":10335},[127,87113,62254],{"class":154},[127,87115,158],{"class":147},[127,87117,87118],{"class":154},"#ccc",[127,87120,164],{"class":147},[127,87122,87123,87125,87127,87129],{"class":129,"line":10340},[127,87124,64503],{"class":154},[127,87126,158],{"class":147},[127,87128,469],{"class":154},[127,87130,164],{"class":147},[127,87132,87133,87135,87137,87139],{"class":129,"line":10345},[127,87134,57950],{"class":154},[127,87136,158],{"class":147},[127,87138,61375],{"class":154},[127,87140,164],{"class":147},[127,87142,87143,87145,87147,87149,87151],{"class":129,"line":10354},[127,87144,55668],{"class":154},[127,87146,158],{"class":147},[127,87148,530],{"class":154},[127,87150,291],{"class":290},[127,87152,164],{"class":147},[127,87154,87155,87157,87159,87161,87163],{"class":129,"line":10359},[127,87156,62283],{"class":154},[127,87158,158],{"class":147},[127,87160,1121],{"class":154},[127,87162,291],{"class":290},[127,87164,164],{"class":147},[127,87166,87167,87169,87171,87173,87175],{"class":129,"line":10365},[127,87168,55456],{"class":154},[127,87170,158],{"class":147},[127,87172,1224],{"class":154},[127,87174,291],{"class":290},[127,87176,164],{"class":147},[127,87178,87179],{"class":129,"line":10386},[127,87180,2729],{"class":147},[127,87182,87183],{"class":129,"line":10392},[127,87184,2942],{"emptyLinePlaceholder":606},[127,87186,87187,87189,87191,87193,87196],{"class":129,"line":10406},[127,87188,86679],{"class":143},[127,87190,87041],{"class":143},[127,87192,1943],{"class":140},[127,87194,87195],{"class":143},".submit",[127,87197,148],{"class":147},[127,87199,87200,87202,87204,87207],{"class":129,"line":10412},[127,87201,55418],{"class":154},[127,87203,158],{"class":147},[127,87205,87206],{"class":154},"#369",[127,87208,164],{"class":147},[127,87210,87211],{"class":129,"line":10439},[127,87212,2729],{"class":147},[127,87214,87215,87217,87219],{"class":129,"line":10448},[127,87216,52952],{"class":147},[127,87218,575],{"class":140},[127,87220,51846],{"class":147},[127,87222,87223,87225,87227],{"class":129,"line":10454},[127,87224,52321],{"class":147},[127,87226,51873],{"class":140},[127,87228,51846],{"class":147},[127,87230,87231],{"class":129,"line":10462},[127,87232,2942],{"emptyLinePlaceholder":606},[127,87234,87235,87237,87239],{"class":129,"line":10467},[127,87236,1584],{"class":147},[127,87238,275],{"class":140},[127,87240,51846],{"class":147},[127,87242,87243,87245,87247,87249,87251,87254,87257,87259],{"class":129,"line":17145},[127,87244,52679],{"class":147},[127,87246,54422],{"class":140},[127,87248,15501],{"class":143},[127,87250,725],{"class":147},[127,87252,87253],{"class":781},"\"delete\"",[127,87255,87256],{"class":147},">删除\u003C\u002F",[127,87258,54422],{"class":140},[127,87260,51846],{"class":147},[127,87262,87263,87265,87267,87269,87271,87274,87277,87279],{"class":129,"line":17151},[127,87264,52679],{"class":147},[127,87266,54422],{"class":140},[127,87268,15501],{"class":143},[127,87270,725],{"class":147},[127,87272,87273],{"class":781},"\"login\"",[127,87275,87276],{"class":147},">登录\u003C\u002F",[127,87278,54422],{"class":140},[127,87280,51846],{"class":147},[127,87282,87283,87285,87287],{"class":129,"line":17174},[127,87284,52679],{"class":147},[127,87286,52348],{"class":140},[127,87288,51846],{"class":147},[127,87290,87291],{"class":129,"line":17180},[127,87292,87293],{"class":133},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[127,87295,87296,87298,87301,87303,87305,87307,87309,87311,87314,87316,87318],{"class":129,"line":17203},[127,87297,70617],{"class":290},[127,87299,87300],{"class":143}," Modal",[127,87302,681],{"class":147},[127,87304,51946],{"class":5758},[127,87306,14106],{"class":290},[127,87308,70463],{"class":781},[127,87310,12977],{"class":147},[127,87312,87313],{"class":5758},"message",[127,87315,14106],{"class":290},[127,87317,70463],{"class":781},[127,87319,12984],{"class":147},[127,87321,87322],{"class":129,"line":17217},[127,87323,87324],{"class":133},"      \u002F\u002F 创建Model 模态框盒子\n",[127,87326,87327],{"class":129,"line":17237},[127,87328,87329],{"class":133},"      \u002F\u002F 1.1 创建div标签\n",[127,87331,87332,87334,87337,87339,87341,87343,87345,87347],{"class":129,"line":17243},[127,87333,70584],{"class":154},[127,87335,87336],{"class":147},".modalBox ",[127,87338,725],{"class":290},[127,87340,54931],{"class":147},[127,87342,70684],{"class":143},[127,87344,681],{"class":147},[127,87346,82460],{"class":781},[127,87348,687],{"class":147},[127,87350,87351],{"class":129,"line":17254},[127,87352,87353],{"class":133},"      \u002F\u002F 1.2 给div 添加类名为model\n",[127,87355,87356,87358,87361,87363],{"class":129,"line":17277},[127,87357,70584],{"class":154},[127,87359,87360],{"class":147},".modalBox.className ",[127,87362,725],{"class":290},[127,87364,87365],{"class":781}," 'modal'\n",[127,87367,87368],{"class":129,"line":17299},[127,87369,87370],{"class":133},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[127,87372,87373,87375,87378,87380],{"class":129,"line":17304},[127,87374,70584],{"class":154},[127,87376,87377],{"class":147},".modalBox.innerHTML ",[127,87379,725],{"class":290},[127,87381,70701],{"class":781},[127,87383,87384,87387,87389],{"class":129,"line":17310},[127,87385,87386],{"class":781},"        \u003Cdiv class=\"header\">${",[127,87388,51946],{"class":147},[127,87390,87391],{"class":781},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[127,87393,87394,87397,87399],{"class":129,"line":17324},[127,87395,87396],{"class":781},"        \u003Cdiv class=\"body\">${",[127,87398,87313],{"class":147},[127,87400,87401],{"class":781},"}\u003C\u002Fdiv>\n",[127,87403,87404],{"class":129,"line":17337},[127,87405,87406],{"class":781},"      `\n",[127,87408,87409],{"class":129,"line":17342},[127,87410,87411],{"class":133},"      \u002F\u002F console.log(this.modalBox)\n",[127,87413,87414],{"class":129,"line":17356},[127,87415,2729],{"class":147},[127,87417,87418],{"class":129,"line":17361},[127,87419,87420],{"class":133},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[127,87422,87423],{"class":129,"line":17367},[127,87424,87425],{"class":133},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[127,87427,87428],{"class":129,"line":17372},[127,87429,87430],{"class":133},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[127,87432,87433,87436,87438,87440,87442,87445,87447,87449],{"class":129,"line":17386},[127,87434,87435],{"class":154},"    Modal",[127,87437,1233],{"class":147},[127,87439,86108],{"class":154},[127,87441,1233],{"class":147},[127,87443,87444],{"class":143},"open",[127,87446,14106],{"class":290},[127,87448,59451],{"class":290},[127,87450,54987],{"class":147},[127,87452,87453],{"class":129,"line":17391},[127,87454,87455],{"class":133},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[127,87457,87458,87460,87463,87465,87467,87469,87471,87474],{"class":129,"line":17396},[127,87459,58761],{"class":290},[127,87461,87462],{"class":154}," box",[127,87464,14106],{"class":290},[127,87466,54931],{"class":147},[127,87468,54934],{"class":143},[127,87470,681],{"class":147},[127,87472,87473],{"class":781},"'.modal'",[127,87475,687],{"class":147},[127,87477,87478],{"class":129,"line":17410},[127,87479,87480],{"class":133},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[127,87482,87483,87486,87488,87491,87493],{"class":129,"line":17422},[127,87484,87485],{"class":147},"      box ",[127,87487,2258],{"class":290},[127,87489,87490],{"class":147}," box.",[127,87492,57540],{"class":143},[127,87494,2518],{"class":147},[127,87496,87497],{"class":129,"line":17427},[127,87498,87499],{"class":133},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[127,87501,87502],{"class":129,"line":17440},[127,87503,87504],{"class":133},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[127,87506,87507],{"class":129,"line":17445},[127,87508,87509],{"class":133},"      \u002F\u002F append可以增加对象\n",[127,87511,87512,87515,87518,87520,87523],{"class":129,"line":17450},[127,87513,87514],{"class":147},"      document.body.",[127,87516,87517],{"class":143},"append",[127,87519,681],{"class":147},[127,87521,87522],{"class":154},"this",[127,87524,87525],{"class":147},".modalBox)\n",[127,87527,87528],{"class":129,"line":17455},[127,87529,2942],{"emptyLinePlaceholder":606},[127,87531,87532],{"class":129,"line":17468},[127,87533,87534],{"class":133},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[127,87536,87537,87539,87542,87544,87546,87549,87551,87553,87555,87557,87560,87562],{"class":129,"line":17473},[127,87538,70584],{"class":154},[127,87540,87541],{"class":147},".modalBox.",[127,87543,54934],{"class":143},[127,87545,681],{"class":147},[127,87547,87548],{"class":781},"'i'",[127,87550,31366],{"class":147},[127,87552,58346],{"class":143},[127,87554,681],{"class":147},[127,87556,58351],{"class":781},[127,87558,87559],{"class":147},", () ",[127,87561,85251],{"class":290},[127,87563,148],{"class":147},[127,87565,87566],{"class":129,"line":33173},[127,87567,87568],{"class":133},"        \u002F\u002F 这个地方需要用到箭头函数\n",[127,87570,87571],{"class":129,"line":33179},[127,87572,87573],{"class":133},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[127,87575,87576],{"class":129,"line":33185},[127,87577,87578],{"class":133},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[127,87580,87581,87583,87585,87588],{"class":129,"line":33191},[127,87582,65259],{"class":154},[127,87584,1233],{"class":147},[127,87586,87587],{"class":143},"close",[127,87589,2518],{"class":147},[127,87591,87592],{"class":129,"line":33197},[127,87593,65348],{"class":147},[127,87595,87596],{"class":129,"line":33208},[127,87597,2729],{"class":147},[127,87599,87600],{"class":129,"line":33214},[127,87601,2942],{"emptyLinePlaceholder":606},[127,87603,87604],{"class":129,"line":33234},[127,87605,87606],{"class":133},"    \u002F\u002F 测试一下 点击 删除按钮\n",[127,87608,87609,87611,87613,87615,87618,87620,87622,87624,87626,87628,87630],{"class":129,"line":33240},[127,87610,52942],{"class":147},[127,87612,54934],{"class":143},[127,87614,681],{"class":147},[127,87616,87617],{"class":781},"'#delete'",[127,87619,31366],{"class":147},[127,87621,58346],{"class":143},[127,87623,681],{"class":147},[127,87625,58351],{"class":781},[127,87627,87559],{"class":147},[127,87629,85251],{"class":290},[127,87631,148],{"class":147},[127,87633,87634],{"class":129,"line":33251},[127,87635,87636],{"class":133},"      \u002F\u002F 先调用Model构造函数\n",[127,87638,87639,87641,87644,87646,87648,87650,87652,87655,87657,87660],{"class":129,"line":33257},[127,87640,58761],{"class":290},[127,87642,87643],{"class":154}," del",[127,87645,14106],{"class":290},[127,87647,12120],{"class":290},[127,87649,87300],{"class":143},[127,87651,681],{"class":147},[127,87653,87654],{"class":781},"'温馨的提示'",[127,87656,12977],{"class":147},[127,87658,87659],{"class":781},"'您没有删除权限操作'",[127,87661,687],{"class":147},[127,87663,87664],{"class":129,"line":33263},[127,87665,87666],{"class":133},"      \u002F\u002F 实例对象调用open方法\n",[127,87668,87669,87672,87674],{"class":129,"line":33269},[127,87670,87671],{"class":147},"      del.",[127,87673,87444],{"class":143},[127,87675,2518],{"class":147},[127,87677,87678],{"class":129,"line":33275},[127,87679,34001],{"class":147},[127,87681,87682],{"class":129,"line":33281},[127,87683,87684],{"class":133},"    \u002F\u002F 测试一下 点击 登录按钮\n",[127,87686,87687,87689,87691,87693,87696,87698,87700,87702,87704,87706,87708],{"class":129,"line":33287},[127,87688,52942],{"class":147},[127,87690,54934],{"class":143},[127,87692,681],{"class":147},[127,87694,87695],{"class":781},"'#login'",[127,87697,31366],{"class":147},[127,87699,58346],{"class":143},[127,87701,681],{"class":147},[127,87703,58351],{"class":781},[127,87705,87559],{"class":147},[127,87707,85251],{"class":290},[127,87709,148],{"class":147},[127,87711,87712],{"class":129,"line":33293},[127,87713,87636],{"class":133},[127,87715,87716,87718,87721,87723,87725,87727,87729,87732,87734,87737],{"class":129,"line":33313},[127,87717,58761],{"class":290},[127,87719,87720],{"class":154}," log",[127,87722,14106],{"class":290},[127,87724,12120],{"class":290},[127,87726,87300],{"class":143},[127,87728,681],{"class":147},[127,87730,87731],{"class":781},"'友情提示'",[127,87733,12977],{"class":147},[127,87735,87736],{"class":781},"'您还没有登录呢'",[127,87738,687],{"class":147},[127,87740,87741],{"class":129,"line":33319},[127,87742,87666],{"class":133},[127,87744,87745,87748,87750],{"class":129,"line":33335},[127,87746,87747],{"class":147},"      log.",[127,87749,87444],{"class":143},[127,87751,2518],{"class":147},[127,87753,87754],{"class":129,"line":33341},[127,87755,34001],{"class":147},[127,87757,87758],{"class":129,"line":33355},[127,87759,87760],{"class":133},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[127,87762,87763,87765,87767,87769,87771,87773,87775,87777],{"class":129,"line":33361},[127,87764,87435],{"class":154},[127,87766,1233],{"class":147},[127,87768,86108],{"class":154},[127,87770,1233],{"class":147},[127,87772,87587],{"class":143},[127,87774,14106],{"class":290},[127,87776,59451],{"class":290},[127,87778,54987],{"class":147},[127,87780,87781,87783,87785,87787],{"class":129,"line":33376},[127,87782,70584],{"class":154},[127,87784,87541],{"class":147},[127,87786,57540],{"class":143},[127,87788,2518],{"class":147},[127,87790,87791],{"class":129,"line":33382},[127,87792,2729],{"class":147},[127,87794,87795,87797,87799],{"class":129,"line":33391},[127,87796,52952],{"class":147},[127,87798,52348],{"class":140},[127,87800,51846],{"class":147},[127,87802,87803,87805,87807],{"class":129,"line":33397},[127,87804,52321],{"class":147},[127,87806,275],{"class":140},[127,87808,51846],{"class":147},[127,87810,87811],{"class":129,"line":33406},[127,87812,2942],{"emptyLinePlaceholder":606},[127,87814,87815,87817,87819],{"class":129,"line":33412},[127,87816,52321],{"class":147},[127,87818,51175],{"class":140},[127,87820,51846],{"class":147},[19,87822,87823],{},[23,87824],{"alt":122,"src":87825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87827,87829],{"id":87828},"_414-深浅拷贝","4.14 深浅拷贝",[62,87831,87833],{"id":87832},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87835,87836],{},[23,87837],{"alt":122,"src":87838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87840,87841],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87843,87844],{},[23,87845],{"alt":122,"src":87846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87848,87849],{},[23,87850],{"alt":122,"src":87851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87853,87854],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87856,87857],{},[23,87858],{"alt":122,"src":87859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87861,11874],{},[19,87863,87864],{},[23,87865],{"alt":122,"src":87866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[62,87868,87870],{"id":87869},"_4142-深拷贝","4.14.2 深拷贝",[19,87872,87873],{},"深拷贝：拷贝的是对象，不是地址",[19,87875,87876],{},"常用的三种方法：",[632,87878,87879,87882,87885],{},[635,87880,87881],{},"通过递归实现深拷贝",[635,87883,87884],{},"lodash\u002FcloneDeep",[635,87886,87887],{},"通过JSON.stringify()实现",[22539,87889,87891],{"id":87890},"_41421-递归函数","4.14.2.1 递归函数",[19,87893,87894],{},[23,87895],{"alt":122,"src":87896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[632,87898,87899],{},[635,87900,87901],{},"死递归占溢出：",[117,87903,87905],{"className":53602,"code":87904,"language":53604,"meta":122,"style":122},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[124,87906,87907,87915,87923,87927,87932,87936,87941,87949],{"__ignoreMap":122},[127,87908,87909,87911,87913],{"class":129,"line":130},[127,87910,1584],{"class":147},[127,87912,275],{"class":140},[127,87914,51846],{"class":147},[127,87916,87917,87919,87921],{"class":129,"line":137},[127,87918,52679],{"class":147},[127,87920,52348],{"class":140},[127,87922,51846],{"class":147},[127,87924,87925],{"class":129,"line":151},[127,87926,77672],{"class":147},[127,87928,87929],{"class":129,"line":167},[127,87930,87931],{"class":147},"      fn()\n",[127,87933,87934],{"class":129,"line":415},[127,87935,2729],{"class":147},[127,87937,87938],{"class":129,"line":421},[127,87939,87940],{"class":147},"    fn()\n",[127,87942,87943,87945,87947],{"class":129,"line":1766},[127,87944,52952],{"class":147},[127,87946,52348],{"class":140},[127,87948,51846],{"class":147},[127,87950,87951,87953,87955],{"class":129,"line":1856},[127,87952,52321],{"class":147},[127,87954,275],{"class":140},[127,87956,51846],{"class":147},[632,87958,87959],{"start":137},[635,87960,87961],{},"递归函数要加判断条件：",[19,87963,87964],{},[23,87965],{"alt":122,"src":87966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[632,87968,87969],{"start":151},[635,87970,87971],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[117,87973,87975],{"className":51173,"code":87974,"language":51175,"meta":122,"style":122},"\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",[124,87976,87977,87987,88001,88005,88013,88027,88047,88059,88067,88071,88079,88091,88099,88107,88132,88144,88148,88155,88163,88171,88175],{"__ignoreMap":122},[127,87978,87979,87981,87983,87985],{"class":129,"line":130},[127,87980,51837],{"class":147},[127,87982,51840],{"class":140},[127,87984,51843],{"class":143},[127,87986,51846],{"class":147},[127,87988,87989,87991,87993,87995,87997,87999],{"class":129,"line":137},[127,87990,1584],{"class":147},[127,87992,51175],{"class":140},[127,87994,51855],{"class":143},[127,87996,725],{"class":147},[127,87998,51860],{"class":781},[127,88000,51846],{"class":147},[127,88002,88003],{"class":129,"line":151},[127,88004,2942],{"emptyLinePlaceholder":606},[127,88006,88007,88009,88011],{"class":129,"line":167},[127,88008,1584],{"class":147},[127,88010,51873],{"class":140},[127,88012,51846],{"class":147},[127,88014,88015,88017,88019,88021,88023,88025],{"class":129,"line":415},[127,88016,52679],{"class":147},[127,88018,51883],{"class":140},[127,88020,51886],{"class":143},[127,88022,725],{"class":147},[127,88024,51891],{"class":781},[127,88026,51846],{"class":147},[127,88028,88029,88031,88033,88035,88037,88039,88041,88043,88045],{"class":129,"line":421},[127,88030,52679],{"class":147},[127,88032,51883],{"class":140},[127,88034,15462],{"class":143},[127,88036,725],{"class":147},[127,88038,51930],{"class":781},[127,88040,51910],{"class":143},[127,88042,725],{"class":147},[127,88044,51937],{"class":781},[127,88046,51846],{"class":147},[127,88048,88049,88051,88053,88055,88057],{"class":129,"line":1766},[127,88050,52679],{"class":147},[127,88052,51946],{"class":140},[127,88054,51949],{"class":147},[127,88056,51946],{"class":140},[127,88058,51846],{"class":147},[127,88060,88061,88063,88065],{"class":129,"line":1856},[127,88062,52321],{"class":147},[127,88064,51873],{"class":140},[127,88066,51846],{"class":147},[127,88068,88069],{"class":129,"line":1862},[127,88070,2942],{"emptyLinePlaceholder":606},[127,88072,88073,88075,88077],{"class":129,"line":1874},[127,88074,1584],{"class":147},[127,88076,275],{"class":140},[127,88078,51846],{"class":147},[127,88080,88081,88083,88085,88087,88089],{"class":129,"line":2155},[127,88082,52679],{"class":147},[127,88084,52147],{"class":140},[127,88086,55848],{"class":147},[127,88088,52147],{"class":140},[127,88090,51846],{"class":147},[127,88092,88093,88095,88097],{"class":129,"line":2160},[127,88094,52679],{"class":147},[127,88096,52348],{"class":140},[127,88098,51846],{"class":147},[127,88100,88101,88103,88105],{"class":129,"line":2166},[127,88102,70617],{"class":290},[127,88104,74302],{"class":143},[127,88106,11395],{"class":147},[127,88108,88109,88111,88113,88115,88117,88119,88121,88123,88125,88127,88130],{"class":129,"line":2171},[127,88110,56305],{"class":147},[127,88112,54934],{"class":143},[127,88114,681],{"class":147},[127,88116,82460],{"class":781},[127,88118,74778],{"class":147},[127,88120,725],{"class":290},[127,88122,12120],{"class":290},[127,88124,74318],{"class":143},[127,88126,17802],{"class":147},[127,88128,88129],{"class":143},"toLocaleString",[127,88131,2518],{"class":147},[127,88133,88134,88137,88140,88142],{"class":129,"line":2185},[127,88135,88136],{"class":143},"      setTimeout",[127,88138,88139],{"class":147},"(getTime, ",[127,88141,6952],{"class":154},[127,88143,687],{"class":147},[127,88145,88146],{"class":129,"line":2190},[127,88147,2729],{"class":147},[127,88149,88150,88153],{"class":129,"line":2196},[127,88151,88152],{"class":143},"    getTime",[127,88154,2518],{"class":147},[127,88156,88157,88159,88161],{"class":129,"line":2217},[127,88158,52952],{"class":147},[127,88160,52348],{"class":140},[127,88162,51846],{"class":147},[127,88164,88165,88167,88169],{"class":129,"line":2222},[127,88166,52321],{"class":147},[127,88168,275],{"class":140},[127,88170,51846],{"class":147},[127,88172,88173],{"class":129,"line":2236},[127,88174,2942],{"emptyLinePlaceholder":606},[127,88176,88177,88179,88181],{"class":129,"line":2241},[127,88178,52321],{"class":147},[127,88180,51175],{"class":140},[127,88182,51846],{"class":147},[19,88184,88185],{},[23,88186],{"alt":122,"src":88187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[632,88189,88190],{"start":167},[635,88191,87881],{},[19,88193,88194],{},[23,88195],{"alt":122,"src":88196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88198,88199],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88201,39729],{},[19,88203,88204],{},"这个是简易版的递归函数深拷贝",[19,88206,88207],{},"一定要注意先数组再对象，因为万物皆可对象",[117,88209,88211],{"className":51173,"code":88210,"language":51175,"meta":122,"style":122},"\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",[124,88212,88213,88223,88237,88241,88249,88263,88283,88295,88303,88307,88315,88323,88333,88342,88350,88366,88370,88378,88382,88386,88398,88403,88422,88438,88443,88448,88453,88468,88473,88478,88487,88495,88512,88520,88526,88534,88539,88544,88553,88557,88561,88565,88576,88585,88595,88609,88619,88627,88635,88643,88647],{"__ignoreMap":122},[127,88214,88215,88217,88219,88221],{"class":129,"line":130},[127,88216,51837],{"class":147},[127,88218,51840],{"class":140},[127,88220,51843],{"class":143},[127,88222,51846],{"class":147},[127,88224,88225,88227,88229,88231,88233,88235],{"class":129,"line":137},[127,88226,1584],{"class":147},[127,88228,51175],{"class":140},[127,88230,51855],{"class":143},[127,88232,725],{"class":147},[127,88234,51860],{"class":781},[127,88236,51846],{"class":147},[127,88238,88239],{"class":129,"line":151},[127,88240,2942],{"emptyLinePlaceholder":606},[127,88242,88243,88245,88247],{"class":129,"line":167},[127,88244,1584],{"class":147},[127,88246,51873],{"class":140},[127,88248,51846],{"class":147},[127,88250,88251,88253,88255,88257,88259,88261],{"class":129,"line":415},[127,88252,52679],{"class":147},[127,88254,51883],{"class":140},[127,88256,51886],{"class":143},[127,88258,725],{"class":147},[127,88260,51891],{"class":781},[127,88262,51846],{"class":147},[127,88264,88265,88267,88269,88271,88273,88275,88277,88279,88281],{"class":129,"line":421},[127,88266,52679],{"class":147},[127,88268,51883],{"class":140},[127,88270,15462],{"class":143},[127,88272,725],{"class":147},[127,88274,51930],{"class":781},[127,88276,51910],{"class":143},[127,88278,725],{"class":147},[127,88280,51937],{"class":781},[127,88282,51846],{"class":147},[127,88284,88285,88287,88289,88291,88293],{"class":129,"line":1766},[127,88286,52679],{"class":147},[127,88288,51946],{"class":140},[127,88290,51949],{"class":147},[127,88292,51946],{"class":140},[127,88294,51846],{"class":147},[127,88296,88297,88299,88301],{"class":129,"line":1856},[127,88298,52321],{"class":147},[127,88300,51873],{"class":140},[127,88302,51846],{"class":147},[127,88304,88305],{"class":129,"line":1862},[127,88306,2942],{"emptyLinePlaceholder":606},[127,88308,88309,88311,88313],{"class":129,"line":1874},[127,88310,1584],{"class":147},[127,88312,275],{"class":140},[127,88314,51846],{"class":147},[127,88316,88317,88319,88321],{"class":129,"line":2155},[127,88318,52679],{"class":147},[127,88320,52348],{"class":140},[127,88322,51846],{"class":147},[127,88324,88325,88327,88329,88331],{"class":129,"line":2160},[127,88326,11763],{"class":290},[127,88328,70504],{"class":154},[127,88330,14106],{"class":290},[127,88332,148],{"class":147},[127,88334,88335,88337,88340],{"class":129,"line":2166},[127,88336,72145],{"class":147},[127,88338,88339],{"class":781},"'pink'",[127,88341,32006],{"class":147},[127,88343,88344,88346,88348],{"class":129,"line":2171},[127,88345,72155],{"class":147},[127,88347,1324],{"class":154},[127,88349,32006],{"class":147},[127,88351,88352,88355,88358,88360,88363],{"class":129,"line":2185},[127,88353,88354],{"class":147},"      hobby: [",[127,88356,88357],{"class":781},"'乒乓球'",[127,88359,12977],{"class":147},[127,88361,88362],{"class":781},"'足球'",[127,88364,88365],{"class":147},"],\n",[127,88367,88368],{"class":129,"line":2190},[127,88369,78401],{"class":147},[127,88371,88372,88375],{"class":129,"line":2196},[127,88373,88374],{"class":147},"        baby: ",[127,88376,88377],{"class":781},"'小pink'\n",[127,88379,88380],{"class":129,"line":2217},[127,88381,52933],{"class":147},[127,88383,88384],{"class":129,"line":2222},[127,88385,2729],{"class":147},[127,88387,88388,88390,88393,88395],{"class":129,"line":2236},[127,88389,11763],{"class":290},[127,88391,88392],{"class":154}," o",[127,88394,14106],{"class":290},[127,88396,88397],{"class":147}," {}\n",[127,88399,88400],{"class":129,"line":2241},[127,88401,88402],{"class":133},"    \u002F\u002F 拷贝函数\n",[127,88404,88405,88407,88410,88412,88415,88417,88420],{"class":129,"line":2270},[127,88406,70617],{"class":290},[127,88408,88409],{"class":143}," deepCopy",[127,88411,681],{"class":147},[127,88413,88414],{"class":5758},"newObj",[127,88416,12977],{"class":147},[127,88418,88419],{"class":5758},"oldObj",[127,88421,12984],{"class":147},[127,88423,88424,88426,88428,88430,88433,88435],{"class":129,"line":2275},[127,88425,52819],{"class":290},[127,88427,2201],{"class":147},[127,88429,52382],{"class":290},[127,88431,88432],{"class":147}," k ",[127,88434,26584],{"class":290},[127,88436,88437],{"class":147}," oldObj) {\n",[127,88439,88440],{"class":129,"line":2292},[127,88441,88442],{"class":133},"        \u002F\u002F 处理数组的问题\n",[127,88444,88445],{"class":129,"line":2297},[127,88446,88447],{"class":133},"        \u002F\u002F 判断是否属于数组\n",[127,88449,88450],{"class":129,"line":2302},[127,88451,88452],{"class":133},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[127,88454,88455,88457,88460,88463,88466],{"class":129,"line":2307},[127,88456,3039],{"class":290},[127,88458,88459],{"class":147}," (oldObj[k] ",[127,88461,88462],{"class":290},"instanceof",[127,88464,88465],{"class":143}," Array",[127,88467,12984],{"class":147},[127,88469,88470],{"class":129,"line":2321},[127,88471,88472],{"class":133},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[127,88474,88475],{"class":129,"line":2326},[127,88476,88477],{"class":133},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[127,88479,88480,88483,88485],{"class":129,"line":3119},[127,88481,88482],{"class":147},"          newObj[k] ",[127,88484,725],{"class":290},[127,88486,52373],{"class":147},[127,88488,88489,88492],{"class":129,"line":3133},[127,88490,88491],{"class":143},"          deepCopy",[127,88493,88494],{"class":147},"(newObj[k], oldObj[k])\n",[127,88496,88497,88499,88501,88503,88505,88507,88510],{"class":129,"line":3141},[127,88498,80609],{"class":147},[127,88500,2244],{"class":290},[127,88502,2247],{"class":290},[127,88504,88459],{"class":147},[127,88506,88462],{"class":290},[127,88508,88509],{"class":143}," Object",[127,88511,12984],{"class":147},[127,88513,88514,88516,88518],{"class":129,"line":3146},[127,88515,88482],{"class":147},[127,88517,725],{"class":290},[127,88519,88397],{"class":147},[127,88521,88522,88524],{"class":129,"line":3152},[127,88523,88491],{"class":143},[127,88525,88494],{"class":147},[127,88527,88528,88530,88532],{"class":129,"line":3158},[127,88529,80609],{"class":147},[127,88531,2244],{"class":290},[127,88533,148],{"class":147},[127,88535,88536],{"class":129,"line":3163},[127,88537,88538],{"class":133},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[127,88540,88541],{"class":129,"line":8490},[127,88542,88543],{"class":133},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[127,88545,88546,88548,88550],{"class":129,"line":8514},[127,88547,88482],{"class":147},[127,88549,725],{"class":290},[127,88551,88552],{"class":147}," oldObj[k]\n",[127,88554,88555],{"class":129,"line":8519},[127,88556,3071],{"class":147},[127,88558,88559],{"class":129,"line":8525},[127,88560,52933],{"class":147},[127,88562,88563],{"class":129,"line":8552},[127,88564,2729],{"class":147},[127,88566,88567,88570,88573],{"class":129,"line":8557},[127,88568,88569],{"class":143},"    deepCopy",[127,88571,88572],{"class":147},"(o, obj) ",[127,88574,88575],{"class":133},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[127,88577,88578,88580,88582],{"class":129,"line":8563},[127,88579,74282],{"class":147},[127,88581,58780],{"class":143},[127,88583,88584],{"class":147},"(o)\n",[127,88586,88587,88590,88592],{"class":129,"line":8575},[127,88588,88589],{"class":147},"    o.age ",[127,88591,725],{"class":290},[127,88593,88594],{"class":154}," 20\n",[127,88596,88597,88600,88602,88604,88606],{"class":129,"line":8587},[127,88598,88599],{"class":147},"    o.hobby[",[127,88601,867],{"class":154},[127,88603,4985],{"class":147},[127,88605,725],{"class":290},[127,88607,88608],{"class":781}," '篮球'\n",[127,88610,88611,88614,88616],{"class":129,"line":8599},[127,88612,88613],{"class":147},"    o.family ",[127,88615,725],{"class":290},[127,88617,88618],{"class":781}," '老pink'\n",[127,88620,88621,88623,88625],{"class":129,"line":10258},[127,88622,74282],{"class":147},[127,88624,58780],{"class":143},[127,88626,70569],{"class":147},[127,88628,88629,88631,88633],{"class":129,"line":10283},[127,88630,52952],{"class":147},[127,88632,52348],{"class":140},[127,88634,51846],{"class":147},[127,88636,88637,88639,88641],{"class":129,"line":10306},[127,88638,52321],{"class":147},[127,88640,275],{"class":140},[127,88642,51846],{"class":147},[127,88644,88645],{"class":129,"line":10330},[127,88646,2942],{"emptyLinePlaceholder":606},[127,88648,88649,88651,88653],{"class":129,"line":10335},[127,88650,52321],{"class":147},[127,88652,51175],{"class":140},[127,88654,51846],{"class":147},[19,88656,88657],{},[23,88658],{"alt":122,"src":88659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22539,88661,88663,88664],{"id":88662},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[30,88665,88666],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88668,88669],{},[457,88670,88671],{"href":88671,"rel":88672},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24405],[19,88674,88675],{},"lodash里边的方法都要加上一个下划线_",[19,88677,88678],{},"_.cloneDeep()",[117,88680,88682],{"className":51173,"code":88681,"language":51175,"meta":122,"style":122},"\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",[124,88683,88684,88694,88708,88712,88720,88734,88754,88766,88774,88778,88786,88791,88810,88818,88828,88836,88844,88856,88860,88866,88870,88874,88890,88898,88907,88915,88923,88931,88935],{"__ignoreMap":122},[127,88685,88686,88688,88690,88692],{"class":129,"line":130},[127,88687,51837],{"class":147},[127,88689,51840],{"class":140},[127,88691,51843],{"class":143},[127,88693,51846],{"class":147},[127,88695,88696,88698,88700,88702,88704,88706],{"class":129,"line":137},[127,88697,1584],{"class":147},[127,88699,51175],{"class":140},[127,88701,51855],{"class":143},[127,88703,725],{"class":147},[127,88705,51860],{"class":781},[127,88707,51846],{"class":147},[127,88709,88710],{"class":129,"line":151},[127,88711,2942],{"emptyLinePlaceholder":606},[127,88713,88714,88716,88718],{"class":129,"line":167},[127,88715,1584],{"class":147},[127,88717,51873],{"class":140},[127,88719,51846],{"class":147},[127,88721,88722,88724,88726,88728,88730,88732],{"class":129,"line":415},[127,88723,52679],{"class":147},[127,88725,51883],{"class":140},[127,88727,51886],{"class":143},[127,88729,725],{"class":147},[127,88731,51891],{"class":781},[127,88733,51846],{"class":147},[127,88735,88736,88738,88740,88742,88744,88746,88748,88750,88752],{"class":129,"line":421},[127,88737,52679],{"class":147},[127,88739,51883],{"class":140},[127,88741,15462],{"class":143},[127,88743,725],{"class":147},[127,88745,51930],{"class":781},[127,88747,51910],{"class":143},[127,88749,725],{"class":147},[127,88751,51937],{"class":781},[127,88753,51846],{"class":147},[127,88755,88756,88758,88760,88762,88764],{"class":129,"line":1766},[127,88757,52679],{"class":147},[127,88759,51946],{"class":140},[127,88761,51949],{"class":147},[127,88763,51946],{"class":140},[127,88765,51846],{"class":147},[127,88767,88768,88770,88772],{"class":129,"line":1856},[127,88769,52321],{"class":147},[127,88771,51873],{"class":140},[127,88773,51846],{"class":147},[127,88775,88776],{"class":129,"line":1862},[127,88777,2942],{"emptyLinePlaceholder":606},[127,88779,88780,88782,88784],{"class":129,"line":1874},[127,88781,1584],{"class":147},[127,88783,275],{"class":140},[127,88785,51846],{"class":147},[127,88787,88788],{"class":129,"line":2155},[127,88789,88790],{"class":133},"  \u003C!-- 先引用这个库 -->\n",[127,88792,88793,88795,88797,88799,88801,88804,88806,88808],{"class":129,"line":2160},[127,88794,52679],{"class":147},[127,88796,52348],{"class":140},[127,88798,55773],{"class":143},[127,88800,725],{"class":147},[127,88802,88803],{"class":781},"\"lodash.min.js\"",[127,88805,55848],{"class":147},[127,88807,52348],{"class":140},[127,88809,51846],{"class":147},[127,88811,88812,88814,88816],{"class":129,"line":2166},[127,88813,52679],{"class":147},[127,88815,52348],{"class":140},[127,88817,51846],{"class":147},[127,88819,88820,88822,88824,88826],{"class":129,"line":2171},[127,88821,11763],{"class":290},[127,88823,70504],{"class":154},[127,88825,14106],{"class":290},[127,88827,148],{"class":147},[127,88829,88830,88832,88834],{"class":129,"line":2185},[127,88831,72145],{"class":147},[127,88833,88339],{"class":781},[127,88835,32006],{"class":147},[127,88837,88838,88840,88842],{"class":129,"line":2190},[127,88839,72155],{"class":147},[127,88841,1324],{"class":154},[127,88843,32006],{"class":147},[127,88845,88846,88848,88850,88852,88854],{"class":129,"line":2196},[127,88847,88354],{"class":147},[127,88849,88357],{"class":781},[127,88851,12977],{"class":147},[127,88853,88362],{"class":781},[127,88855,88365],{"class":147},[127,88857,88858],{"class":129,"line":2217},[127,88859,78401],{"class":147},[127,88861,88862,88864],{"class":129,"line":2222},[127,88863,88374],{"class":147},[127,88865,88377],{"class":781},[127,88867,88868],{"class":129,"line":2236},[127,88869,52933],{"class":147},[127,88871,88872],{"class":129,"line":2241},[127,88873,2729],{"class":147},[127,88875,88876,88878,88880,88882,88885,88888],{"class":129,"line":2270},[127,88877,11763],{"class":290},[127,88879,88392],{"class":154},[127,88881,14106],{"class":290},[127,88883,88884],{"class":147}," _.",[127,88886,88887],{"class":143},"cloneDeep",[127,88889,70569],{"class":147},[127,88891,88892,88894,88896],{"class":129,"line":2275},[127,88893,74282],{"class":147},[127,88895,58780],{"class":143},[127,88897,88584],{"class":147},[127,88899,88900,88903,88905],{"class":129,"line":2292},[127,88901,88902],{"class":147},"    o.family.baby ",[127,88904,725],{"class":290},[127,88906,88618],{"class":781},[127,88908,88909,88911,88913],{"class":129,"line":2297},[127,88910,74282],{"class":147},[127,88912,58780],{"class":143},[127,88914,70569],{"class":147},[127,88916,88917,88919,88921],{"class":129,"line":2302},[127,88918,52952],{"class":147},[127,88920,52348],{"class":140},[127,88922,51846],{"class":147},[127,88924,88925,88927,88929],{"class":129,"line":2307},[127,88926,52321],{"class":147},[127,88928,275],{"class":140},[127,88930,51846],{"class":147},[127,88932,88933],{"class":129,"line":2321},[127,88934,2942],{"emptyLinePlaceholder":606},[127,88936,88937,88939,88941],{"class":129,"line":2326},[127,88938,52321],{"class":147},[127,88940,51175],{"class":140},[127,88942,51846],{"class":147},[19,88944,88945],{},[23,88946],{"alt":122,"src":88947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22539,88949,88951],{"id":88950},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[117,88953,88955],{"className":51173,"code":88954,"language":51175,"meta":122,"style":122},"\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",[124,88956,88957,88967,88981,88985,88993,89007,89027,89039,89047,89051,89059,89067,89077,89085,89093,89105,89109,89115,89119,89123,89128,89133,89138,89164,89172,89181,89189,89197,89205,89209],{"__ignoreMap":122},[127,88958,88959,88961,88963,88965],{"class":129,"line":130},[127,88960,51837],{"class":147},[127,88962,51840],{"class":140},[127,88964,51843],{"class":143},[127,88966,51846],{"class":147},[127,88968,88969,88971,88973,88975,88977,88979],{"class":129,"line":137},[127,88970,1584],{"class":147},[127,88972,51175],{"class":140},[127,88974,51855],{"class":143},[127,88976,725],{"class":147},[127,88978,51860],{"class":781},[127,88980,51846],{"class":147},[127,88982,88983],{"class":129,"line":151},[127,88984,2942],{"emptyLinePlaceholder":606},[127,88986,88987,88989,88991],{"class":129,"line":167},[127,88988,1584],{"class":147},[127,88990,51873],{"class":140},[127,88992,51846],{"class":147},[127,88994,88995,88997,88999,89001,89003,89005],{"class":129,"line":415},[127,88996,52679],{"class":147},[127,88998,51883],{"class":140},[127,89000,51886],{"class":143},[127,89002,725],{"class":147},[127,89004,51891],{"class":781},[127,89006,51846],{"class":147},[127,89008,89009,89011,89013,89015,89017,89019,89021,89023,89025],{"class":129,"line":421},[127,89010,52679],{"class":147},[127,89012,51883],{"class":140},[127,89014,15462],{"class":143},[127,89016,725],{"class":147},[127,89018,51930],{"class":781},[127,89020,51910],{"class":143},[127,89022,725],{"class":147},[127,89024,51937],{"class":781},[127,89026,51846],{"class":147},[127,89028,89029,89031,89033,89035,89037],{"class":129,"line":1766},[127,89030,52679],{"class":147},[127,89032,51946],{"class":140},[127,89034,51949],{"class":147},[127,89036,51946],{"class":140},[127,89038,51846],{"class":147},[127,89040,89041,89043,89045],{"class":129,"line":1856},[127,89042,52321],{"class":147},[127,89044,51873],{"class":140},[127,89046,51846],{"class":147},[127,89048,89049],{"class":129,"line":1862},[127,89050,2942],{"emptyLinePlaceholder":606},[127,89052,89053,89055,89057],{"class":129,"line":1874},[127,89054,1584],{"class":147},[127,89056,275],{"class":140},[127,89058,51846],{"class":147},[127,89060,89061,89063,89065],{"class":129,"line":2155},[127,89062,52679],{"class":147},[127,89064,52348],{"class":140},[127,89066,51846],{"class":147},[127,89068,89069,89071,89073,89075],{"class":129,"line":2160},[127,89070,11763],{"class":290},[127,89072,70504],{"class":154},[127,89074,14106],{"class":290},[127,89076,148],{"class":147},[127,89078,89079,89081,89083],{"class":129,"line":2166},[127,89080,72145],{"class":147},[127,89082,88339],{"class":781},[127,89084,32006],{"class":147},[127,89086,89087,89089,89091],{"class":129,"line":2171},[127,89088,72155],{"class":147},[127,89090,1324],{"class":154},[127,89092,32006],{"class":147},[127,89094,89095,89097,89099,89101,89103],{"class":129,"line":2185},[127,89096,88354],{"class":147},[127,89098,88357],{"class":781},[127,89100,12977],{"class":147},[127,89102,88362],{"class":781},[127,89104,88365],{"class":147},[127,89106,89107],{"class":129,"line":2190},[127,89108,78401],{"class":147},[127,89110,89111,89113],{"class":129,"line":2196},[127,89112,88374],{"class":147},[127,89114,88377],{"class":781},[127,89116,89117],{"class":129,"line":2217},[127,89118,52933],{"class":147},[127,89120,89121],{"class":129,"line":2222},[127,89122,2729],{"class":147},[127,89124,89125],{"class":129,"line":2236},[127,89126,89127],{"class":133},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[127,89129,89130],{"class":129,"line":2241},[127,89131,89132],{"class":133},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[127,89134,89135],{"class":129,"line":2270},[127,89136,89137],{"class":133},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[127,89139,89140,89142,89144,89146,89149,89151,89154,89156,89158,89160,89162],{"class":129,"line":2275},[127,89141,11763],{"class":290},[127,89143,88392],{"class":154},[127,89145,14106],{"class":290},[127,89147,89148],{"class":154}," JSON",[127,89150,1233],{"class":147},[127,89152,89153],{"class":143},"parse",[127,89155,681],{"class":147},[127,89157,72193],{"class":154},[127,89159,1233],{"class":147},[127,89161,72198],{"class":143},[127,89163,72201],{"class":147},[127,89165,89166,89168,89170],{"class":129,"line":2292},[127,89167,74282],{"class":147},[127,89169,58780],{"class":143},[127,89171,88584],{"class":147},[127,89173,89174,89176,89178],{"class":129,"line":2297},[127,89175,88902],{"class":147},[127,89177,725],{"class":290},[127,89179,89180],{"class":781}," '123'\n",[127,89182,89183,89185,89187],{"class":129,"line":2302},[127,89184,74282],{"class":147},[127,89186,58780],{"class":143},[127,89188,70569],{"class":147},[127,89190,89191,89193,89195],{"class":129,"line":2307},[127,89192,52952],{"class":147},[127,89194,52348],{"class":140},[127,89196,51846],{"class":147},[127,89198,89199,89201,89203],{"class":129,"line":2321},[127,89200,52321],{"class":147},[127,89202,275],{"class":140},[127,89204,51846],{"class":147},[127,89206,89207],{"class":129,"line":2326},[127,89208,2942],{"emptyLinePlaceholder":606},[127,89210,89211,89213,89215],{"class":129,"line":3119},[127,89212,52321],{"class":147},[127,89214,51175],{"class":140},[127,89216,51846],{"class":147},[19,89218,89219],{},[23,89220],{"alt":122,"src":89221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89223,89225],{"id":89224},"_415-异常处理","4.15 异常处理",[632,89227,89228],{},[635,89229,89230],{},"throw抛异常",[19,89232,89233],{},[23,89234],{"alt":122,"src":89235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[632,89237,89238],{"start":137},[635,89239,89240],{},"try\u002Fcatch 捕获错误信息",[19,89242,89243],{},[23,89244],{"alt":122,"src":89245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[117,89247,89249],{"className":51173,"code":89248,"language":51175,"meta":122,"style":122},"\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",[124,89250,89251,89261,89275,89279,89287,89301,89321,89333,89341,89345,89353,89365,89373,89382,89389,89394,89413,89422,89433,89438,89448,89453,89458,89463,89480,89484,89489,89496,89508,89512,89524,89528,89532,89537,89542,89549,89557,89565,89569],{"__ignoreMap":122},[127,89252,89253,89255,89257,89259],{"class":129,"line":130},[127,89254,51837],{"class":147},[127,89256,51840],{"class":140},[127,89258,51843],{"class":143},[127,89260,51846],{"class":147},[127,89262,89263,89265,89267,89269,89271,89273],{"class":129,"line":137},[127,89264,1584],{"class":147},[127,89266,51175],{"class":140},[127,89268,51855],{"class":143},[127,89270,725],{"class":147},[127,89272,51860],{"class":781},[127,89274,51846],{"class":147},[127,89276,89277],{"class":129,"line":151},[127,89278,2942],{"emptyLinePlaceholder":606},[127,89280,89281,89283,89285],{"class":129,"line":167},[127,89282,1584],{"class":147},[127,89284,51873],{"class":140},[127,89286,51846],{"class":147},[127,89288,89289,89291,89293,89295,89297,89299],{"class":129,"line":415},[127,89290,52679],{"class":147},[127,89292,51883],{"class":140},[127,89294,51886],{"class":143},[127,89296,725],{"class":147},[127,89298,51891],{"class":781},[127,89300,51846],{"class":147},[127,89302,89303,89305,89307,89309,89311,89313,89315,89317,89319],{"class":129,"line":421},[127,89304,52679],{"class":147},[127,89306,51883],{"class":140},[127,89308,15462],{"class":143},[127,89310,725],{"class":147},[127,89312,51930],{"class":781},[127,89314,51910],{"class":143},[127,89316,725],{"class":147},[127,89318,51937],{"class":781},[127,89320,51846],{"class":147},[127,89322,89323,89325,89327,89329,89331],{"class":129,"line":1766},[127,89324,52679],{"class":147},[127,89326,51946],{"class":140},[127,89328,51949],{"class":147},[127,89330,51946],{"class":140},[127,89332,51846],{"class":147},[127,89334,89335,89337,89339],{"class":129,"line":1856},[127,89336,52321],{"class":147},[127,89338,51873],{"class":140},[127,89340,51846],{"class":147},[127,89342,89343],{"class":129,"line":1862},[127,89344,2942],{"emptyLinePlaceholder":606},[127,89346,89347,89349,89351],{"class":129,"line":1874},[127,89348,1584],{"class":147},[127,89350,275],{"class":140},[127,89352,51846],{"class":147},[127,89354,89355,89357,89359,89361,89363],{"class":129,"line":2155},[127,89356,52679],{"class":147},[127,89358,19],{"class":140},[127,89360,54029],{"class":147},[127,89362,19],{"class":140},[127,89364,51846],{"class":147},[127,89366,89367,89369,89371],{"class":129,"line":2160},[127,89368,52679],{"class":147},[127,89370,52348],{"class":140},[127,89372,51846],{"class":147},[127,89374,89375,89377,89380],{"class":129,"line":2166},[127,89376,70617],{"class":290},[127,89378,89379],{"class":143}," fn",[127,89381,11395],{"class":147},[127,89383,89384,89387],{"class":129,"line":2171},[127,89385,89386],{"class":290},"      try",[127,89388,148],{"class":147},[127,89390,89391],{"class":129,"line":2185},[127,89392,89393],{"class":133},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[127,89395,89396,89398,89400,89402,89404,89406,89408,89411],{"class":129,"line":2190},[127,89397,61803],{"class":290},[127,89399,7367],{"class":154},[127,89401,14106],{"class":290},[127,89403,54931],{"class":147},[127,89405,54934],{"class":143},[127,89407,681],{"class":147},[127,89409,89410],{"class":781},"'.p'",[127,89412,687],{"class":147},[127,89414,89415,89418,89420],{"class":129,"line":2196},[127,89416,89417],{"class":147},"        p.style.color ",[127,89419,725],{"class":290},[127,89421,67584],{"class":781},[127,89423,89424,89427,89430],{"class":129,"line":2217},[127,89425,89426],{"class":147},"      } ",[127,89428,89429],{"class":290},"catch",[127,89431,89432],{"class":147}," (err) {\n",[127,89434,89435],{"class":129,"line":2222},[127,89436,89437],{"class":133},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[127,89439,89440,89443,89445],{"class":129,"line":2236},[127,89441,89442],{"class":147},"        console.",[127,89444,58780],{"class":143},[127,89446,89447],{"class":147},"(err.message)\n",[127,89449,89450],{"class":129,"line":2241},[127,89451,89452],{"class":133},"        \u002F\u002F 想要中断程序，需要加return\n",[127,89454,89455],{"class":129,"line":2270},[127,89456,89457],{"class":133},"        \u002F\u002F return\n",[127,89459,89460],{"class":129,"line":2275},[127,89461,89462],{"class":133},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[127,89464,89465,89468,89470,89473,89475,89478],{"class":129,"line":2292},[127,89466,89467],{"class":290},"        throw",[127,89469,12120],{"class":290},[127,89471,89472],{"class":143}," Error",[127,89474,681],{"class":147},[127,89476,89477],{"class":781},"'你看看，选择器错误了吧'",[127,89479,687],{"class":147},[127,89481,89482],{"class":129,"line":2297},[127,89483,52933],{"class":147},[127,89485,89486],{"class":129,"line":2302},[127,89487,89488],{"class":133},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[127,89490,89491,89494],{"class":129,"line":2307},[127,89492,89493],{"class":290},"      finally",[127,89495,148],{"class":147},[127,89497,89498,89501,89503,89506],{"class":129,"line":2321},[127,89499,89500],{"class":143},"        alert",[127,89502,681],{"class":147},[127,89504,89505],{"class":781},"'弹出对话框'",[127,89507,687],{"class":147},[127,89509,89510],{"class":129,"line":2326},[127,89511,52933],{"class":147},[127,89513,89514,89516,89518,89520,89522],{"class":129,"line":3119},[127,89515,58777],{"class":147},[127,89517,58780],{"class":143},[127,89519,681],{"class":147},[127,89521,1147],{"class":154},[127,89523,687],{"class":147},[127,89525,89526],{"class":129,"line":3133},[127,89527,2942],{"emptyLinePlaceholder":606},[127,89529,89530],{"class":129,"line":3141},[127,89531,2729],{"class":147},[127,89533,89534],{"class":129,"line":3146},[127,89535,89536],{"class":133},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[127,89538,89539],{"class":129,"line":3152},[127,89540,89541],{"class":133},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[127,89543,89544,89547],{"class":129,"line":3158},[127,89545,89546],{"class":143},"    fn",[127,89548,2518],{"class":147},[127,89550,89551,89553,89555],{"class":129,"line":3163},[127,89552,52952],{"class":147},[127,89554,52348],{"class":140},[127,89556,51846],{"class":147},[127,89558,89559,89561,89563],{"class":129,"line":8490},[127,89560,52321],{"class":147},[127,89562,275],{"class":140},[127,89564,51846],{"class":147},[127,89566,89567],{"class":129,"line":8514},[127,89568,2942],{"emptyLinePlaceholder":606},[127,89570,89571,89573,89575],{"class":129,"line":8519},[127,89572,52321],{"class":147},[127,89574,51175],{"class":140},[127,89576,51846],{"class":147},[19,89578,89579],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[632,89581,89582],{"start":151},[635,89583,89584],{},"debugger",[19,89586,89587],{},[23,89588],{"alt":122,"src":89589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89591,89592],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89594,89596],{"id":89595},"_416-处理this","4.16 处理this",[62,89598,89600],{"id":89599},"_4161-this的指向","4.16.1 this的指向",[632,89602,89603],{},[635,89604,89605],{},"普通函数的this",[19,89607,89608],{},[23,89609],{"alt":122,"src":89610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[632,89612,89613],{"start":137},[635,89614,89615],{},"箭头函数的this",[19,89617,89618],{},[23,89619],{"alt":122,"src":89620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89622,89623],{},[23,89624],{"alt":122,"src":89625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89627,89628],{},[23,89629],{"alt":122,"src":89630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[62,89632,89634],{"id":89633},"_4162-this的改变","4.16.2 this的改变",[19,89636,89637],{},"call() apply() bind()",[632,89639,89640],{},[635,89641,89642],{},"call()",[19,89644,89645],{},[23,89646],{"alt":122,"src":89647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89649,89650],{},"两个作用：①调用函数；②改变this指向",[117,89652,89654],{"className":53602,"code":89653,"language":53604,"meta":122,"style":122},"\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",[124,89655,89656,89664,89672,89676,89681,89685,89690,89695,89700,89704,89709,89717],{"__ignoreMap":122},[127,89657,89658,89660,89662],{"class":129,"line":130},[127,89659,1584],{"class":147},[127,89661,275],{"class":140},[127,89663,51846],{"class":147},[127,89665,89666,89668,89670],{"class":129,"line":137},[127,89667,52679],{"class":147},[127,89669,52348],{"class":140},[127,89671,51846],{"class":147},[127,89673,89674],{"class":129,"line":151},[127,89675,72052],{"class":147},[127,89677,89678],{"class":129,"line":167},[127,89679,89680],{"class":147},"      uname: 'pink'\n",[127,89682,89683],{"class":129,"line":415},[127,89684,2729],{"class":147},[127,89686,89687],{"class":129,"line":421},[127,89688,89689],{"class":147},"    function fn(x, y) {\n",[127,89691,89692],{"class":129,"line":1766},[127,89693,89694],{"class":147},"      console.log(this)  \u002F\u002Fwindow\n",[127,89696,89697],{"class":129,"line":1856},[127,89698,89699],{"class":147},"      console.log(x + y)\n",[127,89701,89702],{"class":129,"line":1862},[127,89703,2729],{"class":147},[127,89705,89706],{"class":129,"line":1874},[127,89707,89708],{"class":147},"    fn.call(obj, 1, 2)\n",[127,89710,89711,89713,89715],{"class":129,"line":2155},[127,89712,52952],{"class":147},[127,89714,52348],{"class":140},[127,89716,51846],{"class":147},[127,89718,89719,89721,89723],{"class":129,"line":2160},[127,89720,52321],{"class":147},[127,89722,275],{"class":140},[127,89724,51846],{"class":147},[19,89726,89727],{},[23,89728],{"alt":122,"src":89729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[632,89731,89732],{"start":137},[635,89733,89734],{},"apply()",[19,89736,89737],{},[23,89738],{"alt":122,"src":89739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89741,89650],{},[19,89743,89744],{},"call传递的是普通参数，而apply必须传递的是数组",[117,89746,89748],{"className":51173,"code":89747,"language":51175,"meta":122,"style":122},"\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",[124,89749,89750,89760,89774,89778,89786,89800,89820,89832,89840,89844,89852,89860,89870,89877,89881,89886,89902,89914,89928,89932,89937,89956,89961,89965,89970,89975,89983,89988,90010,90015,90031,90047,90059,90063,90068,90087,90095,90103,90107],{"__ignoreMap":122},[127,89751,89752,89754,89756,89758],{"class":129,"line":130},[127,89753,51837],{"class":147},[127,89755,51840],{"class":140},[127,89757,51843],{"class":143},[127,89759,51846],{"class":147},[127,89761,89762,89764,89766,89768,89770,89772],{"class":129,"line":137},[127,89763,1584],{"class":147},[127,89765,51175],{"class":140},[127,89767,51855],{"class":143},[127,89769,725],{"class":147},[127,89771,51860],{"class":781},[127,89773,51846],{"class":147},[127,89775,89776],{"class":129,"line":151},[127,89777,2942],{"emptyLinePlaceholder":606},[127,89779,89780,89782,89784],{"class":129,"line":167},[127,89781,1584],{"class":147},[127,89783,51873],{"class":140},[127,89785,51846],{"class":147},[127,89787,89788,89790,89792,89794,89796,89798],{"class":129,"line":415},[127,89789,52679],{"class":147},[127,89791,51883],{"class":140},[127,89793,51886],{"class":143},[127,89795,725],{"class":147},[127,89797,51891],{"class":781},[127,89799,51846],{"class":147},[127,89801,89802,89804,89806,89808,89810,89812,89814,89816,89818],{"class":129,"line":421},[127,89803,52679],{"class":147},[127,89805,51883],{"class":140},[127,89807,15462],{"class":143},[127,89809,725],{"class":147},[127,89811,51930],{"class":781},[127,89813,51910],{"class":143},[127,89815,725],{"class":147},[127,89817,51937],{"class":781},[127,89819,51846],{"class":147},[127,89821,89822,89824,89826,89828,89830],{"class":129,"line":1766},[127,89823,52679],{"class":147},[127,89825,51946],{"class":140},[127,89827,51949],{"class":147},[127,89829,51946],{"class":140},[127,89831,51846],{"class":147},[127,89833,89834,89836,89838],{"class":129,"line":1856},[127,89835,52321],{"class":147},[127,89837,51873],{"class":140},[127,89839,51846],{"class":147},[127,89841,89842],{"class":129,"line":1862},[127,89843,2942],{"emptyLinePlaceholder":606},[127,89845,89846,89848,89850],{"class":129,"line":1874},[127,89847,1584],{"class":147},[127,89849,275],{"class":140},[127,89851,51846],{"class":147},[127,89853,89854,89856,89858],{"class":129,"line":2155},[127,89855,52679],{"class":147},[127,89857,52348],{"class":140},[127,89859,51846],{"class":147},[127,89861,89862,89864,89866,89868],{"class":129,"line":2160},[127,89863,11763],{"class":290},[127,89865,70504],{"class":154},[127,89867,14106],{"class":290},[127,89869,148],{"class":147},[127,89871,89872,89874],{"class":129,"line":2166},[127,89873,72155],{"class":147},[127,89875,89876],{"class":154},"18\n",[127,89878,89879],{"class":129,"line":2171},[127,89880,2729],{"class":147},[127,89882,89883],{"class":129,"line":2185},[127,89884,89885],{"class":133},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[127,89887,89888,89890,89892,89894,89896,89898,89900],{"class":129,"line":2190},[127,89889,70617],{"class":290},[127,89891,89379],{"class":143},[127,89893,681],{"class":147},[127,89895,1494],{"class":5758},[127,89897,12977],{"class":147},[127,89899,1519],{"class":5758},[127,89901,12984],{"class":147},[127,89903,89904,89906,89908,89910,89912],{"class":129,"line":2196},[127,89905,58777],{"class":147},[127,89907,58780],{"class":143},[127,89909,681],{"class":147},[127,89911,87522],{"class":154},[127,89913,687],{"class":147},[127,89915,89916,89918,89920,89923,89925],{"class":129,"line":2217},[127,89917,58777],{"class":147},[127,89919,58780],{"class":143},[127,89921,89922],{"class":147},"(x ",[127,89924,1156],{"class":290},[127,89926,89927],{"class":147}," y)\n",[127,89929,89930],{"class":129,"line":2222},[127,89931,2729],{"class":147},[127,89933,89934],{"class":129,"line":2236},[127,89935,89936],{"class":133},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[127,89938,89939,89942,89945,89948,89950,89952,89954],{"class":129,"line":2241},[127,89940,89941],{"class":147},"    fn.",[127,89943,89944],{"class":143},"apply",[127,89946,89947],{"class":147},"(obj, [",[127,89949,893],{"class":154},[127,89951,12977],{"class":147},[127,89953,530],{"class":154},[127,89955,5199],{"class":147},[127,89957,89958],{"class":129,"line":2270},[127,89959,89960],{"class":133},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[127,89962,89963],{"class":129,"line":2275},[127,89964,2942],{"emptyLinePlaceholder":606},[127,89966,89967],{"class":129,"line":2292},[127,89968,89969],{"class":133},"    \u002F\u002F 使用场景：求数组最大值\n",[127,89971,89972],{"class":129,"line":2297},[127,89973,89974],{"class":133},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[127,89976,89977,89980],{"class":129,"line":2302},[127,89978,89979],{"class":133},"    \u002F\u002F console.log(max)",[127,89981,89982],{"class":133},"   \u002F\u002F3\n",[127,89984,89985],{"class":129,"line":2307},[127,89986,89987],{"class":133},"    \u002F\u002F 指向空或者Math都是可以的\n",[127,89989,89990,89992,89994,89996,89998,90000,90002,90004,90006,90008],{"class":129,"line":2321},[127,89991,11763],{"class":290},[127,89993,58228],{"class":154},[127,89995,14106],{"class":290},[127,89997,52761],{"class":147},[127,89999,986],{"class":154},[127,90001,12977],{"class":147},[127,90003,1179],{"class":154},[127,90005,12977],{"class":147},[127,90007,1210],{"class":154},[127,90009,33786],{"class":147},[127,90011,90012],{"class":129,"line":2326},[127,90013,90014],{"class":133},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[127,90016,90017,90019,90021,90023,90026,90028],{"class":129,"line":3119},[127,90018,11763],{"class":290},[127,90020,6493],{"class":154},[127,90022,14106],{"class":290},[127,90024,90025],{"class":147}," Math.max.",[127,90027,89944],{"class":143},[127,90029,90030],{"class":147},"(Math, arr)\n",[127,90032,90033,90035,90038,90040,90043,90045],{"class":129,"line":3133},[127,90034,11763],{"class":290},[127,90036,90037],{"class":154}," min",[127,90039,14106],{"class":290},[127,90041,90042],{"class":147}," Math.min.",[127,90044,89944],{"class":143},[127,90046,90030],{"class":147},[127,90048,90049,90051,90053,90056],{"class":129,"line":3141},[127,90050,74282],{"class":147},[127,90052,58780],{"class":143},[127,90054,90055],{"class":147},"(max, min)     ",[127,90057,90058],{"class":133},"\u002F\u002F100,4\n",[127,90060,90061],{"class":129,"line":3146},[127,90062,2942],{"emptyLinePlaceholder":606},[127,90064,90065],{"class":129,"line":3152},[127,90066,90067],{"class":133},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[127,90069,90070,90072,90074,90077,90079,90081,90084],{"class":129,"line":3158},[127,90071,74282],{"class":147},[127,90073,58780],{"class":143},[127,90075,90076],{"class":147},"(Max.",[127,90078,6557],{"class":143},[127,90080,681],{"class":147},[127,90082,90083],{"class":290},"...",[127,90085,90086],{"class":147},"arr))\n",[127,90088,90089,90091,90093],{"class":129,"line":3163},[127,90090,52952],{"class":147},[127,90092,52348],{"class":140},[127,90094,51846],{"class":147},[127,90096,90097,90099,90101],{"class":129,"line":8490},[127,90098,52321],{"class":147},[127,90100,275],{"class":140},[127,90102,51846],{"class":147},[127,90104,90105],{"class":129,"line":8514},[127,90106,2942],{"emptyLinePlaceholder":606},[127,90108,90109,90111,90113],{"class":129,"line":8519},[127,90110,52321],{"class":147},[127,90112,51175],{"class":140},[127,90114,51846],{"class":147},[19,90116,90117],{},[23,90118],{"alt":122,"src":90119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[632,90121,90122],{"start":151},[635,90123,90124],{},"bind()",[19,90126,90127],{},[23,90128],{"alt":122,"src":90129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90131,90132],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90134,90135],{},"bind的语法跟call很相似",[117,90137,90139],{"className":53602,"code":90138,"language":53604,"meta":122,"style":122},"\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",[124,90140,90141,90149,90157,90161,90166,90170,90174,90179,90183,90188,90193,90198,90203,90208,90213,90218,90222,90230],{"__ignoreMap":122},[127,90142,90143,90145,90147],{"class":129,"line":130},[127,90144,1584],{"class":147},[127,90146,275],{"class":140},[127,90148,51846],{"class":147},[127,90150,90151,90153,90155],{"class":129,"line":137},[127,90152,52679],{"class":147},[127,90154,52348],{"class":140},[127,90156,51846],{"class":147},[127,90158,90159],{"class":129,"line":151},[127,90160,72052],{"class":147},[127,90162,90163],{"class":129,"line":167},[127,90164,90165],{"class":147},"      age: 18\n",[127,90167,90168],{"class":129,"line":415},[127,90169,2729],{"class":147},[127,90171,90172],{"class":129,"line":421},[127,90173,77672],{"class":147},[127,90175,90176],{"class":129,"line":1766},[127,90177,90178],{"class":147},"      console.log(this)\n",[127,90180,90181],{"class":129,"line":1856},[127,90182,2729],{"class":147},[127,90184,90185],{"class":129,"line":1862},[127,90186,90187],{"class":147},"    \u002F\u002F 1.bind 不会调用函数\n",[127,90189,90190],{"class":129,"line":1874},[127,90191,90192],{"class":147},"    \u002F\u002F 2.bind能改变this的指向\n",[127,90194,90195],{"class":129,"line":2155},[127,90196,90197],{"class":147},"    fn.bind()\n",[127,90199,90200],{"class":129,"line":2160},[127,90201,90202],{"class":147},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[127,90204,90205],{"class":129,"line":2166},[127,90206,90207],{"class":147},"    const fun = fn.bind(obj)\n",[127,90209,90210],{"class":129,"line":2171},[127,90211,90212],{"class":147},"    \u002F\u002F console.log(fun)\n",[127,90214,90215],{"class":129,"line":2185},[127,90216,90217],{"class":147},"    \u002F\u002F 调用,查看this的指向\n",[127,90219,90220],{"class":129,"line":2190},[127,90221,53186],{"class":147},[127,90223,90224,90226,90228],{"class":129,"line":2196},[127,90225,52952],{"class":147},[127,90227,52348],{"class":140},[127,90229,51846],{"class":147},[127,90231,90232,90234,90236],{"class":129,"line":2217},[127,90233,52321],{"class":147},[127,90235,275],{"class":140},[127,90237,51846],{"class":147},[19,90239,90240],{},[23,90241],{"alt":122,"src":90242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[632,90244,90245],{"start":167},[635,90246,90247],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[117,90249,90251],{"className":53602,"code":90250,"language":53604,"meta":122,"style":122},"\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",[124,90252,90253,90261,90274,90282,90287,90291,90296,90301,90306,90311,90316,90321,90326,90331,90335,90343],{"__ignoreMap":122},[127,90254,90255,90257,90259],{"class":129,"line":130},[127,90256,1584],{"class":147},[127,90258,275],{"class":140},[127,90260,51846],{"class":147},[127,90262,90263,90265,90267,90270,90272],{"class":129,"line":137},[127,90264,52679],{"class":147},[127,90266,54422],{"class":140},[127,90268,90269],{"class":147},">禁用\u003C\u002F",[127,90271,54422],{"class":140},[127,90273,51846],{"class":147},[127,90275,90276,90278,90280],{"class":129,"line":151},[127,90277,52679],{"class":147},[127,90279,52348],{"class":140},[127,90281,51846],{"class":147},[127,90283,90284],{"class":129,"line":167},[127,90285,90286],{"class":147},"    const btn = document.querySelector('button')\n",[127,90288,90289],{"class":129,"line":415},[127,90290,59549],{"class":147},[127,90292,90293],{"class":129,"line":421},[127,90294,90295],{"class":147},"      this.disabled = true\n",[127,90297,90298],{"class":129,"line":1766},[127,90299,90300],{"class":147},"      \u002F\u002F 定时器是window进行调用的\n",[127,90302,90303],{"class":129,"line":1856},[127,90304,90305],{"class":147},"      setTimeout(function () {\n",[127,90307,90308],{"class":129,"line":1862},[127,90309,90310],{"class":147},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[127,90312,90313],{"class":129,"line":1874},[127,90314,90315],{"class":147},"        this.disabled = false\n",[127,90317,90318],{"class":129,"line":2155},[127,90319,90320],{"class":147},"      }.bind(this), 2000)\n",[127,90322,90323],{"class":129,"line":2160},[127,90324,90325],{"class":147},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[127,90327,90328],{"class":129,"line":2166},[127,90329,90330],{"class":147},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[127,90332,90333],{"class":129,"line":2171},[127,90334,34001],{"class":147},[127,90336,90337,90339,90341],{"class":129,"line":2185},[127,90338,52952],{"class":147},[127,90340,52348],{"class":140},[127,90342,51846],{"class":147},[127,90344,90345,90347,90349],{"class":129,"line":2190},[127,90346,52321],{"class":147},[127,90348,275],{"class":140},[127,90350,51846],{"class":147},[632,90352,90353],{"start":415},[635,90354,22494],{},[19,90356,90357],{},[23,90358],{"alt":122,"src":90359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90361,90363],{"id":90362},"_417-性能优化","4.17 性能优化",[62,90365,90367],{"id":90366},"_4171-防抖","4.17.1 防抖",[19,90369,90370],{},[23,90371],{"alt":122,"src":90372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90374,90375],{},[30,90376,90377],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90379,90380],{},"防抖实现方式：",[1681,90382,90383],{},[635,90384,90385],{},"lodash 提供了防抖处理",[19,90387,90388],{},"_.debounce(func,[wait=0],[options={}])",[19,90390,90391],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[117,90393,90395],{"className":51173,"code":90394,"language":51175,"meta":122,"style":122},"\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",[124,90396,90397,90407,90421,90425,90433,90447,90467,90479,90487,90493,90503,90515,90527,90538,90550,90560,90570,90583,90587,90595,90603,90607,90615,90633,90651,90659,90678,90688,90697,90708,90713,90717,90722,90727,90732,90757,90765,90773,90777],{"__ignoreMap":122},[127,90398,90399,90401,90403,90405],{"class":129,"line":130},[127,90400,51837],{"class":147},[127,90402,51840],{"class":140},[127,90404,51843],{"class":143},[127,90406,51846],{"class":147},[127,90408,90409,90411,90413,90415,90417,90419],{"class":129,"line":137},[127,90410,1584],{"class":147},[127,90412,51175],{"class":140},[127,90414,51855],{"class":143},[127,90416,725],{"class":147},[127,90418,51860],{"class":781},[127,90420,51846],{"class":147},[127,90422,90423],{"class":129,"line":151},[127,90424,2942],{"emptyLinePlaceholder":606},[127,90426,90427,90429,90431],{"class":129,"line":167},[127,90428,1584],{"class":147},[127,90430,51873],{"class":140},[127,90432,51846],{"class":147},[127,90434,90435,90437,90439,90441,90443,90445],{"class":129,"line":415},[127,90436,52679],{"class":147},[127,90438,51883],{"class":140},[127,90440,51886],{"class":143},[127,90442,725],{"class":147},[127,90444,51891],{"class":781},[127,90446,51846],{"class":147},[127,90448,90449,90451,90453,90455,90457,90459,90461,90463,90465],{"class":129,"line":421},[127,90450,52679],{"class":147},[127,90452,51883],{"class":140},[127,90454,15462],{"class":143},[127,90456,725],{"class":147},[127,90458,51930],{"class":781},[127,90460,51910],{"class":143},[127,90462,725],{"class":147},[127,90464,51937],{"class":781},[127,90466,51846],{"class":147},[127,90468,90469,90471,90473,90475,90477],{"class":129,"line":1766},[127,90470,52679],{"class":147},[127,90472,51946],{"class":140},[127,90474,51949],{"class":147},[127,90476,51946],{"class":140},[127,90478,51846],{"class":147},[127,90480,90481,90483,90485],{"class":129,"line":1856},[127,90482,52679],{"class":147},[127,90484,575],{"class":140},[127,90486,51846],{"class":147},[127,90488,90489,90491],{"class":129,"line":1862},[127,90490,55286],{"class":143},[127,90492,148],{"class":147},[127,90494,90495,90497,90499,90501],{"class":129,"line":1874},[127,90496,73125],{"class":154},[127,90498,158],{"class":147},[127,90500,61038],{"class":154},[127,90502,164],{"class":147},[127,90504,90505,90507,90509,90511,90513],{"class":129,"line":2155},[127,90506,55305],{"class":154},[127,90508,158],{"class":147},[127,90510,2265],{"class":154},[127,90512,291],{"class":290},[127,90514,164],{"class":147},[127,90516,90517,90519,90521,90523,90525],{"class":129,"line":2160},[127,90518,55319],{"class":154},[127,90520,158],{"class":147},[127,90522,2265],{"class":154},[127,90524,291],{"class":290},[127,90526,164],{"class":147},[127,90528,90529,90531,90533,90536],{"class":129,"line":2166},[127,90530,55418],{"class":154},[127,90532,158],{"class":147},[127,90534,90535],{"class":154},"gray",[127,90537,164],{"class":147},[127,90539,90540,90542,90544,90546,90548],{"class":129,"line":2171},[127,90541,55456],{"class":154},[127,90543,158],{"class":147},[127,90545,1499],{"class":154},[127,90547,291],{"class":290},[127,90549,164],{"class":147},[127,90551,90552,90554,90556,90558],{"class":129,"line":2185},[127,90553,57950],{"class":154},[127,90555,158],{"class":147},[127,90557,61375],{"class":154},[127,90559,164],{"class":147},[127,90561,90562,90564,90566,90568],{"class":129,"line":2190},[127,90563,57820],{"class":154},[127,90565,158],{"class":147},[127,90567,161],{"class":154},[127,90569,164],{"class":147},[127,90571,90572,90575,90577,90579,90581],{"class":129,"line":2196},[127,90573,90574],{"class":154},"      padding-top",[127,90576,158],{"class":147},[127,90578,994],{"class":154},[127,90580,291],{"class":290},[127,90582,164],{"class":147},[127,90584,90585],{"class":129,"line":2217},[127,90586,2729],{"class":147},[127,90588,90589,90591,90593],{"class":129,"line":2222},[127,90590,52952],{"class":147},[127,90592,575],{"class":140},[127,90594,51846],{"class":147},[127,90596,90597,90599,90601],{"class":129,"line":2236},[127,90598,52321],{"class":147},[127,90600,51873],{"class":140},[127,90602,51846],{"class":147},[127,90604,90605],{"class":129,"line":2241},[127,90606,2942],{"emptyLinePlaceholder":606},[127,90608,90609,90611,90613],{"class":129,"line":2270},[127,90610,1584],{"class":147},[127,90612,275],{"class":140},[127,90614,51846],{"class":147},[127,90616,90617,90619,90621,90623,90625,90627,90629,90631],{"class":129,"line":2275},[127,90618,52679],{"class":147},[127,90620,52147],{"class":140},[127,90622,54021],{"class":143},[127,90624,725],{"class":147},[127,90626,54026],{"class":781},[127,90628,55848],{"class":147},[127,90630,52147],{"class":140},[127,90632,51846],{"class":147},[127,90634,90635,90637,90639,90641,90643,90645,90647,90649],{"class":129,"line":2292},[127,90636,52679],{"class":147},[127,90638,52348],{"class":140},[127,90640,55773],{"class":143},[127,90642,725],{"class":147},[127,90644,88803],{"class":781},[127,90646,55848],{"class":147},[127,90648,52348],{"class":140},[127,90650,51846],{"class":147},[127,90652,90653,90655,90657],{"class":129,"line":2297},[127,90654,52679],{"class":147},[127,90656,52348],{"class":140},[127,90658,51846],{"class":147},[127,90660,90661,90663,90665,90667,90669,90671,90673,90676],{"class":129,"line":2302},[127,90662,11763],{"class":290},[127,90664,87462],{"class":154},[127,90666,14106],{"class":290},[127,90668,54931],{"class":147},[127,90670,54934],{"class":143},[127,90672,681],{"class":147},[127,90674,90675],{"class":781},"'.box'",[127,90677,687],{"class":147},[127,90679,90680,90682,90684,90686],{"class":129,"line":2307},[127,90681,52754],{"class":290},[127,90683,9980],{"class":147},[127,90685,725],{"class":290},[127,90687,47873],{"class":154},[127,90689,90690,90692,90695],{"class":129,"line":2321},[127,90691,70617],{"class":290},[127,90693,90694],{"class":143}," mouseMove",[127,90696,11395],{"class":147},[127,90698,90699,90702,90704,90706],{"class":129,"line":2326},[127,90700,90701],{"class":147},"      box.innerHTML ",[127,90703,725],{"class":290},[127,90705,3574],{"class":147},[127,90707,3244],{"class":290},[127,90709,90710],{"class":129,"line":3119},[127,90711,90712],{"class":133},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[127,90714,90715],{"class":129,"line":3133},[127,90716,2729],{"class":147},[127,90718,90719],{"class":129,"line":3141},[127,90720,90721],{"class":133},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[127,90723,90724],{"class":129,"line":3146},[127,90725,90726],{"class":133},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[127,90728,90729],{"class":129,"line":3152},[127,90730,90731],{"class":133},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[127,90733,90734,90737,90739,90741,90744,90747,90750,90753,90755],{"class":129,"line":3158},[127,90735,90736],{"class":147},"    box.",[127,90738,58346],{"class":143},[127,90740,681],{"class":147},[127,90742,90743],{"class":781},"'mousemove'",[127,90745,90746],{"class":147},", _.",[127,90748,90749],{"class":143},"debounce",[127,90751,90752],{"class":147},"(mouseMove, ",[127,90754,65607],{"class":154},[127,90756,31037],{"class":147},[127,90758,90759,90761,90763],{"class":129,"line":3163},[127,90760,52952],{"class":147},[127,90762,52348],{"class":140},[127,90764,51846],{"class":147},[127,90766,90767,90769,90771],{"class":129,"line":8490},[127,90768,52321],{"class":147},[127,90770,275],{"class":140},[127,90772,51846],{"class":147},[127,90774,90775],{"class":129,"line":8514},[127,90776,2942],{"emptyLinePlaceholder":606},[127,90778,90779,90781,90783],{"class":129,"line":8519},[127,90780,52321],{"class":147},[127,90782,51175],{"class":140},[127,90784,51846],{"class":147},[1681,90786,90787],{},[635,90788,90789],{},"手写一个防抖函数来处理",[19,90791,90792],{},"防抖的核心就是利用定时器来实现的：",[19,90794,90795],{},"①声明一个定时器变量",[19,90797,90798],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90800,90801],{},"③如果没有定时器则开启定时器，记得存到变量里面",[117,90803,90805],{"className":51173,"code":90804,"language":51175,"meta":122,"style":122},"\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",[124,90806,90807,90817,90831,90835,90843,90857,90877,90889,90897,90903,90913,90925,90937,90947,90959,90969,90979,90991,90995,91003,91011,91015,91023,91041,91059,91067,91085,91095,91103,91113,91117,91121,91125,91130,91135,91140,91145,91150,91155,91173,91180,91185,91193,91198,91211,91227,91237,91242,91246,91250,91270,91274,91279,91284,91289,91294,91302,91310,91314],{"__ignoreMap":122},[127,90808,90809,90811,90813,90815],{"class":129,"line":130},[127,90810,51837],{"class":147},[127,90812,51840],{"class":140},[127,90814,51843],{"class":143},[127,90816,51846],{"class":147},[127,90818,90819,90821,90823,90825,90827,90829],{"class":129,"line":137},[127,90820,1584],{"class":147},[127,90822,51175],{"class":140},[127,90824,51855],{"class":143},[127,90826,725],{"class":147},[127,90828,51860],{"class":781},[127,90830,51846],{"class":147},[127,90832,90833],{"class":129,"line":151},[127,90834,2942],{"emptyLinePlaceholder":606},[127,90836,90837,90839,90841],{"class":129,"line":167},[127,90838,1584],{"class":147},[127,90840,51873],{"class":140},[127,90842,51846],{"class":147},[127,90844,90845,90847,90849,90851,90853,90855],{"class":129,"line":415},[127,90846,52679],{"class":147},[127,90848,51883],{"class":140},[127,90850,51886],{"class":143},[127,90852,725],{"class":147},[127,90854,51891],{"class":781},[127,90856,51846],{"class":147},[127,90858,90859,90861,90863,90865,90867,90869,90871,90873,90875],{"class":129,"line":421},[127,90860,52679],{"class":147},[127,90862,51883],{"class":140},[127,90864,15462],{"class":143},[127,90866,725],{"class":147},[127,90868,51930],{"class":781},[127,90870,51910],{"class":143},[127,90872,725],{"class":147},[127,90874,51937],{"class":781},[127,90876,51846],{"class":147},[127,90878,90879,90881,90883,90885,90887],{"class":129,"line":1766},[127,90880,52679],{"class":147},[127,90882,51946],{"class":140},[127,90884,51949],{"class":147},[127,90886,51946],{"class":140},[127,90888,51846],{"class":147},[127,90890,90891,90893,90895],{"class":129,"line":1856},[127,90892,52679],{"class":147},[127,90894,575],{"class":140},[127,90896,51846],{"class":147},[127,90898,90899,90901],{"class":129,"line":1862},[127,90900,55286],{"class":143},[127,90902,148],{"class":147},[127,90904,90905,90907,90909,90911],{"class":129,"line":1874},[127,90906,73125],{"class":154},[127,90908,158],{"class":147},[127,90910,61038],{"class":154},[127,90912,164],{"class":147},[127,90914,90915,90917,90919,90921,90923],{"class":129,"line":2155},[127,90916,55305],{"class":154},[127,90918,158],{"class":147},[127,90920,2265],{"class":154},[127,90922,291],{"class":290},[127,90924,164],{"class":147},[127,90926,90927,90929,90931,90933,90935],{"class":129,"line":2160},[127,90928,55319],{"class":154},[127,90930,158],{"class":147},[127,90932,2265],{"class":154},[127,90934,291],{"class":290},[127,90936,164],{"class":147},[127,90938,90939,90941,90943,90945],{"class":129,"line":2166},[127,90940,55418],{"class":154},[127,90942,158],{"class":147},[127,90944,90535],{"class":154},[127,90946,164],{"class":147},[127,90948,90949,90951,90953,90955,90957],{"class":129,"line":2171},[127,90950,55456],{"class":154},[127,90952,158],{"class":147},[127,90954,1499],{"class":154},[127,90956,291],{"class":290},[127,90958,164],{"class":147},[127,90960,90961,90963,90965,90967],{"class":129,"line":2185},[127,90962,57950],{"class":154},[127,90964,158],{"class":147},[127,90966,61375],{"class":154},[127,90968,164],{"class":147},[127,90970,90971,90973,90975,90977],{"class":129,"line":2190},[127,90972,57820],{"class":154},[127,90974,158],{"class":147},[127,90976,161],{"class":154},[127,90978,164],{"class":147},[127,90980,90981,90983,90985,90987,90989],{"class":129,"line":2196},[127,90982,90574],{"class":154},[127,90984,158],{"class":147},[127,90986,994],{"class":154},[127,90988,291],{"class":290},[127,90990,164],{"class":147},[127,90992,90993],{"class":129,"line":2217},[127,90994,2729],{"class":147},[127,90996,90997,90999,91001],{"class":129,"line":2222},[127,90998,52952],{"class":147},[127,91000,575],{"class":140},[127,91002,51846],{"class":147},[127,91004,91005,91007,91009],{"class":129,"line":2236},[127,91006,52321],{"class":147},[127,91008,51873],{"class":140},[127,91010,51846],{"class":147},[127,91012,91013],{"class":129,"line":2241},[127,91014,2942],{"emptyLinePlaceholder":606},[127,91016,91017,91019,91021],{"class":129,"line":2270},[127,91018,1584],{"class":147},[127,91020,275],{"class":140},[127,91022,51846],{"class":147},[127,91024,91025,91027,91029,91031,91033,91035,91037,91039],{"class":129,"line":2275},[127,91026,52679],{"class":147},[127,91028,52147],{"class":140},[127,91030,54021],{"class":143},[127,91032,725],{"class":147},[127,91034,54026],{"class":781},[127,91036,55848],{"class":147},[127,91038,52147],{"class":140},[127,91040,51846],{"class":147},[127,91042,91043,91045,91047,91049,91051,91053,91055,91057],{"class":129,"line":2292},[127,91044,52679],{"class":147},[127,91046,52348],{"class":140},[127,91048,55773],{"class":143},[127,91050,725],{"class":147},[127,91052,88803],{"class":781},[127,91054,55848],{"class":147},[127,91056,52348],{"class":140},[127,91058,51846],{"class":147},[127,91060,91061,91063,91065],{"class":129,"line":2297},[127,91062,52679],{"class":147},[127,91064,52348],{"class":140},[127,91066,51846],{"class":147},[127,91068,91069,91071,91073,91075,91077,91079,91081,91083],{"class":129,"line":2302},[127,91070,11763],{"class":290},[127,91072,87462],{"class":154},[127,91074,14106],{"class":290},[127,91076,54931],{"class":147},[127,91078,54934],{"class":143},[127,91080,681],{"class":147},[127,91082,90675],{"class":781},[127,91084,687],{"class":147},[127,91086,91087,91089,91091,91093],{"class":129,"line":2307},[127,91088,52754],{"class":290},[127,91090,9980],{"class":147},[127,91092,725],{"class":290},[127,91094,47873],{"class":154},[127,91096,91097,91099,91101],{"class":129,"line":2321},[127,91098,70617],{"class":290},[127,91100,90694],{"class":143},[127,91102,11395],{"class":147},[127,91104,91105,91107,91109,91111],{"class":129,"line":2326},[127,91106,90701],{"class":147},[127,91108,725],{"class":290},[127,91110,3574],{"class":147},[127,91112,3244],{"class":290},[127,91114,91115],{"class":129,"line":3119},[127,91116,90712],{"class":133},[127,91118,91119],{"class":129,"line":3133},[127,91120,2729],{"class":147},[127,91122,91123],{"class":129,"line":3141},[127,91124,90721],{"class":133},[127,91126,91127],{"class":129,"line":3146},[127,91128,91129],{"class":133},"    \u002F\u002F 手写防抖函数\n",[127,91131,91132],{"class":129,"line":3152},[127,91133,91134],{"class":133},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[127,91136,91137],{"class":129,"line":3158},[127,91138,91139],{"class":133},"    \u002F\u002F 1.声明定时器变量\n",[127,91141,91142],{"class":129,"line":3163},[127,91143,91144],{"class":133},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[127,91146,91147],{"class":129,"line":8490},[127,91148,91149],{"class":133},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[127,91151,91152],{"class":129,"line":8514},[127,91153,91154],{"class":133},"    \u002F\u002F 4.定时器里面写函数调用\n",[127,91156,91157,91159,91162,91164,91167,91169,91171],{"class":129,"line":8519},[127,91158,70617],{"class":290},[127,91160,91161],{"class":143}," debounce",[127,91163,681],{"class":147},[127,91165,91166],{"class":5758},"fn",[127,91168,12977],{"class":147},[127,91170,1394],{"class":5758},[127,91172,12984],{"class":147},[127,91174,91175,91177],{"class":129,"line":8525},[127,91176,80301],{"class":290},[127,91178,91179],{"class":147}," timer\n",[127,91181,91182],{"class":129,"line":8552},[127,91183,91184],{"class":133},"      \u002F\u002F return 返回一个匿名函数\n",[127,91186,91187,91189,91191],{"class":129,"line":8557},[127,91188,74511],{"class":290},[127,91190,59451],{"class":290},[127,91192,54987],{"class":147},[127,91194,91195],{"class":129,"line":8563},[127,91196,91197],{"class":133},"        \u002F\u002F 这里边写第二三四步\n",[127,91199,91200,91202,91205,91208],{"class":129,"line":8575},[127,91201,3039],{"class":290},[127,91203,91204],{"class":147}," (timer) ",[127,91206,91207],{"class":143},"clearTimeout",[127,91209,91210],{"class":147},"(timer)\n",[127,91212,91213,91216,91218,91221,91223,91225],{"class":129,"line":8587},[127,91214,91215],{"class":147},"        timer ",[127,91217,725],{"class":290},[127,91219,91220],{"class":143}," setTimeout",[127,91222,681],{"class":147},[127,91224,54984],{"class":290},[127,91226,54987],{"class":147},[127,91228,91229,91232,91234],{"class":129,"line":8599},[127,91230,91231],{"class":143},"          fn",[127,91233,13592],{"class":147},[127,91235,91236],{"class":133},"\u002F\u002F加小括号调用fn }, t)\n",[127,91238,91239],{"class":129,"line":10258},[127,91240,91241],{"class":147},"        }, t)\n",[127,91243,91244],{"class":129,"line":10283},[127,91245,52933],{"class":147},[127,91247,91248],{"class":129,"line":10306},[127,91249,2729],{"class":147},[127,91251,91252,91254,91256,91258,91260,91262,91264,91266,91268],{"class":129,"line":10330},[127,91253,90736],{"class":147},[127,91255,58346],{"class":143},[127,91257,681],{"class":147},[127,91259,90743],{"class":781},[127,91261,12977],{"class":147},[127,91263,90749],{"class":143},[127,91265,90752],{"class":147},[127,91267,65607],{"class":154},[127,91269,31037],{"class":147},[127,91271,91272],{"class":129,"line":10335},[127,91273,2942],{"emptyLinePlaceholder":606},[127,91275,91276],{"class":129,"line":10340},[127,91277,91278],{"class":133},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[127,91280,91281],{"class":129,"line":10345},[127,91282,91283],{"class":133},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[127,91285,91286],{"class":129,"line":10354},[127,91287,91288],{"class":133},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[127,91290,91291],{"class":129,"line":10359},[127,91292,91293],{"class":133},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[127,91295,91296,91298,91300],{"class":129,"line":10365},[127,91297,52952],{"class":147},[127,91299,52348],{"class":140},[127,91301,51846],{"class":147},[127,91303,91304,91306,91308],{"class":129,"line":10386},[127,91305,52321],{"class":147},[127,91307,275],{"class":140},[127,91309,51846],{"class":147},[127,91311,91312],{"class":129,"line":10392},[127,91313,2942],{"emptyLinePlaceholder":606},[127,91315,91316,91318,91320],{"class":129,"line":10406},[127,91317,52321],{"class":147},[127,91319,51175],{"class":140},[127,91321,51846],{"class":147},[62,91323,91325],{"id":91324},"_4172-节流","4.17.2 节流",[19,91327,91328],{},[23,91329],{"alt":122,"src":91330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91332,91333],{},[23,91334],{"alt":122,"src":91335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91337,91338],{},[30,91339,91340],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91342,91343],{},"实现方式：",[1681,91345,91346],{},[635,91347,91348],{},"lodash 提供的节流函数来处理",[19,91350,91351],{},"_.throttle(func,[wait=0],[options=])",[19,91353,91354],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[117,91356,91358],{"className":51173,"code":91357,"language":51175,"meta":122,"style":122},"\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",[124,91359,91360,91370,91384,91388,91396,91410,91430,91442,91450,91456,91466,91478,91490,91500,91512,91522,91532,91544,91548,91556,91564,91568,91576,91594,91612,91620,91638,91648,91656,91666,91670,91674,91678,91683,91688,91709,91717,91725,91729],{"__ignoreMap":122},[127,91361,91362,91364,91366,91368],{"class":129,"line":130},[127,91363,51837],{"class":147},[127,91365,51840],{"class":140},[127,91367,51843],{"class":143},[127,91369,51846],{"class":147},[127,91371,91372,91374,91376,91378,91380,91382],{"class":129,"line":137},[127,91373,1584],{"class":147},[127,91375,51175],{"class":140},[127,91377,51855],{"class":143},[127,91379,725],{"class":147},[127,91381,51860],{"class":781},[127,91383,51846],{"class":147},[127,91385,91386],{"class":129,"line":151},[127,91387,2942],{"emptyLinePlaceholder":606},[127,91389,91390,91392,91394],{"class":129,"line":167},[127,91391,1584],{"class":147},[127,91393,51873],{"class":140},[127,91395,51846],{"class":147},[127,91397,91398,91400,91402,91404,91406,91408],{"class":129,"line":415},[127,91399,52679],{"class":147},[127,91401,51883],{"class":140},[127,91403,51886],{"class":143},[127,91405,725],{"class":147},[127,91407,51891],{"class":781},[127,91409,51846],{"class":147},[127,91411,91412,91414,91416,91418,91420,91422,91424,91426,91428],{"class":129,"line":421},[127,91413,52679],{"class":147},[127,91415,51883],{"class":140},[127,91417,15462],{"class":143},[127,91419,725],{"class":147},[127,91421,51930],{"class":781},[127,91423,51910],{"class":143},[127,91425,725],{"class":147},[127,91427,51937],{"class":781},[127,91429,51846],{"class":147},[127,91431,91432,91434,91436,91438,91440],{"class":129,"line":1766},[127,91433,52679],{"class":147},[127,91435,51946],{"class":140},[127,91437,51949],{"class":147},[127,91439,51946],{"class":140},[127,91441,51846],{"class":147},[127,91443,91444,91446,91448],{"class":129,"line":1856},[127,91445,52679],{"class":147},[127,91447,575],{"class":140},[127,91449,51846],{"class":147},[127,91451,91452,91454],{"class":129,"line":1862},[127,91453,55286],{"class":143},[127,91455,148],{"class":147},[127,91457,91458,91460,91462,91464],{"class":129,"line":1874},[127,91459,73125],{"class":154},[127,91461,158],{"class":147},[127,91463,61038],{"class":154},[127,91465,164],{"class":147},[127,91467,91468,91470,91472,91474,91476],{"class":129,"line":2155},[127,91469,55305],{"class":154},[127,91471,158],{"class":147},[127,91473,2265],{"class":154},[127,91475,291],{"class":290},[127,91477,164],{"class":147},[127,91479,91480,91482,91484,91486,91488],{"class":129,"line":2160},[127,91481,55319],{"class":154},[127,91483,158],{"class":147},[127,91485,2265],{"class":154},[127,91487,291],{"class":290},[127,91489,164],{"class":147},[127,91491,91492,91494,91496,91498],{"class":129,"line":2166},[127,91493,55418],{"class":154},[127,91495,158],{"class":147},[127,91497,90535],{"class":154},[127,91499,164],{"class":147},[127,91501,91502,91504,91506,91508,91510],{"class":129,"line":2171},[127,91503,55456],{"class":154},[127,91505,158],{"class":147},[127,91507,1499],{"class":154},[127,91509,291],{"class":290},[127,91511,164],{"class":147},[127,91513,91514,91516,91518,91520],{"class":129,"line":2185},[127,91515,57950],{"class":154},[127,91517,158],{"class":147},[127,91519,61375],{"class":154},[127,91521,164],{"class":147},[127,91523,91524,91526,91528,91530],{"class":129,"line":2190},[127,91525,57820],{"class":154},[127,91527,158],{"class":147},[127,91529,161],{"class":154},[127,91531,164],{"class":147},[127,91533,91534,91536,91538,91540,91542],{"class":129,"line":2196},[127,91535,90574],{"class":154},[127,91537,158],{"class":147},[127,91539,994],{"class":154},[127,91541,291],{"class":290},[127,91543,164],{"class":147},[127,91545,91546],{"class":129,"line":2217},[127,91547,2729],{"class":147},[127,91549,91550,91552,91554],{"class":129,"line":2222},[127,91551,52952],{"class":147},[127,91553,575],{"class":140},[127,91555,51846],{"class":147},[127,91557,91558,91560,91562],{"class":129,"line":2236},[127,91559,52321],{"class":147},[127,91561,51873],{"class":140},[127,91563,51846],{"class":147},[127,91565,91566],{"class":129,"line":2241},[127,91567,2942],{"emptyLinePlaceholder":606},[127,91569,91570,91572,91574],{"class":129,"line":2270},[127,91571,1584],{"class":147},[127,91573,275],{"class":140},[127,91575,51846],{"class":147},[127,91577,91578,91580,91582,91584,91586,91588,91590,91592],{"class":129,"line":2275},[127,91579,52679],{"class":147},[127,91581,52147],{"class":140},[127,91583,54021],{"class":143},[127,91585,725],{"class":147},[127,91587,54026],{"class":781},[127,91589,55848],{"class":147},[127,91591,52147],{"class":140},[127,91593,51846],{"class":147},[127,91595,91596,91598,91600,91602,91604,91606,91608,91610],{"class":129,"line":2292},[127,91597,52679],{"class":147},[127,91599,52348],{"class":140},[127,91601,55773],{"class":143},[127,91603,725],{"class":147},[127,91605,88803],{"class":781},[127,91607,55848],{"class":147},[127,91609,52348],{"class":140},[127,91611,51846],{"class":147},[127,91613,91614,91616,91618],{"class":129,"line":2297},[127,91615,52679],{"class":147},[127,91617,52348],{"class":140},[127,91619,51846],{"class":147},[127,91621,91622,91624,91626,91628,91630,91632,91634,91636],{"class":129,"line":2302},[127,91623,11763],{"class":290},[127,91625,87462],{"class":154},[127,91627,14106],{"class":290},[127,91629,54931],{"class":147},[127,91631,54934],{"class":143},[127,91633,681],{"class":147},[127,91635,90675],{"class":781},[127,91637,687],{"class":147},[127,91639,91640,91642,91644,91646],{"class":129,"line":2307},[127,91641,52754],{"class":290},[127,91643,9980],{"class":147},[127,91645,725],{"class":290},[127,91647,47873],{"class":154},[127,91649,91650,91652,91654],{"class":129,"line":2321},[127,91651,70617],{"class":290},[127,91653,90694],{"class":143},[127,91655,11395],{"class":147},[127,91657,91658,91660,91662,91664],{"class":129,"line":2326},[127,91659,90701],{"class":147},[127,91661,725],{"class":290},[127,91663,3574],{"class":147},[127,91665,3244],{"class":290},[127,91667,91668],{"class":129,"line":3119},[127,91669,90712],{"class":133},[127,91671,91672],{"class":129,"line":3133},[127,91673,2729],{"class":147},[127,91675,91676],{"class":129,"line":3141},[127,91677,90721],{"class":133},[127,91679,91680],{"class":129,"line":3146},[127,91681,91682],{"class":133},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[127,91684,91685],{"class":129,"line":3152},[127,91686,91687],{"class":133},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[127,91689,91690,91692,91694,91696,91698,91700,91703,91705,91707],{"class":129,"line":3158},[127,91691,90736],{"class":147},[127,91693,58346],{"class":143},[127,91695,681],{"class":147},[127,91697,90743],{"class":781},[127,91699,90746],{"class":147},[127,91701,91702],{"class":143},"throttle",[127,91704,90752],{"class":147},[127,91706,65607],{"class":154},[127,91708,31037],{"class":147},[127,91710,91711,91713,91715],{"class":129,"line":3163},[127,91712,52952],{"class":147},[127,91714,52348],{"class":140},[127,91716,51846],{"class":147},[127,91718,91719,91721,91723],{"class":129,"line":8490},[127,91720,52321],{"class":147},[127,91722,275],{"class":140},[127,91724,51846],{"class":147},[127,91726,91727],{"class":129,"line":8514},[127,91728,2942],{"emptyLinePlaceholder":606},[127,91730,91731,91733,91735],{"class":129,"line":8519},[127,91732,52321],{"class":147},[127,91734,51175],{"class":140},[127,91736,51846],{"class":147},[1681,91738,91739],{},[635,91740,91741],{},"手写一个节流函数来处理",[19,91743,71481],{},[19,91745,90795],{},[19,91747,91748],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91750,91751],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[117,91753,91755],{"className":51173,"code":91754,"language":51175,"meta":122,"style":122},"\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",[124,91756,91757,91767,91781,91785,91793,91807,91827,91839,91847,91853,91863,91875,91887,91897,91909,91919,91929,91941,91945,91953,91961,91965,91973,91991,92009,92017,92035,92045,92053,92063,92067,92071,92075,92080,92085,92090,92095,92100,92105,92122,92128,92136,92147,92162,92169,92174,92179,92189,92194,92199,92204,92208,92212,92216,92236,92244,92252,92256],{"__ignoreMap":122},[127,91758,91759,91761,91763,91765],{"class":129,"line":130},[127,91760,51837],{"class":147},[127,91762,51840],{"class":140},[127,91764,51843],{"class":143},[127,91766,51846],{"class":147},[127,91768,91769,91771,91773,91775,91777,91779],{"class":129,"line":137},[127,91770,1584],{"class":147},[127,91772,51175],{"class":140},[127,91774,51855],{"class":143},[127,91776,725],{"class":147},[127,91778,51860],{"class":781},[127,91780,51846],{"class":147},[127,91782,91783],{"class":129,"line":151},[127,91784,2942],{"emptyLinePlaceholder":606},[127,91786,91787,91789,91791],{"class":129,"line":167},[127,91788,1584],{"class":147},[127,91790,51873],{"class":140},[127,91792,51846],{"class":147},[127,91794,91795,91797,91799,91801,91803,91805],{"class":129,"line":415},[127,91796,52679],{"class":147},[127,91798,51883],{"class":140},[127,91800,51886],{"class":143},[127,91802,725],{"class":147},[127,91804,51891],{"class":781},[127,91806,51846],{"class":147},[127,91808,91809,91811,91813,91815,91817,91819,91821,91823,91825],{"class":129,"line":421},[127,91810,52679],{"class":147},[127,91812,51883],{"class":140},[127,91814,15462],{"class":143},[127,91816,725],{"class":147},[127,91818,51930],{"class":781},[127,91820,51910],{"class":143},[127,91822,725],{"class":147},[127,91824,51937],{"class":781},[127,91826,51846],{"class":147},[127,91828,91829,91831,91833,91835,91837],{"class":129,"line":1766},[127,91830,52679],{"class":147},[127,91832,51946],{"class":140},[127,91834,51949],{"class":147},[127,91836,51946],{"class":140},[127,91838,51846],{"class":147},[127,91840,91841,91843,91845],{"class":129,"line":1856},[127,91842,52679],{"class":147},[127,91844,575],{"class":140},[127,91846,51846],{"class":147},[127,91848,91849,91851],{"class":129,"line":1862},[127,91850,55286],{"class":143},[127,91852,148],{"class":147},[127,91854,91855,91857,91859,91861],{"class":129,"line":1874},[127,91856,73125],{"class":154},[127,91858,158],{"class":147},[127,91860,61038],{"class":154},[127,91862,164],{"class":147},[127,91864,91865,91867,91869,91871,91873],{"class":129,"line":2155},[127,91866,55305],{"class":154},[127,91868,158],{"class":147},[127,91870,2265],{"class":154},[127,91872,291],{"class":290},[127,91874,164],{"class":147},[127,91876,91877,91879,91881,91883,91885],{"class":129,"line":2160},[127,91878,55319],{"class":154},[127,91880,158],{"class":147},[127,91882,2265],{"class":154},[127,91884,291],{"class":290},[127,91886,164],{"class":147},[127,91888,91889,91891,91893,91895],{"class":129,"line":2166},[127,91890,55418],{"class":154},[127,91892,158],{"class":147},[127,91894,90535],{"class":154},[127,91896,164],{"class":147},[127,91898,91899,91901,91903,91905,91907],{"class":129,"line":2171},[127,91900,55456],{"class":154},[127,91902,158],{"class":147},[127,91904,1499],{"class":154},[127,91906,291],{"class":290},[127,91908,164],{"class":147},[127,91910,91911,91913,91915,91917],{"class":129,"line":2185},[127,91912,57950],{"class":154},[127,91914,158],{"class":147},[127,91916,61375],{"class":154},[127,91918,164],{"class":147},[127,91920,91921,91923,91925,91927],{"class":129,"line":2190},[127,91922,57820],{"class":154},[127,91924,158],{"class":147},[127,91926,161],{"class":154},[127,91928,164],{"class":147},[127,91930,91931,91933,91935,91937,91939],{"class":129,"line":2196},[127,91932,90574],{"class":154},[127,91934,158],{"class":147},[127,91936,994],{"class":154},[127,91938,291],{"class":290},[127,91940,164],{"class":147},[127,91942,91943],{"class":129,"line":2217},[127,91944,2729],{"class":147},[127,91946,91947,91949,91951],{"class":129,"line":2222},[127,91948,52952],{"class":147},[127,91950,575],{"class":140},[127,91952,51846],{"class":147},[127,91954,91955,91957,91959],{"class":129,"line":2236},[127,91956,52321],{"class":147},[127,91958,51873],{"class":140},[127,91960,51846],{"class":147},[127,91962,91963],{"class":129,"line":2241},[127,91964,2942],{"emptyLinePlaceholder":606},[127,91966,91967,91969,91971],{"class":129,"line":2270},[127,91968,1584],{"class":147},[127,91970,275],{"class":140},[127,91972,51846],{"class":147},[127,91974,91975,91977,91979,91981,91983,91985,91987,91989],{"class":129,"line":2275},[127,91976,52679],{"class":147},[127,91978,52147],{"class":140},[127,91980,54021],{"class":143},[127,91982,725],{"class":147},[127,91984,54026],{"class":781},[127,91986,55848],{"class":147},[127,91988,52147],{"class":140},[127,91990,51846],{"class":147},[127,91992,91993,91995,91997,91999,92001,92003,92005,92007],{"class":129,"line":2292},[127,91994,52679],{"class":147},[127,91996,52348],{"class":140},[127,91998,55773],{"class":143},[127,92000,725],{"class":147},[127,92002,88803],{"class":781},[127,92004,55848],{"class":147},[127,92006,52348],{"class":140},[127,92008,51846],{"class":147},[127,92010,92011,92013,92015],{"class":129,"line":2297},[127,92012,52679],{"class":147},[127,92014,52348],{"class":140},[127,92016,51846],{"class":147},[127,92018,92019,92021,92023,92025,92027,92029,92031,92033],{"class":129,"line":2302},[127,92020,11763],{"class":290},[127,92022,87462],{"class":154},[127,92024,14106],{"class":290},[127,92026,54931],{"class":147},[127,92028,54934],{"class":143},[127,92030,681],{"class":147},[127,92032,90675],{"class":781},[127,92034,687],{"class":147},[127,92036,92037,92039,92041,92043],{"class":129,"line":2307},[127,92038,52754],{"class":290},[127,92040,9980],{"class":147},[127,92042,725],{"class":290},[127,92044,47873],{"class":154},[127,92046,92047,92049,92051],{"class":129,"line":2321},[127,92048,70617],{"class":290},[127,92050,90694],{"class":143},[127,92052,11395],{"class":147},[127,92054,92055,92057,92059,92061],{"class":129,"line":2326},[127,92056,90701],{"class":147},[127,92058,725],{"class":290},[127,92060,3574],{"class":147},[127,92062,3244],{"class":290},[127,92064,92065],{"class":129,"line":3119},[127,92066,90712],{"class":133},[127,92068,92069],{"class":129,"line":3133},[127,92070,2729],{"class":147},[127,92072,92073],{"class":129,"line":3141},[127,92074,90721],{"class":133},[127,92076,92077],{"class":129,"line":3146},[127,92078,92079],{"class":133},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[127,92081,92082],{"class":129,"line":3152},[127,92083,92084],{"class":133},"    \u002F\u002F 1.声明一个定时器变量\n",[127,92086,92087],{"class":129,"line":3158},[127,92088,92089],{"class":133},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[127,92091,92092],{"class":129,"line":3163},[127,92093,92094],{"class":133},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[127,92096,92097],{"class":129,"line":8490},[127,92098,92099],{"class":133},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[127,92101,92102],{"class":129,"line":8514},[127,92103,92104],{"class":133},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[127,92106,92107,92109,92112,92114,92116,92118,92120],{"class":129,"line":8519},[127,92108,70617],{"class":290},[127,92110,92111],{"class":143}," throttle",[127,92113,681],{"class":147},[127,92115,91166],{"class":5758},[127,92117,12977],{"class":147},[127,92119,1394],{"class":5758},[127,92121,12984],{"class":147},[127,92123,92124,92126],{"class":129,"line":8525},[127,92125,80301],{"class":290},[127,92127,91179],{"class":147},[127,92129,92130,92132,92134],{"class":129,"line":8552},[127,92131,74511],{"class":290},[127,92133,59451],{"class":290},[127,92135,54987],{"class":147},[127,92137,92138,92140,92142,92144],{"class":129,"line":8557},[127,92139,3039],{"class":290},[127,92141,2201],{"class":147},[127,92143,902],{"class":290},[127,92145,92146],{"class":147},"timer) {\n",[127,92148,92149,92152,92154,92156,92158,92160],{"class":129,"line":8563},[127,92150,92151],{"class":147},"          timer ",[127,92153,725],{"class":290},[127,92155,91220],{"class":143},[127,92157,681],{"class":147},[127,92159,54984],{"class":290},[127,92161,54987],{"class":147},[127,92163,92164,92167],{"class":129,"line":8575},[127,92165,92166],{"class":143},"            fn",[127,92168,2518],{"class":147},[127,92170,92171],{"class":129,"line":8587},[127,92172,92173],{"class":133},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[127,92175,92176],{"class":129,"line":8599},[127,92177,92178],{"class":133},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[127,92180,92181,92184,92186],{"class":129,"line":10258},[127,92182,92183],{"class":147},"            timer ",[127,92185,725],{"class":290},[127,92187,92188],{"class":154}," null\n",[127,92190,92191],{"class":129,"line":10283},[127,92192,92193],{"class":133},"            \u002F\u002F 不能用clearTimeout(timer)\n",[127,92195,92196],{"class":129,"line":10306},[127,92197,92198],{"class":133},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[127,92200,92201],{"class":129,"line":10330},[127,92202,92203],{"class":147},"          }, t)\n",[127,92205,92206],{"class":129,"line":10335},[127,92207,3071],{"class":147},[127,92209,92210],{"class":129,"line":10340},[127,92211,52933],{"class":147},[127,92213,92214],{"class":129,"line":10345},[127,92215,2729],{"class":147},[127,92217,92218,92220,92222,92224,92226,92228,92230,92232,92234],{"class":129,"line":10354},[127,92219,90736],{"class":147},[127,92221,58346],{"class":143},[127,92223,681],{"class":147},[127,92225,90743],{"class":781},[127,92227,12977],{"class":147},[127,92229,91702],{"class":143},[127,92231,90752],{"class":147},[127,92233,65607],{"class":154},[127,92235,31037],{"class":147},[127,92237,92238,92240,92242],{"class":129,"line":10359},[127,92239,52952],{"class":147},[127,92241,52348],{"class":140},[127,92243,51846],{"class":147},[127,92245,92246,92248,92250],{"class":129,"line":10365},[127,92247,52321],{"class":147},[127,92249,275],{"class":140},[127,92251,51846],{"class":147},[127,92253,92254],{"class":129,"line":10386},[127,92255,2942],{"emptyLinePlaceholder":606},[127,92257,92258,92260,92262],{"class":129,"line":10392},[127,92259,52321],{"class":147},[127,92261,51175],{"class":140},[127,92263,51846],{"class":147},[62,92265,92267],{"id":92266},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[117,92269,92271],{"className":53602,"code":92270,"language":53604,"meta":122,"style":122},"\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",[124,92272,92273,92281,92289,92294,92299,92304,92309,92313,92321],{"__ignoreMap":122},[127,92274,92275,92277,92279],{"class":129,"line":130},[127,92276,1584],{"class":147},[127,92278,275],{"class":140},[127,92280,51846],{"class":147},[127,92282,92283,92285,92287],{"class":129,"line":137},[127,92284,52679],{"class":147},[127,92286,52348],{"class":140},[127,92288,51846],{"class":147},[127,92290,92291],{"class":129,"line":151},[127,92292,92293],{"class":147},"    let timer = null\n",[127,92295,92296],{"class":129,"line":167},[127,92297,92298],{"class":147},"    timer = setTimeout(() => {\n",[127,92300,92301],{"class":129,"line":415},[127,92302,92303],{"class":147},"      clearTimeout(timer)\n",[127,92305,92306],{"class":129,"line":421},[127,92307,92308],{"class":147},"      console.log(timer)\n",[127,92310,92311],{"class":129,"line":1766},[127,92312,60758],{"class":147},[127,92314,92315,92317,92319],{"class":129,"line":1856},[127,92316,52952],{"class":147},[127,92318,52348],{"class":140},[127,92320,51846],{"class":147},[127,92322,92323,92325,92327],{"class":129,"line":1862},[127,92324,52321],{"class":147},[127,92326,275],{"class":140},[127,92328,51846],{"class":147},[19,92330,92331],{},"输出为1",[19,92333,92334],{},"在开启的定时器里边写清除定时器",[19,92336,92337],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[62,92339,92341],{"id":92340},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92343,92344],{},"页面打开，可以记录上一次的视频播放位置",[19,92346,92347],{},[23,92348],{"alt":122,"src":92349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92351,92352],{},[23,92353],{"alt":122,"src":92354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[117,92356,92358],{"className":51173,"code":92357,"language":51175,"meta":122,"style":122},"\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",[124,92359,92360,92370,92384,92388,92396,92410,92430,92450,92472,92485,92493,92499,92509,92519,92529,92533,92537,92544,92557,92569,92573,92577,92587,92599,92613,92617,92621,92628,92638,92651,92663,92673,92683,92699,92711,92715,92719,92727,92737,92749,92759,92769,92779,92783,92787,92797,92808,92812,92820,92828,92832,92840,92855,92870,92885,92906,92914,92922,92937,92959,92967,92982,93008,93034,93060,93068,93076,93095,93103,93108,93127,93132,93150,93155,93160,93168,93173,93187,93195,93200,93217,93221,93226,93248,93252,93260,93268,93272],{"__ignoreMap":122},[127,92361,92362,92364,92366,92368],{"class":129,"line":130},[127,92363,51837],{"class":147},[127,92365,51840],{"class":140},[127,92367,51843],{"class":143},[127,92369,51846],{"class":147},[127,92371,92372,92374,92376,92378,92380,92382],{"class":129,"line":137},[127,92373,1584],{"class":147},[127,92375,51175],{"class":140},[127,92377,51855],{"class":143},[127,92379,725],{"class":147},[127,92381,51860],{"class":781},[127,92383,51846],{"class":147},[127,92385,92386],{"class":129,"line":151},[127,92387,2942],{"emptyLinePlaceholder":606},[127,92389,92390,92392,92394],{"class":129,"line":167},[127,92391,1584],{"class":147},[127,92393,51873],{"class":140},[127,92395,51846],{"class":147},[127,92397,92398,92400,92402,92404,92406,92408],{"class":129,"line":415},[127,92399,52679],{"class":147},[127,92401,51883],{"class":140},[127,92403,51886],{"class":143},[127,92405,725],{"class":147},[127,92407,51891],{"class":781},[127,92409,59660],{"class":147},[127,92411,92412,92414,92416,92418,92420,92422,92424,92426,92428],{"class":129,"line":421},[127,92413,52679],{"class":147},[127,92415,51883],{"class":140},[127,92417,51902],{"class":143},[127,92419,725],{"class":147},[127,92421,51907],{"class":781},[127,92423,51910],{"class":143},[127,92425,725],{"class":147},[127,92427,51915],{"class":781},[127,92429,59660],{"class":147},[127,92431,92432,92434,92436,92438,92440,92442,92444,92446,92448],{"class":129,"line":1766},[127,92433,52679],{"class":147},[127,92435,51883],{"class":140},[127,92437,15462],{"class":143},[127,92439,725],{"class":147},[127,92441,51930],{"class":781},[127,92443,51910],{"class":143},[127,92445,725],{"class":147},[127,92447,51937],{"class":781},[127,92449,59660],{"class":147},[127,92451,92452,92454,92456,92458,92460,92463,92465,92467,92470],{"class":129,"line":1856},[127,92453,52679],{"class":147},[127,92455,51883],{"class":140},[127,92457,15462],{"class":143},[127,92459,725],{"class":147},[127,92461,92462],{"class":781},"\"referrer\"",[127,92464,51910],{"class":143},[127,92466,725],{"class":147},[127,92468,92469],{"class":781},"\"never\"",[127,92471,59660],{"class":147},[127,92473,92474,92476,92478,92481,92483],{"class":129,"line":1862},[127,92475,52679],{"class":147},[127,92477,51946],{"class":140},[127,92479,92480],{"class":147},">综合案例\u003C\u002F",[127,92482,51946],{"class":140},[127,92484,51846],{"class":147},[127,92486,92487,92489,92491],{"class":129,"line":1874},[127,92488,52679],{"class":147},[127,92490,575],{"class":140},[127,92492,51846],{"class":147},[127,92494,92495,92497],{"class":129,"line":2155},[127,92496,6945],{"class":140},[127,92498,148],{"class":147},[127,92500,92501,92503,92505,92507],{"class":129,"line":2160},[127,92502,55230],{"class":154},[127,92504,158],{"class":147},[127,92506,867],{"class":154},[127,92508,164],{"class":147},[127,92510,92511,92513,92515,92517],{"class":129,"line":2166},[127,92512,55241],{"class":154},[127,92514,158],{"class":147},[127,92516,867],{"class":154},[127,92518,164],{"class":147},[127,92520,92521,92523,92525,92527],{"class":129,"line":2171},[127,92522,73125],{"class":154},[127,92524,158],{"class":147},[127,92526,61038],{"class":154},[127,92528,164],{"class":147},[127,92530,92531],{"class":129,"line":2185},[127,92532,2729],{"class":147},[127,92534,92535],{"class":129,"line":2190},[127,92536,2942],{"emptyLinePlaceholder":606},[127,92538,92539,92542],{"class":129,"line":2196},[127,92540,92541],{"class":143},"    .container",[127,92543,148],{"class":147},[127,92545,92546,92548,92550,92553,92555],{"class":129,"line":2217},[127,92547,55305],{"class":154},[127,92549,158],{"class":147},[127,92551,92552],{"class":154},"1200",[127,92554,291],{"class":290},[127,92556,164],{"class":147},[127,92558,92559,92561,92563,92565,92567],{"class":129,"line":2222},[127,92560,55241],{"class":154},[127,92562,158],{"class":147},[127,92564,867],{"class":154},[127,92566,52093],{"class":154},[127,92568,164],{"class":147},[127,92570,92571],{"class":129,"line":2236},[127,92572,2729],{"class":147},[127,92574,92575],{"class":129,"line":2241},[127,92576,2942],{"emptyLinePlaceholder":606},[127,92578,92579,92582,92585],{"class":129,"line":2270},[127,92580,92581],{"class":143},"    .video",[127,92583,92584],{"class":140}," video",[127,92586,148],{"class":147},[127,92588,92589,92591,92593,92595,92597],{"class":129,"line":2275},[127,92590,55305],{"class":154},[127,92592,158],{"class":147},[127,92594,986],{"class":154},[127,92596,1003],{"class":290},[127,92598,164],{"class":147},[127,92600,92601,92603,92605,92607,92609,92611],{"class":129,"line":2292},[127,92602,55230],{"class":154},[127,92604,158],{"class":147},[127,92606,1374],{"class":154},[127,92608,291],{"class":290},[127,92610,4635],{"class":154},[127,92612,164],{"class":147},[127,92614,92615],{"class":129,"line":2297},[127,92616,2729],{"class":147},[127,92618,92619],{"class":129,"line":2302},[127,92620,2942],{"emptyLinePlaceholder":606},[127,92622,92623,92626],{"class":129,"line":2307},[127,92624,92625],{"class":143},"    .elevator",[127,92627,148],{"class":147},[127,92629,92630,92632,92634,92636],{"class":129,"line":2321},[127,92631,55293],{"class":154},[127,92633,158],{"class":147},[127,92635,86762],{"class":154},[127,92637,164],{"class":147},[127,92639,92640,92642,92644,92647,92649],{"class":129,"line":2326},[127,92641,55481],{"class":154},[127,92643,158],{"class":147},[127,92645,92646],{"class":154},"280",[127,92648,291],{"class":290},[127,92650,164],{"class":147},[127,92652,92653,92655,92657,92659,92661],{"class":129,"line":3119},[127,92654,86956],{"class":154},[127,92656,158],{"class":147},[127,92658,1374],{"class":154},[127,92660,291],{"class":290},[127,92662,164],{"class":147},[127,92664,92665,92667,92669,92671],{"class":129,"line":3133},[127,92666,86769],{"class":154},[127,92668,158],{"class":147},[127,92670,86774],{"class":154},[127,92672,164],{"class":147},[127,92674,92675,92677,92679,92681],{"class":129,"line":3141},[127,92676,62254],{"class":154},[127,92678,158],{"class":147},[127,92680,61375],{"class":154},[127,92682,164],{"class":147},[127,92684,92685,92687,92689,92691,92693,92695,92697],{"class":129,"line":3146},[127,92686,62510],{"class":154},[127,92688,158],{"class":147},[127,92690,893],{"class":154},[127,92692,291],{"class":290},[127,92694,52058],{"class":154},[127,92696,62777],{"class":154},[127,92698,164],{"class":147},[127,92700,92701,92703,92705,92707,92709],{"class":129,"line":3152},[127,92702,55305],{"class":154},[127,92704,158],{"class":147},[127,92706,1581],{"class":154},[127,92708,291],{"class":290},[127,92710,164],{"class":147},[127,92712,92713],{"class":129,"line":3158},[127,92714,2729],{"class":147},[127,92716,92717],{"class":129,"line":3163},[127,92718,2942],{"emptyLinePlaceholder":606},[127,92720,92721,92723,92725],{"class":129,"line":8490},[127,92722,92625],{"class":143},[127,92724,1943],{"class":140},[127,92726,148],{"class":147},[127,92728,92729,92731,92733,92735],{"class":129,"line":8514},[127,92730,55543],{"class":154},[127,92732,158],{"class":147},[127,92734,61402],{"class":154},[127,92736,164],{"class":147},[127,92738,92739,92741,92743,92745,92747],{"class":129,"line":8519},[127,92740,55230],{"class":154},[127,92742,158],{"class":147},[127,92744,1121],{"class":154},[127,92746,291],{"class":290},[127,92748,164],{"class":147},[127,92750,92751,92753,92755,92757],{"class":129,"line":8525},[127,92752,64503],{"class":154},[127,92754,158],{"class":147},[127,92756,469],{"class":154},[127,92758,164],{"class":147},[127,92760,92761,92763,92765,92767],{"class":129,"line":8552},[127,92762,57820],{"class":154},[127,92764,158],{"class":147},[127,92766,161],{"class":154},[127,92768,164],{"class":147},[127,92770,92771,92773,92775,92777],{"class":129,"line":8557},[127,92772,57950],{"class":154},[127,92774,158],{"class":147},[127,92776,62603],{"class":154},[127,92778,164],{"class":147},[127,92780,92781],{"class":129,"line":8563},[127,92782,2729],{"class":147},[127,92784,92785],{"class":129,"line":8575},[127,92786,2942],{"emptyLinePlaceholder":606},[127,92788,92789,92791,92793,92795],{"class":129,"line":8587},[127,92790,92625],{"class":143},[127,92792,1943],{"class":140},[127,92794,64557],{"class":143},[127,92796,148],{"class":147},[127,92798,92799,92801,92803,92806],{"class":129,"line":8599},[127,92800,57950],{"class":154},[127,92802,158],{"class":147},[127,92804,92805],{"class":154},"#1286ff",[127,92807,164],{"class":147},[127,92809,92810],{"class":129,"line":10258},[127,92811,2729],{"class":147},[127,92813,92814,92816,92818],{"class":129,"line":10283},[127,92815,52952],{"class":147},[127,92817,575],{"class":140},[127,92819,51846],{"class":147},[127,92821,92822,92824,92826],{"class":129,"line":10306},[127,92823,52321],{"class":147},[127,92825,51873],{"class":140},[127,92827,51846],{"class":147},[127,92829,92830],{"class":129,"line":10330},[127,92831,2942],{"emptyLinePlaceholder":606},[127,92833,92834,92836,92838],{"class":129,"line":10335},[127,92835,1584],{"class":147},[127,92837,275],{"class":140},[127,92839,51846],{"class":147},[127,92841,92842,92844,92846,92848,92850,92853],{"class":129,"line":10340},[127,92843,52679],{"class":147},[127,92845,52147],{"class":140},[127,92847,54021],{"class":143},[127,92849,725],{"class":147},[127,92851,92852],{"class":781},"\"container\"",[127,92854,51846],{"class":147},[127,92856,92857,92859,92861,92863,92865,92868],{"class":129,"line":10345},[127,92858,51880],{"class":147},[127,92860,52147],{"class":140},[127,92862,54021],{"class":143},[127,92864,725],{"class":147},[127,92866,92867],{"class":781},"\"header\"",[127,92869,51846],{"class":147},[127,92871,92872,92874,92876,92878,92880,92883],{"class":129,"line":10354},[127,92873,55768],{"class":147},[127,92875,457],{"class":140},[127,92877,61590],{"class":143},[127,92879,725],{"class":147},[127,92881,92882],{"class":781},"\"http:\u002F\u002Fpip.itcast.cn\"",[127,92884,51846],{"class":147},[127,92886,92887,92889,92891,92893,92895,92898,92900,92902,92904],{"class":129,"line":10359},[127,92888,55836],{"class":147},[127,92890,23],{"class":140},[127,92892,55773],{"class":143},[127,92894,725],{"class":147},[127,92896,92897],{"class":781},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[127,92899,55781],{"class":143},[127,92901,725],{"class":147},[127,92903,8194],{"class":781},[127,92905,59660],{"class":147},[127,92907,92908,92910,92912],{"class":129,"line":10365},[127,92909,55941],{"class":147},[127,92911,457],{"class":140},[127,92913,51846],{"class":147},[127,92915,92916,92918,92920],{"class":129,"line":10386},[127,92917,52312],{"class":147},[127,92919,52147],{"class":140},[127,92921,51846],{"class":147},[127,92923,92924,92926,92928,92930,92932,92935],{"class":129,"line":10392},[127,92925,51880],{"class":147},[127,92927,52147],{"class":140},[127,92929,54021],{"class":143},[127,92931,725],{"class":147},[127,92933,92934],{"class":781},"\"video\"",[127,92936,51846],{"class":147},[127,92938,92939,92941,92943,92945,92947,92950,92953,92955,92957],{"class":129,"line":10406},[127,92940,55768],{"class":147},[127,92942,28723],{"class":140},[127,92944,55773],{"class":143},[127,92946,725],{"class":147},[127,92948,92949],{"class":781},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[127,92951,92952],{"class":143}," controls",[127,92954,55848],{"class":147},[127,92956,28723],{"class":140},[127,92958,51846],{"class":147},[127,92960,92961,92963,92965],{"class":129,"line":10412},[127,92962,52312],{"class":147},[127,92964,52147],{"class":140},[127,92966,51846],{"class":147},[127,92968,92969,92971,92973,92975,92977,92980],{"class":129,"line":10439},[127,92970,51880],{"class":147},[127,92972,52147],{"class":140},[127,92974,54021],{"class":143},[127,92976,725],{"class":147},[127,92978,92979],{"class":781},"\"elevator\"",[127,92981,51846],{"class":147},[127,92983,92984,92986,92988,92990,92992,92994,92997,92999,93001,93004,93006],{"class":129,"line":10448},[127,92985,55768],{"class":147},[127,92987,457],{"class":140},[127,92989,61590],{"class":143},[127,92991,725],{"class":147},[127,92993,64769],{"class":781},[127,92995,92996],{"class":143}," data-ref",[127,92998,725],{"class":147},[127,93000,92934],{"class":781},[127,93002,93003],{"class":147},">视频介绍\u003C\u002F",[127,93005,457],{"class":140},[127,93007,51846],{"class":147},[127,93009,93010,93012,93014,93016,93018,93020,93022,93024,93027,93030,93032],{"class":129,"line":10454},[127,93011,55768],{"class":147},[127,93013,457],{"class":140},[127,93015,61590],{"class":143},[127,93017,725],{"class":147},[127,93019,64769],{"class":781},[127,93021,92996],{"class":143},[127,93023,725],{"class":147},[127,93025,93026],{"class":781},"\"intro\"",[127,93028,93029],{"class":147},">课程简介\u003C\u002F",[127,93031,457],{"class":140},[127,93033,51846],{"class":147},[127,93035,93036,93038,93040,93042,93044,93046,93048,93050,93053,93056,93058],{"class":129,"line":10462},[127,93037,55768],{"class":147},[127,93039,457],{"class":140},[127,93041,61590],{"class":143},[127,93043,725],{"class":147},[127,93045,64769],{"class":781},[127,93047,92996],{"class":143},[127,93049,725],{"class":147},[127,93051,93052],{"class":781},"\"outline\"",[127,93054,93055],{"class":147},">评论列表\u003C\u002F",[127,93057,457],{"class":140},[127,93059,51846],{"class":147},[127,93061,93062,93064,93066],{"class":129,"line":10467},[127,93063,52312],{"class":147},[127,93065,52147],{"class":140},[127,93067,51846],{"class":147},[127,93069,93070,93072,93074],{"class":129,"line":17145},[127,93071,52952],{"class":147},[127,93073,52147],{"class":140},[127,93075,51846],{"class":147},[127,93077,93078,93080,93082,93084,93086,93089,93091,93093],{"class":129,"line":17151},[127,93079,52679],{"class":147},[127,93081,52348],{"class":140},[127,93083,55773],{"class":143},[127,93085,725],{"class":147},[127,93087,93088],{"class":781},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[127,93090,55848],{"class":147},[127,93092,52348],{"class":140},[127,93094,51846],{"class":147},[127,93096,93097,93099,93101],{"class":129,"line":17174},[127,93098,52679],{"class":147},[127,93100,52348],{"class":140},[127,93102,51846],{"class":147},[127,93104,93105],{"class":129,"line":17180},[127,93106,93107],{"class":133},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[127,93109,93110,93112,93114,93116,93118,93120,93122,93125],{"class":129,"line":17203},[127,93111,11763],{"class":290},[127,93113,92584],{"class":154},[127,93115,14106],{"class":290},[127,93117,54931],{"class":147},[127,93119,54934],{"class":143},[127,93121,681],{"class":147},[127,93123,93124],{"class":781},"'video'",[127,93126,687],{"class":147},[127,93128,93129],{"class":129,"line":17217},[127,93130,93131],{"class":133},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[127,93133,93134,93137,93139,93141,93143,93146,93148],{"class":129,"line":17237},[127,93135,93136],{"class":147},"    video.ontimeupdate ",[127,93138,725],{"class":290},[127,93140,88884],{"class":147},[127,93142,91702],{"class":143},[127,93144,93145],{"class":147},"(() ",[127,93147,85251],{"class":290},[127,93149,148],{"class":147},[127,93151,93152],{"class":129,"line":17243},[127,93153,93154],{"class":133},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[127,93156,93157],{"class":129,"line":17254},[127,93158,93159],{"class":133},"      \u002F\u002F 控制台输出当前的时间\n",[127,93161,93162,93165],{"class":129,"line":17277},[127,93163,93164],{"class":133},"      \u002F\u002F console.log(video.currentTime)",[127,93166,93167],{"class":133},"  \u002F\u002F获得当前的视频时间\n",[127,93169,93170],{"class":129,"line":17299},[127,93171,93172],{"class":133},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[127,93174,93175,93177,93179,93181,93184],{"class":129,"line":17304},[127,93176,75212],{"class":147},[127,93178,72183],{"class":143},[127,93180,681],{"class":147},[127,93182,93183],{"class":781},"'currentTime'",[127,93185,93186],{"class":147},", video.currentTime)\n",[127,93188,93189,93191,93193],{"class":129,"line":17310},[127,93190,55070],{"class":147},[127,93192,6952],{"class":154},[127,93194,687],{"class":147},[127,93196,93197],{"class":129,"line":17324},[127,93198,93199],{"class":133},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[127,93201,93202,93205,93208,93210,93213,93215],{"class":129,"line":17337},[127,93203,93204],{"class":147},"    video.",[127,93206,93207],{"class":143},"onloadeddata",[127,93209,14106],{"class":290},[127,93211,93212],{"class":147}," () ",[127,93214,85251],{"class":290},[127,93216,148],{"class":147},[127,93218,93219],{"class":129,"line":17342},[127,93220,60545],{"class":133},[127,93222,93223],{"class":129,"line":17356},[127,93224,93225],{"class":133},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[127,93227,93228,93231,93233,93236,93238,93240,93242,93244,93246],{"class":129,"line":17361},[127,93229,93230],{"class":147},"      video.currentTime ",[127,93232,725],{"class":290},[127,93234,93235],{"class":147}," localStorage.",[127,93237,72214],{"class":143},[127,93239,681],{"class":147},[127,93241,93183],{"class":781},[127,93243,14256],{"class":147},[127,93245,71886],{"class":290},[127,93247,47873],{"class":154},[127,93249,93250],{"class":129,"line":17367},[127,93251,2729],{"class":147},[127,93253,93254,93256,93258],{"class":129,"line":17372},[127,93255,52952],{"class":147},[127,93257,52348],{"class":140},[127,93259,51846],{"class":147},[127,93261,93262,93264,93266],{"class":129,"line":17386},[127,93263,52321],{"class":147},[127,93265,275],{"class":140},[127,93267,51846],{"class":147},[127,93269,93270],{"class":129,"line":17391},[127,93271,2942],{"emptyLinePlaceholder":606},[127,93273,93274,93276,93278],{"class":129,"line":17396},[127,93275,52321],{"class":147},[127,93277,51175],{"class":140},[127,93279,51846],{"class":147},[575,93281,93282],{},"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":122,"searchDepth":137,"depth":137,"links":93284},[93285,93290,93294,93295,93296,93301,93306,93307,93308,93309,93316,93321,93322,93332,93336,93337,93341],{"id":77220,"depth":137,"text":77221,"children":93286},[93287,93288,93289],{"id":77224,"depth":151,"text":77225},{"id":77249,"depth":151,"text":77250},{"id":77261,"depth":151,"text":77262},{"id":77273,"depth":137,"text":77274,"children":93291},[93292,93293],{"id":77277,"depth":151,"text":77278},{"id":77292,"depth":151,"text":77293},{"id":77344,"depth":137,"text":77345},{"id":77388,"depth":137,"text":77389},{"id":77405,"depth":137,"text":77406,"children":93297},[93298,93299,93300],{"id":77409,"depth":151,"text":77410},{"id":77422,"depth":151,"text":77423},{"id":77527,"depth":151,"text":77528},{"id":77816,"depth":137,"text":77817,"children":93302},[93303,93304,93305],{"id":77820,"depth":151,"text":77821},{"id":78263,"depth":151,"text":78264},{"id":78674,"depth":151,"text":78675},{"id":78737,"depth":137,"text":78738},{"id":78816,"depth":137,"text":78817},{"id":78909,"depth":137,"text":78910},{"id":80754,"depth":137,"text":80755,"children":93310},[93311,93312,93313,93314,93315],{"id":80758,"depth":151,"text":80759},{"id":80770,"depth":151,"text":80771},{"id":80989,"depth":151,"text":80990},{"id":81007,"depth":151,"text":81008},{"id":81067,"depth":151,"text":81068},{"id":85335,"depth":137,"text":85336,"children":93317},[93318,93319,93320],{"id":85339,"depth":151,"text":85340},{"id":85357,"depth":151,"text":85358},{"id":85383,"depth":151,"text":85384},{"id":85392,"depth":137,"text":85393},{"id":85414,"depth":137,"text":85415,"children":93323},[93324,93325,93326,93327,93328,93329,93330,93331],{"id":85418,"depth":151,"text":85419},{"id":85679,"depth":151,"text":85680},{"id":85865,"depth":151,"text":85866},{"id":86232,"depth":151,"text":86233},{"id":86348,"depth":151,"text":86349},{"id":86384,"depth":151,"text":86385},{"id":86431,"depth":151,"text":86432},{"id":86465,"depth":151,"text":86466},{"id":87828,"depth":137,"text":87829,"children":93333},[93334,93335],{"id":87832,"depth":151,"text":87833},{"id":87869,"depth":151,"text":87870},{"id":89224,"depth":137,"text":89225},{"id":89595,"depth":137,"text":89596,"children":93338},[93339,93340],{"id":89599,"depth":151,"text":89600},{"id":89633,"depth":151,"text":89634},{"id":90362,"depth":137,"text":90363,"children":93342},[93343,93344,93345,93346],{"id":90366,"depth":151,"text":90367},{"id":91324,"depth":151,"text":91325},{"id":92266,"depth":151,"text":92267},{"id":92340,"depth":151,"text":92341},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77209,"description":603},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93353,"title":93354,"body":93355,"description":93366,"extension":604,"meta":93367,"navigation":606,"path":93369,"seo":93370,"stem":93371,"__hash__":93372},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93356,"toc":93364},[93357],[19,93358,93359,93360],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[457,93361,93362],{"href":93362,"rel":93363},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24405],{"title":122,"searchDepth":137,"depth":137,"links":93365},[],"三件套第三套学习",{"category":93368},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93354,"description":93366},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93374,"title":93375,"body":93376,"description":603,"extension":604,"meta":93481,"navigation":606,"path":93482,"seo":93483,"stem":93484,"__hash__":93485},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93377,"toc":93476},[93378,93385,93388,93391,93394,93398,93407,93410,93413,93417,93426,93429,93433,93436,93456,93459,93473],[19,93379,93380],{},[457,93381,93384],{"href":93382,"rel":93383},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24405],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93386,93375],{"id":93387},"_1安装",[19,93389,93390],{},"numpy是科学计算基础库,底层是C语言",[19,93392,93393],{},"三种方式：",[14,93395,93397],{"id":93396},"_11-通过pip安装","1.1 通过pip安装",[117,93399,93401],{"className":30918,"code":93400,"language":30920,"meta":122,"style":122},"pip install numpy\n",[124,93402,93403],{"__ignoreMap":122},[127,93404,93405],{"class":129,"line":130},[127,93406,93400],{"class":147},[19,93408,93409],{},"首选方式，自动处理依赖项",[19,93411,93412],{},"在提示系统命令符中使用cmd",[14,93414,93416],{"id":93415},"_12-通过anaconda安装","1.2 通过Anaconda安装",[117,93418,93420],{"className":30918,"code":93419,"language":30920,"meta":122,"style":122},"conda install numpy\n",[124,93421,93422],{"__ignoreMap":122},[127,93423,93424],{"class":129,"line":130},[127,93425,93419],{"class":147},[19,93427,93428],{},"自动解决环境依赖",[14,93430,93432],{"id":93431},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93434,93435],{},"对于Debian\u002FUbuntu",[117,93437,93439],{"className":30918,"code":93438,"language":30920,"meta":122,"style":122},"sudo apt-get install python3-numpy\n",[124,93440,93441],{"__ignoreMap":122},[127,93442,93443,93446,93448,93451,93453],{"class":129,"line":130},[127,93444,93445],{"class":147},"sudo apt",[127,93447,1207],{"class":290},[127,93449,93450],{"class":147},"get install python3",[127,93452,1207],{"class":290},[127,93454,93455],{"class":147},"numpy\n",[19,93457,93458],{},"对于Fedora:",[117,93460,93462],{"className":30918,"code":93461,"language":30920,"meta":122,"style":122},"sudo dnf install python3-numpy\n",[124,93463,93464],{"__ignoreMap":122},[127,93465,93466,93469,93471],{"class":129,"line":130},[127,93467,93468],{"class":147},"sudo dnf install python3",[127,93470,1207],{"class":290},[127,93472,93455],{"class":147},[575,93474,93475],{},"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":122,"searchDepth":137,"depth":137,"links":93477},[93478,93479,93480],{"id":93396,"depth":137,"text":93397},{"id":93415,"depth":137,"text":93416},{"id":93431,"depth":137,"text":93432},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93375,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93487,"title":93488,"body":93489,"description":603,"extension":604,"meta":93602,"navigation":606,"path":93603,"seo":93604,"stem":93605,"__hash__":93606},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93490,"toc":93600},[93491,93494,93497,93500,93503,93506,93509,93512,93515,93518,93594,93597],[10,93492,93488],{"id":93493},"_10算数函数",[19,93495,93496],{},"加减乘除运算跟python基础语法没区别",[19,93498,93499],{},"除了python那种方法外还可以使用函数",[19,93501,93502],{},"加：np.add(a,b)",[19,93504,93505],{},"减：np.subtract(a,b)",[19,93507,93508],{},"乘：np.multiply(a,b)",[19,93510,93511],{},"除：np.divide(a,b) == a\u002Fb",[19,93513,93514],{},"取余：np.mod(a,b) == a%b",[19,93516,93517],{},"必须会的用法：",[117,93519,93521],{"className":30918,"code":93520,"language":30920,"meta":122,"style":122},"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",[124,93522,93523,93545,93566,93576,93589],{"__ignoreMap":122},[127,93524,93525,93527,93529,93532,93534,93537,93539,93541,93543],{"class":129,"line":130},[127,93526,457],{"class":147},[127,93528,725],{"class":290},[127,93530,93531],{"class":147},"np.arange(",[127,93533,1095],{"class":154},[127,93535,93536],{"class":147},").reshape(",[127,93538,749],{"class":154},[127,93540,1053],{"class":147},[127,93542,749],{"class":154},[127,93544,687],{"class":147},[127,93546,93547,93549,93551,93554,93556,93558,93560,93562,93564],{"class":129,"line":137},[127,93548,938],{"class":147},[127,93550,725],{"class":290},[127,93552,93553],{"class":147},"np.array([",[127,93555,1121],{"class":154},[127,93557,1053],{"class":147},[127,93559,1121],{"class":154},[127,93561,1053],{"class":147},[127,93563,1121],{"class":154},[127,93565,5199],{"class":147},[127,93567,93568,93571,93573],{"class":129,"line":151},[127,93569,93570],{"class":147},"result",[127,93572,725],{"class":290},[127,93574,93575],{"class":147},"np.empty_like(a)\n",[127,93577,93578,93581,93584,93586],{"class":129,"line":167},[127,93579,93580],{"class":147},"np.add(a,b,",[127,93582,93583],{"class":5758},"out",[127,93585,725],{"class":290},[127,93587,93588],{"class":147},"result)\n",[127,93590,93591],{"class":129,"line":415},[127,93592,93593],{"class":147},"result\n",[19,93595,93596],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[575,93598,93599],{},"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":122,"searchDepth":137,"depth":137,"links":93601},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93488,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93608,"title":93609,"body":93610,"description":603,"extension":604,"meta":94372,"navigation":606,"path":94373,"seo":94374,"stem":94375,"__hash__":94376},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93611,"toc":94359},[93612,93615,93618,93621,93625,93664,93668,93712,93772,93776,93779,93818,93821,93866,93870,93906,93910,93979,93983,94047,94051,94054,94057,94060,94063,94099,94103,94143,94147,94219,94222,94226,94289,94293,94356],[10,93613,93609],{"id":93614},"_11统计函数",[19,93616,93617],{},"sum max min mean",[19,93619,93620],{},"这些有axis参数，可以指定方向",[14,93622,93624],{"id":93623},"_111-sum求和函数","11.1 sum()求和函数",[117,93626,93628],{"className":30918,"code":93627,"language":30920,"meta":122,"style":122},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[124,93629,93630,93635,93656],{"__ignoreMap":122},[127,93631,93632],{"class":129,"line":130},[127,93633,93634],{"class":133},"#创建一维数组\n",[127,93636,93637,93639,93641,93644,93646,93648,93650,93652,93654],{"class":129,"line":137},[127,93638,457],{"class":147},[127,93640,725],{"class":290},[127,93642,93643],{"class":147},"np.random.randint(",[127,93645,893],{"class":154},[127,93647,1053],{"class":147},[127,93649,986],{"class":154},[127,93651,1053],{"class":147},[127,93653,1374],{"class":154},[127,93655,687],{"class":147},[127,93657,93658,93661],{"class":129,"line":151},[127,93659,93660],{"class":147},"np.sum(a)",[127,93662,93663],{"class":133},"#求和\n",[14,93665,93667],{"id":93666},"_112-max求最大值函数","11.2 max()求最大值函数",[117,93669,93671],{"className":30918,"code":93670,"language":30920,"meta":122,"style":122},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[124,93672,93673,93677,93697,93702,93707],{"__ignoreMap":122},[127,93674,93675],{"class":129,"line":130},[127,93676,93634],{"class":133},[127,93678,93679,93681,93683,93685,93687,93689,93691,93693,93695],{"class":129,"line":137},[127,93680,457],{"class":147},[127,93682,725],{"class":290},[127,93684,93643],{"class":147},[127,93686,893],{"class":154},[127,93688,1053],{"class":147},[127,93690,986],{"class":154},[127,93692,1053],{"class":147},[127,93694,1374],{"class":154},[127,93696,687],{"class":147},[127,93698,93699],{"class":129,"line":151},[127,93700,93701],{"class":147},"np.max(a)\n",[127,93703,93704],{"class":129,"line":167},[127,93705,93706],{"class":133},"#最大索引(求最大元素的索引)arg\n",[127,93708,93709],{"class":129,"line":415},[127,93710,93711],{"class":147},"np.argmax(a)\n",[117,93713,93715],{"className":30918,"code":93714,"language":30920,"meta":122,"style":122},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[124,93716,93717,93738,93758,93762],{"__ignoreMap":122},[127,93718,93719,93721,93723,93726,93728,93730,93732,93734,93736],{"class":129,"line":130},[127,93720,11461],{"class":147},[127,93722,725],{"class":290},[127,93724,93725],{"class":147}," np.array([",[127,93727,893],{"class":154},[127,93729,12977],{"class":147},[127,93731,994],{"class":154},[127,93733,12977],{"class":147},[127,93735,749],{"class":154},[127,93737,5199],{"class":147},[127,93739,93740,93742,93744,93746,93748,93750,93752,93754,93756],{"class":129,"line":137},[127,93741,11487],{"class":147},[127,93743,725],{"class":290},[127,93745,93725],{"class":147},[127,93747,749],{"class":154},[127,93749,12977],{"class":147},[127,93751,530],{"class":154},[127,93753,12977],{"class":147},[127,93755,968],{"class":154},[127,93757,5199],{"class":147},[127,93759,93760],{"class":129,"line":151},[127,93761,2942],{"emptyLinePlaceholder":606},[127,93763,93764,93766,93769],{"class":129,"line":167},[127,93765,30955],{"class":154},[127,93767,93768],{"class":147},"(np.maximum(a, b))   ",[127,93770,93771],{"class":133},"# [3 5 4]，每个位置上取较大值\n",[14,93773,93775],{"id":93774},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93777,93778],{},"①一维数组：",[117,93780,93782],{"className":30918,"code":93781,"language":30920,"meta":122,"style":122},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[124,93783,93784,93788,93808,93813],{"__ignoreMap":122},[127,93785,93786],{"class":129,"line":130},[127,93787,93634],{"class":133},[127,93789,93790,93792,93794,93796,93798,93800,93802,93804,93806],{"class":129,"line":137},[127,93791,457],{"class":147},[127,93793,725],{"class":290},[127,93795,93643],{"class":147},[127,93797,893],{"class":154},[127,93799,1053],{"class":147},[127,93801,986],{"class":154},[127,93803,1053],{"class":147},[127,93805,1374],{"class":154},[127,93807,687],{"class":147},[127,93809,93810],{"class":129,"line":151},[127,93811,93812],{"class":133},"#求平均值\n",[127,93814,93815],{"class":129,"line":167},[127,93816,93817],{"class":147},"np.mean(a)\n",[19,93819,93820],{},"②二维数组",[117,93822,93824],{"className":30918,"code":93823,"language":30920,"meta":122,"style":122},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[124,93825,93826,93831,93856,93861],{"__ignoreMap":122},[127,93827,93828],{"class":129,"line":130},[127,93829,93830],{"class":133},"#二维数组\n",[127,93832,93833,93836,93838,93840,93842,93844,93846,93848,93850,93852,93854],{"class":129,"line":137},[127,93834,93835],{"class":147},"aa",[127,93837,725],{"class":290},[127,93839,93531],{"class":147},[127,93841,893],{"class":154},[127,93843,1053],{"class":147},[127,93845,1198],{"class":154},[127,93847,93536],{"class":147},[127,93849,749],{"class":154},[127,93851,1053],{"class":147},[127,93853,968],{"class":154},[127,93855,687],{"class":147},[127,93857,93858],{"class":129,"line":151},[127,93859,93860],{"class":133},"#对数组中的所有数求平均\n",[127,93862,93863],{"class":129,"line":167},[127,93864,93865],{"class":147},"np.mean(aa)\n",[14,93867,93869],{"id":93868},"_114-median求中位数函数","11.4 median()求中位数函数",[117,93871,93873],{"className":30918,"code":93872,"language":30920,"meta":122,"style":122},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[124,93874,93875,93880,93896,93901],{"__ignoreMap":122},[127,93876,93877],{"class":129,"line":130},[127,93878,93879],{"class":133},"#求中位数\n",[127,93881,93882,93884,93886,93888,93890,93892,93894],{"class":129,"line":137},[127,93883,938],{"class":147},[127,93885,725],{"class":290},[127,93887,93531],{"class":147},[127,93889,893],{"class":154},[127,93891,1053],{"class":147},[127,93893,1121],{"class":154},[127,93895,687],{"class":147},[127,93897,93898],{"class":129,"line":151},[127,93899,93900],{"class":147},"np.median(b)\n",[127,93902,93903],{"class":129,"line":167},[127,93904,93905],{"class":133},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93907,93909],{"id":93908},"_115-power求幂运算函数","11.5 power()求幂运算函数",[117,93911,93913],{"className":30918,"code":93912,"language":30920,"meta":122,"style":122},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[124,93914,93915,93931,93936,93941,93950,93955,93964],{"__ignoreMap":122},[127,93916,93917,93919,93921,93923,93925,93927,93929],{"class":129,"line":130},[127,93918,938],{"class":147},[127,93920,725],{"class":290},[127,93922,93531],{"class":147},[127,93924,893],{"class":154},[127,93926,1053],{"class":147},[127,93928,1121],{"class":154},[127,93930,687],{"class":147},[127,93932,93933],{"class":129,"line":137},[127,93934,93935],{"class":133},"#幂运算\n",[127,93937,93938],{"class":129,"line":151},[127,93939,93940],{"class":133},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[127,93942,93943,93946,93948],{"class":129,"line":167},[127,93944,93945],{"class":147},"np.power(b,",[127,93947,530],{"class":154},[127,93949,687],{"class":147},[127,93951,93952],{"class":129,"line":415},[127,93953,93954],{"class":133},"#或者以下代码，将数据存储起来\n",[127,93956,93957,93959,93961],{"class":129,"line":421},[127,93958,1519],{"class":147},[127,93960,725],{"class":290},[127,93962,93963],{"class":147},"np.empty_like(b)\n",[127,93965,93966,93968,93970,93972,93974,93976],{"class":129,"line":1766},[127,93967,93945],{"class":147},[127,93969,530],{"class":154},[127,93971,1053],{"class":147},[127,93973,93583],{"class":5758},[127,93975,725],{"class":290},[127,93977,93978],{"class":147},"y)\n",[14,93980,93982],{"id":93981},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[117,93984,93986],{"className":30918,"code":93985,"language":30920,"meta":122,"style":122},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[124,93987,93988,94004,94009,94014,94018,94036],{"__ignoreMap":122},[127,93989,93990,93992,93994,93996,93998,94000,94002],{"class":129,"line":130},[127,93991,938],{"class":147},[127,93993,725],{"class":290},[127,93995,93531],{"class":147},[127,93997,893],{"class":154},[127,93999,1053],{"class":147},[127,94001,1121],{"class":154},[127,94003,687],{"class":147},[127,94005,94006],{"class":129,"line":137},[127,94007,94008],{"class":133},"#开方\n",[127,94010,94011],{"class":129,"line":151},[127,94012,94013],{"class":147},"np.sqrt(b)\n",[127,94015,94016],{"class":129,"line":167},[127,94017,93954],{"class":133},[127,94019,94020,94022,94024,94027,94030,94032,94034],{"class":129,"line":415},[127,94021,1519],{"class":147},[127,94023,725],{"class":290},[127,94025,94026],{"class":147},"np.empty_like(b,",[127,94028,94029],{"class":5758},"dtype",[127,94031,725],{"class":290},[127,94033,719],{"class":154},[127,94035,687],{"class":147},[127,94037,94038,94041,94043,94045],{"class":129,"line":421},[127,94039,94040],{"class":147},"np.sqrt(b,",[127,94042,93583],{"class":5758},[127,94044,725],{"class":290},[127,94046,93978],{"class":147},[14,94048,94050],{"id":94049},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94052,94053],{},"对数组中的元素累计求和，可指定轴",[19,94055,94056],{},"#累计求和的意思是：",[19,94058,94059],{},"a = np.array([1, 2, 3, 4])",[19,94061,94062],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[117,94064,94066],{"className":30918,"code":94065,"language":30920,"meta":122,"style":122},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[124,94067,94068,94084,94089,94094],{"__ignoreMap":122},[127,94069,94070,94072,94074,94076,94078,94080,94082],{"class":129,"line":130},[127,94071,938],{"class":147},[127,94073,725],{"class":290},[127,94075,93531],{"class":147},[127,94077,893],{"class":154},[127,94079,1053],{"class":147},[127,94081,1121],{"class":154},[127,94083,687],{"class":147},[127,94085,94086],{"class":129,"line":137},[127,94087,94088],{"class":147},"np.cumsum(b)\n",[127,94090,94091],{"class":129,"line":151},[127,94092,94093],{"class":133},"#结果：\n",[127,94095,94096],{"class":129,"line":167},[127,94097,94098],{"class":133},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94100,94102],{"id":94101},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[117,94104,94106],{"className":30918,"code":94105,"language":30920,"meta":122,"style":122},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[124,94107,94108,94124,94129,94134,94138],{"__ignoreMap":122},[127,94109,94110,94112,94114,94116,94118,94120,94122],{"class":129,"line":130},[127,94111,938],{"class":147},[127,94113,725],{"class":290},[127,94115,93531],{"class":147},[127,94117,893],{"class":154},[127,94119,1053],{"class":147},[127,94121,1121],{"class":154},[127,94123,687],{"class":147},[127,94125,94126],{"class":129,"line":137},[127,94127,94128],{"class":133},"#对数组中的元素累计求积，可指定轴\n",[127,94130,94131],{"class":129,"line":151},[127,94132,94133],{"class":147},"np.cumprod(b)\n",[127,94135,94136],{"class":129,"line":167},[127,94137,94093],{"class":133},[127,94139,94140],{"class":129,"line":415},[127,94141,94142],{"class":133},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94144,94146],{"id":94145},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[117,94148,94150],{"className":30918,"code":94149,"language":30920,"meta":122,"style":122},"#删除数组中的重复数据，并对数据进行排序\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",[124,94151,94152,94157,94205,94210,94214],{"__ignoreMap":122},[127,94153,94154],{"class":129,"line":130},[127,94155,94156],{"class":133},"#删除数组中的重复数据，并对数据进行排序\n",[127,94158,94159,94161,94163,94165,94167,94169,94171,94173,94175,94177,94179,94181,94183,94185,94187,94189,94191,94193,94195,94197,94199,94201,94203],{"class":129,"line":137},[127,94160,457],{"class":147},[127,94162,725],{"class":290},[127,94164,93553],{"class":147},[127,94166,893],{"class":154},[127,94168,1053],{"class":147},[127,94170,530],{"class":154},[127,94172,1053],{"class":147},[127,94174,749],{"class":154},[127,94176,1053],{"class":147},[127,94178,1173],{"class":154},[127,94180,1053],{"class":147},[127,94182,749],{"class":154},[127,94184,1053],{"class":147},[127,94186,1121],{"class":154},[127,94188,1053],{"class":147},[127,94190,873],{"class":154},[127,94192,1053],{"class":147},[127,94194,867],{"class":154},[127,94196,1053],{"class":147},[127,94198,1449],{"class":154},[127,94200,1053],{"class":147},[127,94202,968],{"class":154},[127,94204,5199],{"class":147},[127,94206,94207],{"class":129,"line":151},[127,94208,94209],{"class":147},"np.unique(a)\n",[127,94211,94212],{"class":129,"line":167},[127,94213,94093],{"class":133},[127,94215,94216],{"class":129,"line":415},[127,94217,94218],{"class":133},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94220,94221],{},"升序形式排序",[14,94223,94225],{"id":94224},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[117,94227,94229],{"className":30918,"code":94228,"language":30920,"meta":122,"style":122},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[124,94230,94231,94279,94284],{"__ignoreMap":122},[127,94232,94233,94235,94237,94239,94241,94243,94245,94247,94249,94251,94253,94255,94257,94259,94261,94263,94265,94267,94269,94271,94273,94275,94277],{"class":129,"line":130},[127,94234,457],{"class":147},[127,94236,725],{"class":290},[127,94238,93553],{"class":147},[127,94240,893],{"class":154},[127,94242,1053],{"class":147},[127,94244,530],{"class":154},[127,94246,1053],{"class":147},[127,94248,749],{"class":154},[127,94250,1053],{"class":147},[127,94252,1173],{"class":154},[127,94254,1053],{"class":147},[127,94256,749],{"class":154},[127,94258,1053],{"class":147},[127,94260,1121],{"class":154},[127,94262,1053],{"class":147},[127,94264,873],{"class":154},[127,94266,1053],{"class":147},[127,94268,867],{"class":154},[127,94270,1053],{"class":147},[127,94272,1449],{"class":154},[127,94274,1053],{"class":147},[127,94276,968],{"class":154},[127,94278,5199],{"class":147},[127,94280,94281],{"class":129,"line":137},[127,94282,94283],{"class":133},"#返回数组中非零元素的索引\n",[127,94285,94286],{"class":129,"line":151},[127,94287,94288],{"class":147},"np.nonzero(a)\n",[14,94290,94292],{"id":94291},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[117,94294,94296],{"className":30918,"code":94295,"language":30920,"meta":122,"style":122},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[124,94297,94298,94346,94351],{"__ignoreMap":122},[127,94299,94300,94302,94304,94306,94308,94310,94312,94314,94316,94318,94320,94322,94324,94326,94328,94330,94332,94334,94336,94338,94340,94342,94344],{"class":129,"line":130},[127,94301,457],{"class":147},[127,94303,725],{"class":290},[127,94305,93553],{"class":147},[127,94307,893],{"class":154},[127,94309,1053],{"class":147},[127,94311,530],{"class":154},[127,94313,1053],{"class":147},[127,94315,749],{"class":154},[127,94317,1053],{"class":147},[127,94319,1173],{"class":154},[127,94321,1053],{"class":147},[127,94323,749],{"class":154},[127,94325,1053],{"class":147},[127,94327,1121],{"class":154},[127,94329,1053],{"class":147},[127,94331,873],{"class":154},[127,94333,1053],{"class":147},[127,94335,867],{"class":154},[127,94337,1053],{"class":147},[127,94339,1449],{"class":154},[127,94341,1053],{"class":147},[127,94343,968],{"class":154},[127,94345,5199],{"class":147},[127,94347,94348],{"class":129,"line":137},[127,94349,94350],{"class":133},"#计算一组数中最大值与最小值的差，可指定轴\n",[127,94352,94353],{"class":129,"line":151},[127,94354,94355],{"class":147},"np.ptp(a)\n",[575,94357,94358],{},"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":122,"searchDepth":137,"depth":137,"links":94360},[94361,94362,94363,94364,94365,94366,94367,94368,94369,94370,94371],{"id":93623,"depth":137,"text":93624},{"id":93666,"depth":137,"text":93667},{"id":93774,"depth":137,"text":93775},{"id":93868,"depth":137,"text":93869},{"id":93908,"depth":137,"text":93909},{"id":93981,"depth":137,"text":93982},{"id":94049,"depth":137,"text":94050},{"id":94101,"depth":137,"text":94102},{"id":94145,"depth":137,"text":94146},{"id":94224,"depth":137,"text":94225},{"id":94291,"depth":137,"text":94292},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93609,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94378,"title":94379,"body":94380,"description":603,"extension":604,"meta":95035,"navigation":606,"path":95036,"seo":95037,"stem":95038,"__hash__":95039},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94381,"toc":95023},[94382,94385,94389,94392,94608,94612,94615,94824,94828,94894,94899,94903,94906,94909,94947,94951,94954,94959,94963,94966,94969,94974,94978,94981,94985,94988,94991,94996,95000,95003,95006,95011,95015,95020],[10,94383,94379],{"id":94384},"_12其他常用函数",[14,94386,94388],{"id":94387},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94390,94391],{},"将数组的数据按照行列复制扩展",[117,94393,94395],{"className":30918,"code":94394,"language":30920,"meta":122,"style":122},"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",[124,94396,94397,94413,94422,94426,94431,94436,94449,94453,94458,94463,94468,94472,94477,94501,94513,94517,94521,94526,94531,94536,94541,94545,94558,94562,94566,94571,94576,94581,94586,94591,94595,94599,94604],{"__ignoreMap":122},[127,94398,94399,94401,94403,94405,94407,94409,94411],{"class":129,"line":130},[127,94400,457],{"class":147},[127,94402,725],{"class":290},[127,94404,93531],{"class":147},[127,94406,893],{"class":154},[127,94408,1053],{"class":147},[127,94410,994],{"class":154},[127,94412,687],{"class":147},[127,94414,94415,94418,94420],{"class":129,"line":137},[127,94416,94417],{"class":147},"np.tile(a,",[127,94419,530],{"class":154},[127,94421,687],{"class":147},[127,94423,94424],{"class":129,"line":151},[127,94425,94093],{"class":133},[127,94427,94428],{"class":129,"line":167},[127,94429,94430],{"class":133},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[127,94432,94433],{"class":129,"line":415},[127,94434,94435],{"class":133},"#行复制两次，列复制三次\n",[127,94437,94438,94441,94443,94445,94447],{"class":129,"line":421},[127,94439,94440],{"class":147},"np.tile(a,(",[127,94442,530],{"class":154},[127,94444,1053],{"class":147},[127,94446,749],{"class":154},[127,94448,31037],{"class":147},[127,94450,94451],{"class":129,"line":1766},[127,94452,94093],{"class":133},[127,94454,94455],{"class":129,"line":1856},[127,94456,94457],{"class":781},"'''\n",[127,94459,94460],{"class":129,"line":1862},[127,94461,94462],{"class":781},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[127,94464,94465],{"class":129,"line":1874},[127,94466,94467],{"class":781},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[127,94469,94470],{"class":129,"line":2155},[127,94471,94457],{"class":781},[127,94473,94474],{"class":129,"line":2160},[127,94475,94476],{"class":133},"#创建二维数组\n",[127,94478,94479,94481,94483,94485,94487,94489,94491,94493,94495,94497,94499],{"class":129,"line":2166},[127,94480,93835],{"class":147},[127,94482,725],{"class":290},[127,94484,93531],{"class":147},[127,94486,893],{"class":154},[127,94488,1053],{"class":147},[127,94490,1198],{"class":154},[127,94492,93536],{"class":147},[127,94494,968],{"class":154},[127,94496,1053],{"class":147},[127,94498,749],{"class":154},[127,94500,687],{"class":147},[127,94502,94503,94506,94508,94510],{"class":129,"line":2171},[127,94504,94505],{"class":147},"np.tile(aa,",[127,94507,530],{"class":154},[127,94509,1104],{"class":147},[127,94511,94512],{"class":133},"#一个数的时候就是行\n",[127,94514,94515],{"class":129,"line":2185},[127,94516,94093],{"class":133},[127,94518,94519],{"class":129,"line":2190},[127,94520,94457],{"class":781},[127,94522,94523],{"class":129,"line":2196},[127,94524,94525],{"class":781},"array([[ 1,  2,  3,  1,  2,  3],\n",[127,94527,94528],{"class":129,"line":2217},[127,94529,94530],{"class":781},"       [ 4,  5,  6,  4,  5,  6],\n",[127,94532,94533],{"class":129,"line":2222},[127,94534,94535],{"class":781},"       [ 7,  8,  9,  7,  8,  9],\n",[127,94537,94538],{"class":129,"line":2236},[127,94539,94540],{"class":781},"       [10, 11, 12, 10, 11, 12]])\n",[127,94542,94543],{"class":129,"line":2241},[127,94544,94457],{"class":781},[127,94546,94547,94550,94552,94554,94556],{"class":129,"line":2270},[127,94548,94549],{"class":147},"np.tile(aa,(",[127,94551,530],{"class":154},[127,94553,1053],{"class":147},[127,94555,749],{"class":154},[127,94557,31037],{"class":147},[127,94559,94560],{"class":129,"line":2275},[127,94561,94093],{"class":133},[127,94563,94564],{"class":129,"line":2292},[127,94565,94457],{"class":781},[127,94567,94568],{"class":129,"line":2297},[127,94569,94570],{"class":781},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[127,94572,94573],{"class":129,"line":2302},[127,94574,94575],{"class":781},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[127,94577,94578],{"class":129,"line":2307},[127,94579,94580],{"class":781},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[127,94582,94583],{"class":129,"line":2321},[127,94584,94585],{"class":781},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[127,94587,94588],{"class":129,"line":2326},[127,94589,94590],{"class":781},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[127,94592,94593],{"class":129,"line":3119},[127,94594,94575],{"class":781},[127,94596,94597],{"class":129,"line":3133},[127,94598,94580],{"class":781},[127,94600,94601],{"class":129,"line":3141},[127,94602,94603],{"class":781},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[127,94605,94606],{"class":129,"line":3146},[127,94607,94457],{"class":781},[14,94609,94611],{"id":94610},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94613,94614],{},"repeat()将数组中的每个元素重复若干次",[117,94616,94618],{"className":30918,"code":94617,"language":30920,"meta":122,"style":122},"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",[124,94619,94620,94636,94645,94649,94654,94678,94683,94692,94696,94701,94705,94710,94726,94730,94734,94739,94744,94749,94753,94758,94762,94767,94772,94776,94792,94796,94800,94805,94810,94815,94820],{"__ignoreMap":122},[127,94621,94622,94624,94626,94628,94630,94632,94634],{"class":129,"line":130},[127,94623,457],{"class":147},[127,94625,725],{"class":290},[127,94627,93531],{"class":147},[127,94629,893],{"class":154},[127,94631,1053],{"class":147},[127,94633,994],{"class":154},[127,94635,687],{"class":147},[127,94637,94638,94641,94643],{"class":129,"line":137},[127,94639,94640],{"class":147},"np.repeat(a,",[127,94642,749],{"class":154},[127,94644,687],{"class":147},[127,94646,94647],{"class":129,"line":151},[127,94648,94093],{"class":133},[127,94650,94651],{"class":129,"line":167},[127,94652,94653],{"class":133},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[127,94655,94656,94658,94660,94662,94664,94666,94668,94670,94672,94674,94676],{"class":129,"line":415},[127,94657,93835],{"class":147},[127,94659,725],{"class":290},[127,94661,93531],{"class":147},[127,94663,893],{"class":154},[127,94665,1053],{"class":147},[127,94667,1198],{"class":154},[127,94669,93536],{"class":147},[127,94671,968],{"class":154},[127,94673,1053],{"class":147},[127,94675,749],{"class":154},[127,94677,687],{"class":147},[127,94679,94680],{"class":129,"line":421},[127,94681,94682],{"class":133},"#这个重复之后二维变成一维\n",[127,94684,94685,94688,94690],{"class":129,"line":1766},[127,94686,94687],{"class":147},"np.repeat(aa,",[127,94689,530],{"class":154},[127,94691,687],{"class":147},[127,94693,94694],{"class":129,"line":1856},[127,94695,94457],{"class":781},[127,94697,94698],{"class":129,"line":1862},[127,94699,94700],{"class":781},"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",[127,94702,94703],{"class":129,"line":1874},[127,94704,94457],{"class":781},[127,94706,94707],{"class":129,"line":2155},[127,94708,94709],{"class":133},"#指定axis\n",[127,94711,94712,94714,94716,94718,94720,94722,94724],{"class":129,"line":2160},[127,94713,94687],{"class":147},[127,94715,530],{"class":154},[127,94717,1053],{"class":147},[127,94719,48054],{"class":5758},[127,94721,725],{"class":290},[127,94723,867],{"class":154},[127,94725,687],{"class":147},[127,94727,94728],{"class":129,"line":2166},[127,94729,94093],{"class":133},[127,94731,94732],{"class":129,"line":2171},[127,94733,94457],{"class":781},[127,94735,94736],{"class":129,"line":2185},[127,94737,94738],{"class":781},"array([[ 1,  2,  3],\n",[127,94740,94741],{"class":129,"line":2190},[127,94742,94743],{"class":781},"       [ 1,  2,  3],\n",[127,94745,94746],{"class":129,"line":2196},[127,94747,94748],{"class":781},"       [ 4,  5,  6],\n",[127,94750,94751],{"class":129,"line":2217},[127,94752,94748],{"class":781},[127,94754,94755],{"class":129,"line":2222},[127,94756,94757],{"class":781},"       [ 7,  8,  9],\n",[127,94759,94760],{"class":129,"line":2236},[127,94761,94757],{"class":781},[127,94763,94764],{"class":129,"line":2241},[127,94765,94766],{"class":781},"       [10, 11, 12],\n",[127,94768,94769],{"class":129,"line":2270},[127,94770,94771],{"class":781},"       [10, 11, 12]])\n",[127,94773,94774],{"class":129,"line":2275},[127,94775,94457],{"class":781},[127,94777,94778,94780,94782,94784,94786,94788,94790],{"class":129,"line":2292},[127,94779,94687],{"class":147},[127,94781,530],{"class":154},[127,94783,1053],{"class":147},[127,94785,48054],{"class":5758},[127,94787,725],{"class":290},[127,94789,893],{"class":154},[127,94791,687],{"class":147},[127,94793,94794],{"class":129,"line":2297},[127,94795,94093],{"class":133},[127,94797,94798],{"class":129,"line":2302},[127,94799,94457],{"class":781},[127,94801,94802],{"class":129,"line":2307},[127,94803,94804],{"class":781},"array([[ 1,  1,  2,  2,  3,  3],\n",[127,94806,94807],{"class":129,"line":2321},[127,94808,94809],{"class":781},"       [ 4,  4,  5,  5,  6,  6],\n",[127,94811,94812],{"class":129,"line":2326},[127,94813,94814],{"class":781},"       [ 7,  7,  8,  8,  9,  9],\n",[127,94816,94817],{"class":129,"line":3119},[127,94818,94819],{"class":781},"       [10, 10, 11, 11, 12, 12]])\n",[127,94821,94822],{"class":129,"line":3133},[127,94823,94457],{"class":781},[14,94825,94827],{"id":94826},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[117,94829,94831],{"className":30918,"code":94830,"language":30920,"meta":122,"style":122},"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",[124,94832,94833,94849,94854,94866,94870,94875,94885,94889],{"__ignoreMap":122},[127,94834,94835,94837,94839,94841,94843,94845,94847],{"class":129,"line":130},[127,94836,457],{"class":147},[127,94838,725],{"class":290},[127,94840,93531],{"class":147},[127,94842,893],{"class":154},[127,94844,1053],{"class":147},[127,94846,994],{"class":154},[127,94848,687],{"class":147},[127,94850,94851],{"class":129,"line":137},[127,94852,94853],{"class":133},"#array([，2，3，4])\n",[127,94855,94856,94859,94861,94863],{"class":129,"line":151},[127,94857,94858],{"class":147},"np.roll(a,",[127,94860,530],{"class":154},[127,94862,1104],{"class":147},[127,94864,94865],{"class":133},"#传正数向后调多少位，传负数向前调多少位\n",[127,94867,94868],{"class":129,"line":167},[127,94869,94093],{"class":133},[127,94871,94872],{"class":129,"line":415},[127,94873,94874],{"class":133},"#array([3, 4, 1, 2])\n",[127,94876,94877,94879,94881,94883],{"class":129,"line":421},[127,94878,94858],{"class":147},[127,94880,1207],{"class":290},[127,94882,893],{"class":154},[127,94884,687],{"class":147},[127,94886,94887],{"class":129,"line":1766},[127,94888,94093],{"class":133},[127,94890,94891],{"class":129,"line":1856},[127,94892,94893],{"class":133},"#array([2, 3, 4, 1])\n",[19,94895,94896],{},[23,94897],{"alt":122,"src":94898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94900,94902],{"id":94901},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94904,94905],{},"resize()重新调整数组的大小",[19,94907,94908],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[117,94910,94912],{"className":30918,"code":94911,"language":30920,"meta":122,"style":122},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[124,94913,94914,94919,94932],{"__ignoreMap":122},[127,94915,94916],{"class":129,"line":130},[127,94917,94918],{"class":133},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[127,94920,94921,94924,94926,94928,94930],{"class":129,"line":137},[127,94922,94923],{"class":147},"np.resize(aa,(",[127,94925,530],{"class":154},[127,94927,1053],{"class":147},[127,94929,1019],{"class":154},[127,94931,31037],{"class":147},[127,94933,94934,94936,94938,94940,94942,94944],{"class":129,"line":151},[127,94935,94923],{"class":147},[127,94937,530],{"class":154},[127,94939,1053],{"class":147},[127,94941,1095],{"class":154},[127,94943,83300],{"class":147},[127,94945,94946],{"class":133},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94948,94950],{"id":94949},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94952,94953],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94955,94956],{},[23,94957],{"alt":122,"src":94958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94960,94962],{"id":94961},"_126-保存加载文件","12.6 保存加载文件",[19,94964,94965],{},"savetxt():将数据保存到txt文件中",[19,94967,94968],{},"loadtxt():从文件加载数据",[19,94970,94971],{},[23,94972],{"alt":122,"src":94973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94975,94977],{"id":94976},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94979,94980],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94982,94984],{"id":94983},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94986,94987],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94989,94990],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94992,94993],{},[23,94994],{"alt":122,"src":94995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94997,94999],{"id":94998},"_129-where语句","12.9 where语句",[19,95001,95002],{},"np.where(条件,x,y)",[19,95004,95005],{},"如果条件为True,对应值为x,否则对应值为y",[19,95007,95008],{},[23,95009],{"alt":122,"src":95010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95012,95014],{"id":95013},"_1210-dot矩阵","12.10 dot()矩阵",[19,95016,95017],{},[23,95018],{"alt":122,"src":95019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[575,95021,95022],{},"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":122,"searchDepth":137,"depth":137,"links":95024},[95025,95026,95027,95028,95029,95030,95031,95032,95033,95034],{"id":94387,"depth":137,"text":94388},{"id":94610,"depth":137,"text":94611},{"id":94826,"depth":137,"text":94827},{"id":94901,"depth":137,"text":94902},{"id":94949,"depth":137,"text":94950},{"id":94961,"depth":137,"text":94962},{"id":94976,"depth":137,"text":94977},{"id":94983,"depth":137,"text":94984},{"id":94998,"depth":137,"text":94999},{"id":95013,"depth":137,"text":95014},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94379,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95041,"title":95042,"body":95043,"description":603,"extension":604,"meta":95396,"navigation":606,"path":95397,"seo":95398,"stem":95399,"__hash__":95400},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95044,"toc":95394},[95045,95048,95051,95054,95057,95060,95125,95127,95391],[10,95046,95042],{"id":95047},"_13数组排序",[19,95049,95050],{},"排序主要用到的方法是np.sort和np.argsort",[19,95052,95053],{},"其中np.sort()对数组直接排序",[19,95055,95056],{},"而np.argsort()是返回排序后的原始索引",[19,95058,95059],{},"①一维数组",[117,95061,95063],{"className":30918,"code":95062,"language":30920,"meta":122,"style":122},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[124,95064,95065,95069,95109,95117],{"__ignoreMap":122},[127,95066,95067],{"class":129,"line":130},[127,95068,93634],{"class":133},[127,95070,95071,95073,95075,95077,95079,95081,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101,95103,95105,95107],{"class":129,"line":137},[127,95072,457],{"class":147},[127,95074,725],{"class":290},[127,95076,93553],{"class":147},[127,95078,749],{"class":154},[127,95080,1053],{"class":147},[127,95082,1173],{"class":154},[127,95084,1053],{"class":147},[127,95086,1070],{"class":154},[127,95088,1053],{"class":147},[127,95090,1449],{"class":154},[127,95092,1053],{"class":147},[127,95094,954],{"class":154},[127,95096,1053],{"class":147},[127,95098,1567],{"class":154},[127,95100,1053],{"class":147},[127,95102,1019],{"class":154},[127,95104,1053],{"class":147},[127,95106,1121],{"class":154},[127,95108,5199],{"class":147},[127,95110,95111,95114],{"class":129,"line":151},[127,95112,95113],{"class":147},"np.sort(a)",[127,95115,95116],{"class":133},"#升序排序\n",[127,95118,95119,95122],{"class":129,"line":167},[127,95120,95121],{"class":147},"np.argsort(a)",[127,95123,95124],{"class":133},"#按照元素大小来索引排序\n",[19,95126,93820],{},[117,95128,95130],{"className":30918,"code":95129,"language":30920,"meta":122,"style":122},"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",[124,95131,95132,95144,95170,95175,95179,95184,95189,95194,95199,95203,95211,95215,95220,95225,95230,95235,95239,95244,95257,95261,95266,95271,95276,95281,95285,95290,95302,95306,95310,95314,95318,95322,95326,95331,95346,95351,95360,95365,95369,95373,95378,95382,95387],{"__ignoreMap":122},[127,95133,95134,95137,95139,95141],{"class":129,"line":130},[127,95135,95136],{"class":147},"np.random.seed(",[127,95138,867],{"class":154},[127,95140,1104],{"class":147},[127,95142,95143],{"class":133},"#保证每次值一样\n",[127,95145,95146,95148,95150,95152,95154,95156,95158,95160,95162,95164,95166,95168],{"class":129,"line":137},[127,95147,93835],{"class":147},[127,95149,725],{"class":290},[127,95151,93643],{"class":147},[127,95153,986],{"class":154},[127,95155,1053],{"class":147},[127,95157,32036],{"class":5758},[127,95159,725],{"class":290},[127,95161,681],{"class":147},[127,95163,968],{"class":154},[127,95165,1053],{"class":147},[127,95167,1019],{"class":154},[127,95169,31037],{"class":147},[127,95171,95172],{"class":129,"line":151},[127,95173,95174],{"class":133},"#原数组：\n",[127,95176,95177],{"class":129,"line":167},[127,95178,94457],{"class":781},[127,95180,95181],{"class":129,"line":415},[127,95182,95183],{"class":781},"array([[44, 47, 64, 67, 67,  9],\n",[127,95185,95186],{"class":129,"line":421},[127,95187,95188],{"class":781},"       [83, 21, 36, 87, 70, 88],\n",[127,95190,95191],{"class":129,"line":1766},[127,95192,95193],{"class":781},"       [88, 12, 58, 65, 39, 87],\n",[127,95195,95196],{"class":129,"line":1856},[127,95197,95198],{"class":781},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[127,95200,95201],{"class":129,"line":1862},[127,95202,94457],{"class":781},[127,95204,95205,95208],{"class":129,"line":1874},[127,95206,95207],{"class":147},"np.sort(aa)",[127,95209,95210],{"class":133},"#每行进行了排序\n",[127,95212,95213],{"class":129,"line":2155},[127,95214,94457],{"class":781},[127,95216,95217],{"class":129,"line":2160},[127,95218,95219],{"class":781},"array([[ 9, 44, 47, 64, 67, 67],\n",[127,95221,95222],{"class":129,"line":2166},[127,95223,95224],{"class":781},"       [21, 36, 70, 83, 87, 88],\n",[127,95226,95227],{"class":129,"line":2171},[127,95228,95229],{"class":781},"       [12, 39, 58, 65, 87, 88],\n",[127,95231,95232],{"class":129,"line":2185},[127,95233,95234],{"class":781},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[127,95236,95237],{"class":129,"line":2190},[127,95238,94457],{"class":781},[127,95240,95241],{"class":129,"line":2196},[127,95242,95243],{"class":133},"#axis=0时\n",[127,95245,95246,95249,95251,95253,95255],{"class":129,"line":2217},[127,95247,95248],{"class":147},"np.sort(aa,",[127,95250,48054],{"class":5758},[127,95252,725],{"class":290},[127,95254,867],{"class":154},[127,95256,687],{"class":147},[127,95258,95259],{"class":129,"line":2222},[127,95260,94457],{"class":781},[127,95262,95263],{"class":129,"line":2236},[127,95264,95265],{"class":781},"array([[44, 12, 36, 37, 25,  9],\n",[127,95267,95268],{"class":129,"line":2241},[127,95269,95270],{"class":781},"       [46, 21, 58, 65, 39, 77],\n",[127,95272,95273],{"class":129,"line":2270},[127,95274,95275],{"class":781},"       [83, 47, 64, 67, 67, 87],\n",[127,95277,95278],{"class":129,"line":2275},[127,95279,95280],{"class":781},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[127,95282,95283],{"class":129,"line":2292},[127,95284,94457],{"class":781},[127,95286,95287],{"class":129,"line":2297},[127,95288,95289],{"class":133},"#axis=1时,为默认值\n",[127,95291,95292,95294,95296,95298,95300],{"class":129,"line":2302},[127,95293,95248],{"class":147},[127,95295,48054],{"class":5758},[127,95297,725],{"class":290},[127,95299,893],{"class":154},[127,95301,687],{"class":147},[127,95303,95304],{"class":129,"line":2307},[127,95305,94457],{"class":781},[127,95307,95308],{"class":129,"line":2321},[127,95309,95219],{"class":781},[127,95311,95312],{"class":129,"line":2326},[127,95313,95224],{"class":781},[127,95315,95316],{"class":129,"line":3119},[127,95317,95229],{"class":781},[127,95319,95320],{"class":129,"line":3133},[127,95321,95234],{"class":781},[127,95323,95324],{"class":129,"line":3141},[127,95325,94457],{"class":781},[127,95327,95328],{"class":129,"line":3146},[127,95329,95330],{"class":133},"#按最后一列排序\n",[127,95332,95333,95335,95337,95340,95342,95344],{"class":129,"line":3152},[127,95334,938],{"class":147},[127,95336,725],{"class":290},[127,95338,95339],{"class":147},"aa[:,",[127,95341,1207],{"class":290},[127,95343,893],{"class":154},[127,95345,33786],{"class":147},[127,95347,95348],{"class":129,"line":3158},[127,95349,95350],{"class":133},"#获取最后一列排好序的索引\n",[127,95352,95353,95355,95357],{"class":129,"line":3163},[127,95354,74587],{"class":147},[127,95356,725],{"class":290},[127,95358,95359],{"class":147},"np.argsort(b)\n",[127,95361,95362],{"class":129,"line":8490},[127,95363,95364],{"class":147},"aa[index]\n",[127,95366,95367],{"class":129,"line":8514},[127,95368,94457],{"class":781},[127,95370,95371],{"class":129,"line":8519},[127,95372,95183],{"class":781},[127,95374,95375],{"class":129,"line":8525},[127,95376,95377],{"class":781},"       [46, 88, 81, 37, 25, 77],\n",[127,95379,95380],{"class":129,"line":8552},[127,95381,95193],{"class":781},[127,95383,95384],{"class":129,"line":8557},[127,95385,95386],{"class":781},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[127,95388,95389],{"class":129,"line":8563},[127,95390,94457],{"class":781},[575,95392,95393],{},"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":122,"searchDepth":137,"depth":137,"links":95395},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95042,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95402,"title":95403,"body":95404,"description":603,"extension":604,"meta":95434,"navigation":606,"path":95435,"seo":95436,"stem":95437,"__hash__":95438},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95405,"toc":95432},[95406,95409,95412,95415,95418,95421,95424,95427],[10,95407,95403],{"id":95408},"_14广播机制",[19,95410,95411],{},"广播的规则：",[19,95413,95414],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95416,95417],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95419,95420],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95422,95423],{},"3.如果没有维度形状为1，则会引发异常",[19,95425,95426],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95428,95429],{},[23,95430],{"alt":122,"src":95431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":122,"searchDepth":137,"depth":137,"links":95433},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95403,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95440,"title":95441,"body":95442,"description":603,"extension":604,"meta":95540,"navigation":606,"path":95541,"seo":95542,"stem":95543,"__hash__":95544},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95443,"toc":95538},[95444,95447,95450,95535],[10,95445,95441],{"id":95446},"_15比较掩码",[19,95448,95449],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[117,95451,95453],{"className":30918,"code":95452,"language":30920,"meta":122,"style":122},"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",[124,95454,95455,95501,95512,95526,95530],{"__ignoreMap":122},[127,95456,95457,95459,95461,95464,95466,95468,95470,95472,95474,95476,95478,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498],{"class":129,"line":130},[127,95458,457],{"class":147},[127,95460,725],{"class":290},[127,95462,95463],{"class":147},"np.array([[",[127,95465,893],{"class":154},[127,95467,1053],{"class":147},[127,95469,530],{"class":154},[127,95471,1053],{"class":147},[127,95473,749],{"class":154},[127,95475,48570],{"class":147},[127,95477,1147],{"class":154},[127,95479,1053],{"class":147},[127,95481,1173],{"class":154},[127,95483,1053],{"class":147},[127,95485,1198],{"class":154},[127,95487,48570],{"class":147},[127,95489,1399],{"class":154},[127,95491,1053],{"class":147},[127,95493,1424],{"class":154},[127,95495,1053],{"class":147},[127,95497,1449],{"class":154},[127,95499,95500],{"class":147},"]])\n",[127,95502,95503,95505,95507,95509],{"class":129,"line":137},[127,95504,457],{"class":147},[127,95506,1584],{"class":290},[127,95508,1374],{"class":154},[127,95510,95511],{"class":133},"#结果是一个由True,False组成的数组\n",[127,95513,95514,95517,95519,95521,95523],{"class":129,"line":151},[127,95515,95516],{"class":147},"a[a",[127,95518,1584],{"class":290},[127,95520,1374],{"class":154},[127,95522,1614],{"class":147},[127,95524,95525],{"class":133},"#小于20的元素会存到这个数组中\n",[127,95527,95528],{"class":129,"line":167},[127,95529,94093],{"class":133},[127,95531,95532],{"class":129,"line":415},[127,95533,95534],{"class":133},"#array([ 1,  2,  3, 11, 12, 13])\n",[575,95536,95537],{},"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":122,"searchDepth":137,"depth":137,"links":95539},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95441,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95546,"title":95547,"body":95548,"description":603,"extension":604,"meta":95640,"navigation":606,"path":95641,"seo":95642,"stem":95643,"__hash__":95644},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95549,"toc":95638},[95550,95553,95556,95559,95562,95565,95630,95635],[10,95551,95547],{"id":95552},"_16魔法命令time",[19,95554,95555],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95557,95558],{},"%:行模式",[19,95560,95561],{},"%%:单元格模式",[19,95563,95564],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[117,95566,95568],{"className":30918,"code":95567,"language":30920,"meta":122,"style":122},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[124,95569,95570,95575,95582,95587,95596,95609,95613,95621],{"__ignoreMap":122},[127,95571,95572],{"class":129,"line":130},[127,95573,95574],{"class":133},"#程序执行时间\n",[127,95576,95577,95579],{"class":129,"line":137},[127,95578,30932],{"class":290},[127,95580,95581],{"class":147}," time \n",[127,95583,95584],{"class":129,"line":151},[127,95585,95586],{"class":133},"#获取时间\n",[127,95588,95589,95592,95594],{"class":129,"line":167},[127,95590,95591],{"class":147},"start",[127,95593,725],{"class":290},[127,95595,32958],{"class":147},[127,95597,95598,95601,95604,95606],{"class":129,"line":415},[127,95599,95600],{"class":147},"time.sleep(",[127,95602,95603],{"class":154},"0.4",[127,95605,1104],{"class":147},[127,95607,95608],{"class":133},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[127,95610,95611],{"class":129,"line":421},[127,95612,95586],{"class":133},[127,95614,95615,95617,95619],{"class":129,"line":1766},[127,95616,46341],{"class":147},[127,95618,725],{"class":290},[127,95620,32958],{"class":147},[127,95622,95623,95625,95627],{"class":129,"line":1856},[127,95624,46341],{"class":147},[127,95626,1207],{"class":290},[127,95628,95629],{"class":147},"start\n",[19,95631,95632],{},[23,95633],{"alt":122,"src":95634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[575,95636,95637],{},"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":122,"searchDepth":137,"depth":137,"links":95639},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95547,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95646,"title":95647,"body":95648,"description":603,"extension":604,"meta":95683,"navigation":606,"path":95684,"seo":95685,"stem":95686,"__hash__":95687},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95649,"toc":95681},[95650,95653,95656,95659,95662,95665,95668,95671,95676],[10,95651,95647],{"id":95652},"_17魔法命令timeit",[19,95654,95655],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95657,95658],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95660,95661],{},"单元格模式：",[19,95663,95664],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95666,95667],{},"初始化语句执行次数由轮数来决定",[19,95669,95670],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95672,95673],{},[23,95674],{"alt":122,"src":95675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95677,95678],{},[23,95679],{"alt":122,"src":95680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":122,"searchDepth":137,"depth":137,"links":95682},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95647,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95689,"title":95690,"body":95691,"description":603,"extension":604,"meta":95709,"navigation":606,"path":95710,"seo":95711,"stem":95712,"__hash__":95713},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95692,"toc":95707},[95693,95696,95699,95702],[10,95694,95690],{"id":95695},"_18魔法命令writefile和run",[19,95697,95698],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95700,95701],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95703,95704],{},[23,95705],{"alt":122,"src":95706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":122,"searchDepth":137,"depth":137,"links":95708},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95690,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95715,"title":95716,"body":95717,"description":603,"extension":604,"meta":95770,"navigation":606,"path":95771,"seo":95772,"stem":95773,"__hash__":95774},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95718,"toc":95768},[95719,95722,95725,95727,95730,95733,95738,95741,95744,95747,95750,95753,95756,95759,95762,95765],[10,95720,95716],{"id":95721},"_19魔法命令memit",[19,95723,95724],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95726,25140],{},[19,95728,95729],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95731,95732],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95734,95735],{},[23,95736],{"alt":122,"src":95737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95739,95740],{},"补充：",[19,95742,95743],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95745,95746],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95748,95749],{},"解决方法：",[19,95751,95752],{},"1.cmd",[19,95754,95755],{},"2.依次输入以下代码：",[19,95757,95758],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95760,95761],{},"pip install --upgrade ipython",[19,95763,95764],{},"#升级 memory_profiler 和 setuptools",[19,95766,95767],{},"pip install --upgrade memory_profiler setuptools",{"title":122,"searchDepth":137,"depth":137,"links":95769},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95716,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95776,"title":95777,"body":95778,"description":603,"extension":604,"meta":97424,"navigation":606,"path":97425,"seo":97426,"stem":97427,"__hash__":97428},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95779,"toc":97394},[95780,95783,95787,95791,95852,95855,95860,95864,95869,95874,95879,95884,95887,95892,95896,95900,95933,95936,95939,95942,95994,95997,96033,96036,96078,96082,96103,96105,96142,96144,96149,96151,96156,96160,96163,96191,96195,96199,96252,96256,96348,96352,96356,96359,96364,96368,96393,96398,96402,96405,96408,96411,96414,96417,96420,96423,96435,96439,96443,96446,96478,96481,96504,96507,96533,96536,96562,96565,96599,96602,96664,96668,96671,96675,96678,96704,96707,96710,96715,96718,96787,96789,96794,96855,96858,96869,96875,96880,96884,96887,96900,96904,96919,96921,96944,96946,96972,96975,96978,96981,97029,97031,97036,97040,97044,97071,97075,97102,97105,97110,97115,97205,97209,97267,97272,97275,97278,97320,97324,97380,97385,97388,97391],[10,95781,95777],{"id":95782},"_2创建数组",[14,95784,95786],{"id":95785},"_21-array函数创建数组","2.1 array()函数创建数组",[62,95788,95790],{"id":95789},"_221-函数语句","2.2.1 函数语句",[117,95792,95794],{"className":30918,"code":95793,"language":30920,"meta":122,"style":122},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[124,95795,95796],{"__ignoreMap":122},[127,95797,95798,95801,95804,95806,95808,95810,95812,95814,95817,95819,95822,95824,95827,95829,95831,95833,95836,95838,95841,95843,95846,95848,95850],{"class":129,"line":130},[127,95799,95800],{"class":147},"numpy.array(",[127,95802,95803],{"class":154},"object",[127,95805,12977],{"class":147},[127,95807,94029],{"class":5758},[127,95809,14106],{"class":290},[127,95811,39473],{"class":154},[127,95813,12977],{"class":147},[127,95815,95816],{"class":5758},"copy",[127,95818,14106],{"class":290},[127,95820,95821],{"class":154}," True",[127,95823,12977],{"class":147},[127,95825,95826],{"class":5758},"order",[127,95828,14106],{"class":290},[127,95830,39473],{"class":154},[127,95832,12977],{"class":147},[127,95834,95835],{"class":5758},"subok",[127,95837,14106],{"class":290},[127,95839,95840],{"class":154}," False",[127,95842,12977],{"class":147},[127,95844,95845],{"class":5758},"ndmin",[127,95847,14106],{"class":290},[127,95849,4635],{"class":154},[127,95851,687],{"class":147},[19,95853,95854],{},"参数：",[19,95856,95857],{},[23,95858],{"alt":122,"src":95859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[62,95861,95863],{"id":95862},"_222-实例","2.2.2 实例",[19,95865,95866],{},[23,95867],{"alt":122,"src":95868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95870,95871],{},[23,95872],{"alt":122,"src":95873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95875,95876],{},[23,95877],{"alt":122,"src":95878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95880,95881],{},[23,95882],{"alt":122,"src":95883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95885,95886],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95888,95889],{},[23,95890],{"alt":122,"src":95891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95893,95895],{"id":95894},"_22-随机数创建数组","2.2 随机数创建数组",[62,95897,95899],{"id":95898},"_221-random语句","2.2.1 random语句",[117,95901,95903],{"className":30918,"code":95902,"language":30920,"meta":122,"style":122},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[124,95904,95905,95910,95915,95923,95928],{"__ignoreMap":122},[127,95906,95907],{"class":129,"line":130},[127,95908,95909],{"class":133},"#random.random()\n",[127,95911,95912],{"class":129,"line":137},[127,95913,95914],{"class":133},"#确定随机种子,就是每次运行结果是相同的\n",[127,95916,95917,95919,95921],{"class":129,"line":151},[127,95918,95136],{"class":147},[127,95920,867],{"class":154},[127,95922,687],{"class":147},[127,95924,95925],{"class":129,"line":167},[127,95926,95927],{"class":147},"np.random.random()\n",[127,95929,95930],{"class":129,"line":415},[127,95931,95932],{"class":133},"#生成一个随机的数目\n",[19,95934,95935],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95937,95938],{},"可以指定数组形状 size",[19,95940,95941],{},"①生成一维数组",[117,95943,95945],{"className":30918,"code":95944,"language":30920,"meta":122,"style":122},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[124,95946,95947,95952,95965,95970,95986],{"__ignoreMap":122},[127,95948,95949],{"class":129,"line":130},[127,95950,95951],{"class":133},"#random.random(size())\n",[127,95953,95954,95957,95959,95961,95963],{"class":129,"line":137},[127,95955,95956],{"class":147},"np.random.random(",[127,95958,32036],{"class":5758},[127,95960,725],{"class":290},[127,95962,994],{"class":154},[127,95964,687],{"class":147},[127,95966,95967],{"class":129,"line":151},[127,95968,95969],{"class":133},"#生成一位的五个元素\n",[127,95971,95972,95974,95976,95978,95980,95982,95984],{"class":129,"line":167},[127,95973,457],{"class":147},[127,95975,725],{"class":290},[127,95977,95956],{"class":147},[127,95979,32036],{"class":5758},[127,95981,725],{"class":290},[127,95983,968],{"class":154},[127,95985,687],{"class":147},[127,95987,95988,95991],{"class":129,"line":415},[127,95989,95990],{"class":147},"a.shape ",[127,95992,95993],{"class":133},"#输出数组形状\n",[19,95995,95996],{},"②生成二维数组",[117,95998,96000],{"className":30918,"code":95999,"language":30920,"meta":122,"style":122},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[124,96001,96002,96006,96028],{"__ignoreMap":122},[127,96003,96004],{"class":129,"line":130},[127,96005,93830],{"class":133},[127,96007,96008,96010,96012,96014,96016,96018,96020,96022,96024,96026],{"class":129,"line":137},[127,96009,93835],{"class":147},[127,96011,725],{"class":290},[127,96013,95956],{"class":147},[127,96015,32036],{"class":5758},[127,96017,725],{"class":290},[127,96019,681],{"class":147},[127,96021,968],{"class":154},[127,96023,1053],{"class":147},[127,96025,994],{"class":154},[127,96027,31037],{"class":147},[127,96029,96030],{"class":129,"line":151},[127,96031,96032],{"class":133},"#生成四行五列的数组\n",[19,96034,96035],{},"③生成三维数组",[117,96037,96039],{"className":30918,"code":96038,"language":30920,"meta":122,"style":122},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[124,96040,96041,96046,96073],{"__ignoreMap":122},[127,96042,96043],{"class":129,"line":130},[127,96044,96045],{"class":133},"#三维数组\n",[127,96047,96048,96051,96053,96055,96057,96059,96061,96063,96065,96067,96069,96071],{"class":129,"line":137},[127,96049,96050],{"class":147},"aaa",[127,96052,725],{"class":290},[127,96054,95956],{"class":147},[127,96056,32036],{"class":5758},[127,96058,725],{"class":290},[127,96060,681],{"class":147},[127,96062,530],{"class":154},[127,96064,1053],{"class":147},[127,96066,749],{"class":154},[127,96068,1053],{"class":147},[127,96070,968],{"class":154},[127,96072,31037],{"class":147},[127,96074,96075],{"class":129,"line":151},[127,96076,96077],{"class":147},"aaa.shape\n",[62,96079,96081],{"id":96080},"_222-randint语句","2.2.2 randint语句",[117,96083,96085],{"className":30918,"code":96084,"language":30920,"meta":122,"style":122},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[124,96086,96087,96092],{"__ignoreMap":122},[127,96088,96089],{"class":129,"line":130},[127,96090,96091],{"class":133},"#生成随机的整数 random.randint(low,high,size)\n",[127,96093,96094,96096,96098,96100],{"class":129,"line":137},[127,96095,93643],{"class":147},[127,96097,994],{"class":154},[127,96099,14256],{"class":147},[127,96101,96102],{"class":133},"#0~5中的随机一个数\n",[19,96104,95941],{},[117,96106,96108],{"className":30918,"code":96107,"language":30920,"meta":122,"style":122},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[124,96109,96110,96115,96137],{"__ignoreMap":122},[127,96111,96112],{"class":129,"line":130},[127,96113,96114],{"class":133},"#一维\n",[127,96116,96117,96119,96121,96123,96125,96127,96129,96131,96133,96135],{"class":129,"line":137},[127,96118,93643],{"class":147},[127,96120,893],{"class":154},[127,96122,1053],{"class":147},[127,96124,1147],{"class":154},[127,96126,1053],{"class":147},[127,96128,32036],{"class":5758},[127,96130,725],{"class":290},[127,96132,681],{"class":147},[127,96134,1121],{"class":154},[127,96136,31037],{"class":147},[127,96138,96139],{"class":129,"line":151},[127,96140,96141],{"class":133},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96143,95996],{},[19,96145,96146],{},[23,96147],{"alt":122,"src":96148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96150,96035],{},[19,96152,96153],{},[23,96154],{"alt":122,"src":96155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[62,96157,96159],{"id":96158},"_222-rand语句","2.2.2 rand语句",[19,96161,96162],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[117,96164,96166],{"className":30918,"code":96165,"language":30920,"meta":122,"style":122},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[124,96167,96168,96181,96186],{"__ignoreMap":122},[127,96169,96170,96173,96175,96177,96179],{"class":129,"line":130},[127,96171,96172],{"class":147},"np.random.rand(",[127,96174,986],{"class":154},[127,96176,1053],{"class":147},[127,96178,1121],{"class":154},[127,96180,687],{"class":147},[127,96182,96183],{"class":129,"line":137},[127,96184,96185],{"class":133},"#第一个参数100：行数，表示有100个样本\n",[127,96187,96188],{"class":129,"line":151},[127,96189,96190],{"class":133},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96192,96194],{"id":96193},"_23-arange创建数组","2.3 arange()创建数组",[62,96196,96198],{"id":96197},"_231-函数语句","2.3.1 函数语句",[117,96200,96202],{"className":30918,"code":96201,"language":30920,"meta":122,"style":122},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[124,96203,96204,96218,96223,96228,96233,96238,96243,96248],{"__ignoreMap":122},[127,96205,96206,96209,96211,96213,96216],{"class":129,"line":130},[127,96207,96208],{"class":147},"numpy.arange([start,] stop[, step], ",[127,96210,94029],{"class":5758},[127,96212,725],{"class":290},[127,96214,96215],{"class":154},"None",[127,96217,687],{"class":147},[127,96219,96220],{"class":129,"line":137},[127,96221,96222],{"class":133},"#参数\n",[127,96224,96225],{"class":129,"line":151},[127,96226,96227],{"class":781},"\"\"\"\n",[127,96229,96230],{"class":129,"line":167},[127,96231,96232],{"class":781},"start:起始值，可选，默认从 0 开始。\n",[127,96234,96235],{"class":129,"line":415},[127,96236,96237],{"class":781},"stop:结束值（不包含该值）。\n",[127,96239,96240],{"class":129,"line":421},[127,96241,96242],{"class":781},"step:步长，可选，默认是 1。可以为浮点数。\n",[127,96244,96245],{"class":129,"line":1766},[127,96246,96247],{"class":781},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[127,96249,96250],{"class":129,"line":1856},[127,96251,96227],{"class":781},[62,96253,96255],{"id":96254},"_232-实例","2.3.2 实例",[117,96257,96259],{"className":30918,"code":96258,"language":30920,"meta":122,"style":122},"#创建一维数组\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",[124,96260,96261,96265,96289,96294,96299,96303,96326,96330,96334,96339,96344],{"__ignoreMap":122},[127,96262,96263],{"class":129,"line":130},[127,96264,93634],{"class":133},[127,96266,96267,96269,96271,96273,96275,96277,96279,96281,96283,96285,96287],{"class":129,"line":137},[127,96268,93531],{"class":147},[127,96270,893],{"class":154},[127,96272,1053],{"class":147},[127,96274,1399],{"class":154},[127,96276,1053],{"class":147},[127,96278,893],{"class":154},[127,96280,1053],{"class":147},[127,96282,94029],{"class":5758},[127,96284,725],{"class":290},[127,96286,684],{"class":154},[127,96288,687],{"class":147},[127,96290,96291],{"class":129,"line":151},[127,96292,96293],{"class":133},"#输出结果：\n",[127,96295,96296],{"class":129,"line":167},[127,96297,96298],{"class":133},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[127,96300,96301],{"class":129,"line":415},[127,96302,94476],{"class":133},[127,96304,96305,96308,96310,96312,96314,96317,96319,96321,96323],{"class":129,"line":421},[127,96306,96307],{"class":147},"np.array([np.arange(",[127,96309,893],{"class":154},[127,96311,1053],{"class":147},[127,96313,968],{"class":154},[127,96315,96316],{"class":147},"),np.arange(",[127,96318,968],{"class":154},[127,96320,1053],{"class":147},[127,96322,1044],{"class":154},[127,96324,96325],{"class":147},")])\n",[127,96327,96328],{"class":129,"line":1766},[127,96329,94093],{"class":133},[127,96331,96332],{"class":129,"line":1856},[127,96333,96227],{"class":781},[127,96335,96336],{"class":129,"line":1862},[127,96337,96338],{"class":781},"array([[1, 2, 3],\n",[127,96340,96341],{"class":129,"line":1874},[127,96342,96343],{"class":781},"       [4, 5, 6]])\n",[127,96345,96346],{"class":129,"line":2155},[127,96347,96227],{"class":781},[14,96349,96351],{"id":96350},"_24-生态分布","2.4 生态分布",[62,96353,96355],{"id":96354},"_241-标准正态分布","2.4.1 标准正态分布",[19,96357,96358],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96360,96361],{},[23,96362],{"alt":122,"src":96363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[62,96365,96367],{"id":96366},"_242-常规正态分布","2.4.2 常规正态分布",[117,96369,96371],{"className":30918,"code":96370,"language":30920,"meta":122,"style":122},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[124,96372,96373,96378,96383,96388],{"__ignoreMap":122},[127,96374,96375],{"class":129,"line":130},[127,96376,96377],{"class":147},"random.normal(loc,scale,size)也可以生成正态分布\n",[127,96379,96380],{"class":129,"line":137},[127,96381,96382],{"class":133},"#loc:期望\n",[127,96384,96385],{"class":129,"line":151},[127,96386,96387],{"class":133},"#scale:方差\n",[127,96389,96390],{"class":129,"line":167},[127,96391,96392],{"class":133},"#size:用于确定是几维的数列\n",[19,96394,96395],{},[23,96396],{"alt":122,"src":96397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96399,96401],{"id":96400},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96403,96404],{},"ndim:秩，维度个数",[19,96406,96407],{},"size:数组元素的个数",[19,96409,96410],{},"shape:数组的形状",[19,96412,96413],{},"dtype:数组元素的类型",[19,96415,96416],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96418,96419],{},"他们都是属性，通过数组.属性的形式来确定",[19,96421,96422],{},"如果需要输出多个可以通过以下方式：",[117,96424,96426],{"className":30918,"code":96425,"language":30920,"meta":122,"style":122},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[124,96427,96428],{"__ignoreMap":122},[127,96429,96430,96432],{"class":129,"line":130},[127,96431,30955],{"class":154},[127,96433,96434],{"class":147},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96436,96438],{"id":96437},"_26-其他方式创建数组","2.6 其他方式创建数组",[62,96440,96442],{"id":96441},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96444,96445],{},"①创建一维数组",[117,96447,96449],{"className":30918,"code":96448,"language":30920,"meta":122,"style":122},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[124,96450,96451,96460,96464,96469,96474],{"__ignoreMap":122},[127,96452,96453,96456,96458],{"class":129,"line":130},[127,96454,96455],{"class":147},"np.zeros(",[127,96457,1121],{"class":154},[127,96459,687],{"class":147},[127,96461,96462],{"class":129,"line":137},[127,96463,96227],{"class":781},[127,96465,96466],{"class":129,"line":151},[127,96467,96468],{"class":781},"输出结果：\n",[127,96470,96471],{"class":129,"line":167},[127,96472,96473],{"class":781},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[127,96475,96476],{"class":129,"line":415},[127,96477,96227],{"class":781},[19,96479,96480],{},"上方代码等价于：",[117,96482,96484],{"className":30918,"code":96483,"language":30920,"meta":122,"style":122},"np.zeros(shape=(10))#创建10个元素的0数组\n",[124,96485,96486],{"__ignoreMap":122},[127,96487,96488,96490,96493,96495,96497,96499,96501],{"class":129,"line":130},[127,96489,96455],{"class":147},[127,96491,96492],{"class":5758},"shape",[127,96494,725],{"class":290},[127,96496,681],{"class":147},[127,96498,1121],{"class":154},[127,96500,83300],{"class":147},[127,96502,96503],{"class":133},"#创建10个元素的0数组\n",[19,96505,96506],{},"也可以指定类型",[117,96508,96510],{"className":30918,"code":96509,"language":30920,"meta":122,"style":122},"#指定类型\nnp.zeros(5,dtype=int)\n",[124,96511,96512,96517],{"__ignoreMap":122},[127,96513,96514],{"class":129,"line":130},[127,96515,96516],{"class":133},"#指定类型\n",[127,96518,96519,96521,96523,96525,96527,96529,96531],{"class":129,"line":137},[127,96520,96455],{"class":147},[127,96522,994],{"class":154},[127,96524,1053],{"class":147},[127,96526,94029],{"class":5758},[127,96528,725],{"class":290},[127,96530,684],{"class":154},[127,96532,687],{"class":147},[19,96534,96535],{},"②创建二维数组",[117,96537,96539],{"className":30918,"code":96538,"language":30920,"meta":122,"style":122},"np.zeros((3,4),dtype=int)\n",[124,96540,96541],{"__ignoreMap":122},[127,96542,96543,96546,96548,96550,96552,96554,96556,96558,96560],{"class":129,"line":130},[127,96544,96545],{"class":147},"np.zeros((",[127,96547,749],{"class":154},[127,96549,1053],{"class":147},[127,96551,968],{"class":154},[127,96553,42796],{"class":147},[127,96555,94029],{"class":5758},[127,96557,725],{"class":290},[127,96559,684],{"class":154},[127,96561,687],{"class":147},[19,96563,96564],{},"③创建三维数组",[117,96566,96568],{"className":30918,"code":96567,"language":30920,"meta":122,"style":122},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[124,96569,96570,96575],{"__ignoreMap":122},[127,96571,96572],{"class":129,"line":130},[127,96573,96574],{"class":133},"#创建三维数组\n",[127,96576,96577,96579,96581,96583,96585,96587,96589,96591,96593,96595,96597],{"class":129,"line":137},[127,96578,96545],{"class":147},[127,96580,749],{"class":154},[127,96582,1053],{"class":147},[127,96584,968],{"class":154},[127,96586,1053],{"class":147},[127,96588,994],{"class":154},[127,96590,42796],{"class":147},[127,96592,94029],{"class":5758},[127,96594,725],{"class":290},[127,96596,684],{"class":154},[127,96598,687],{"class":147},[19,96600,96601],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[117,96603,96605],{"className":30918,"code":96604,"language":30920,"meta":122,"style":122},"#使用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",[124,96606,96607,96612,96627,96632,96637,96659],{"__ignoreMap":122},[127,96608,96609],{"class":129,"line":130},[127,96610,96611],{"class":133},"#使用zeros_like将创建的一维数组变成全0的数组\n",[127,96613,96614,96616,96618,96620,96622,96624],{"class":129,"line":137},[127,96615,457],{"class":147},[127,96617,725],{"class":290},[127,96619,93531],{"class":147},[127,96621,968],{"class":154},[127,96623,1104],{"class":147},[127,96625,96626],{"class":133},"#这个得到的结果：一维数组0，1，2，3\n",[127,96628,96629],{"class":129,"line":151},[127,96630,96631],{"class":147},"np.zeros_like(a)\n",[127,96633,96634],{"class":129,"line":167},[127,96635,96636],{"class":133},"#使用zeros_like将创建的二维数组变成全0的数组\n",[127,96638,96639,96641,96643,96645,96647,96649,96651,96653,96655,96657],{"class":129,"line":415},[127,96640,93835],{"class":147},[127,96642,725],{"class":290},[127,96644,95956],{"class":147},[127,96646,32036],{"class":5758},[127,96648,725],{"class":290},[127,96650,681],{"class":147},[127,96652,968],{"class":154},[127,96654,1053],{"class":147},[127,96656,994],{"class":154},[127,96658,31037],{"class":147},[127,96660,96661],{"class":129,"line":421},[127,96662,96663],{"class":147},"np.zeros_like(aa)\n",[62,96665,96667],{"id":96666},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96669,96670],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[62,96672,96674],{"id":96673},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96676,96677],{},"①empty()用法",[117,96679,96681],{"className":30918,"code":96680,"language":30920,"meta":122,"style":122},"numpy.empty(shape,dtype=float,order='c')\n",[124,96682,96683],{"__ignoreMap":122},[127,96684,96685,96688,96690,96692,96694,96696,96698,96700,96702],{"class":129,"line":130},[127,96686,96687],{"class":147},"numpy.empty(shape,",[127,96689,94029],{"class":5758},[127,96691,725],{"class":290},[127,96693,719],{"class":154},[127,96695,1053],{"class":147},[127,96697,95826],{"class":5758},[127,96699,725],{"class":290},[127,96701,76557],{"class":781},[127,96703,687],{"class":147},[19,96705,96706],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96708,96709],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96711,96712],{},[23,96713],{"alt":122,"src":96714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96716,96717],{},"②empty()用法",[117,96719,96721],{"className":30918,"code":96720,"language":30920,"meta":122,"style":122},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[124,96722,96723,96744,96756,96777,96782],{"__ignoreMap":122},[127,96724,96725,96727,96729,96732,96734,96736,96738,96740,96742],{"class":129,"line":130},[127,96726,1519],{"class":147},[127,96728,725],{"class":290},[127,96730,96731],{"class":147},"np.empty(",[127,96733,1121],{"class":154},[127,96735,1053],{"class":147},[127,96737,94029],{"class":5758},[127,96739,725],{"class":290},[127,96741,684],{"class":154},[127,96743,687],{"class":147},[127,96745,96746,96748,96750,96752,96754],{"class":129,"line":137},[127,96747,1494],{"class":147},[127,96749,725],{"class":290},[127,96751,93531],{"class":147},[127,96753,994],{"class":154},[127,96755,687],{"class":147},[127,96757,96758,96761,96763,96766,96768,96770,96773,96775],{"class":129,"line":151},[127,96759,96760],{"class":147},"np.add(",[127,96762,530],{"class":154},[127,96764,96765],{"class":147},",x,",[127,96767,93583],{"class":5758},[127,96769,725],{"class":290},[127,96771,96772],{"class":147},"y[:",[127,96774,994],{"class":154},[127,96776,5199],{"class":147},[127,96778,96779],{"class":129,"line":167},[127,96780,96781],{"class":133},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[127,96783,96784],{"class":129,"line":415},[127,96785,96786],{"class":147},"y\n",[19,96788,12056],{},[19,96790,96791],{},[23,96792],{"alt":122,"src":96793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[117,96795,96797],{"className":30918,"code":96796,"language":30920,"meta":122,"style":122},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[124,96798,96799,96815,96835,96850],{"__ignoreMap":122},[127,96800,96801,96803,96805,96807,96809,96811,96813],{"class":129,"line":130},[127,96802,1494],{"class":147},[127,96804,725],{"class":290},[127,96806,93531],{"class":147},[127,96808,893],{"class":154},[127,96810,1053],{"class":147},[127,96812,1019],{"class":154},[127,96814,687],{"class":147},[127,96816,96817,96819,96821,96823,96825,96827,96829,96831,96833],{"class":129,"line":137},[127,96818,1519],{"class":147},[127,96820,725],{"class":290},[127,96822,96731],{"class":147},[127,96824,994],{"class":154},[127,96826,1053],{"class":147},[127,96828,94029],{"class":5758},[127,96830,725],{"class":290},[127,96832,684],{"class":154},[127,96834,687],{"class":147},[127,96836,96837,96840,96842,96844,96846,96848],{"class":129,"line":151},[127,96838,96839],{"class":147},"np.add(x,",[127,96841,530],{"class":154},[127,96843,1053],{"class":147},[127,96845,93583],{"class":5758},[127,96847,725],{"class":290},[127,96849,93978],{"class":147},[127,96851,96852],{"class":129,"line":167},[127,96853,96854],{"class":133},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96856,96857],{},"③empty_like()",[19,96859,96860],{},[30,96861,96862,96863,96868],{},"创建一个",[30,96864,96865],{},[30,96866,96867],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96870,96871,96874],{},[124,96872,96873],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96876,96877],{},[23,96878],{"alt":122,"src":96879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[62,96881,96883],{"id":96882},"_264-用法","2.6.4 ？？用法",[19,96885,96886],{},"当想查看一个函数的参数时，可以通过？？来实现",[117,96888,96890],{"className":30918,"code":96889,"language":30920,"meta":122,"style":122},"np.full??\n",[124,96891,96892],{"__ignoreMap":122},[127,96893,96894,96897],{"class":129,"line":130},[127,96895,96896],{"class":147},"np.full",[127,96898,96899],{"class":77932},"??\n",[62,96901,96903],{"id":96902},"_265-full创建数组","2.6.5 full()创建数组",[117,96905,96907],{"className":30918,"code":96906,"language":30920,"meta":122,"style":122},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[124,96908,96909,96914],{"__ignoreMap":122},[127,96910,96911],{"class":129,"line":130},[127,96912,96913],{"class":147},"full(shape,fill_value)\n",[127,96915,96916],{"class":129,"line":137},[127,96917,96918],{"class":147},"创建全为某个指定值的数组\n",[19,96920,95059],{},[117,96922,96924],{"className":30918,"code":96923,"language":30920,"meta":122,"style":122},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[124,96925,96926,96931],{"__ignoreMap":122},[127,96927,96928],{"class":129,"line":130},[127,96929,96930],{"class":133},"#创建一个一维数组,以20进行填充\n",[127,96932,96933,96936,96938,96940,96942],{"class":129,"line":137},[127,96934,96935],{"class":147},"np.full(",[127,96937,1121],{"class":154},[127,96939,1053],{"class":147},[127,96941,1374],{"class":154},[127,96943,687],{"class":147},[19,96945,93820],{},[117,96947,96949],{"className":30918,"code":96948,"language":30920,"meta":122,"style":122},"#创建二维数组\nnp.full((3,5),11)\n",[124,96950,96951,96955],{"__ignoreMap":122},[127,96952,96953],{"class":129,"line":130},[127,96954,94476],{"class":133},[127,96956,96957,96960,96962,96964,96966,96968,96970],{"class":129,"line":137},[127,96958,96959],{"class":147},"np.full((",[127,96961,749],{"class":154},[127,96963,1053],{"class":147},[127,96965,994],{"class":154},[127,96967,42796],{"class":147},[127,96969,1147],{"class":154},[127,96971,687],{"class":147},[19,96973,96974],{},"③full_like用法",[19,96976,96977],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96979,96980],{},"这里是指定填充而已",[117,96982,96984],{"className":30918,"code":96983,"language":30920,"meta":122,"style":122},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[124,96985,96986,96991,97015,97020],{"__ignoreMap":122},[127,96987,96988],{"class":129,"line":130},[127,96989,96990],{"class":133},"#创建一个指定形状数组\n",[127,96992,96993,96995,96997,96999,97001,97003,97005,97007,97009,97011,97013],{"class":129,"line":137},[127,96994,457],{"class":147},[127,96996,725],{"class":290},[127,96998,93531],{"class":147},[127,97000,893],{"class":154},[127,97002,1053],{"class":147},[127,97004,1000],{"class":154},[127,97006,93536],{"class":147},[127,97008,968],{"class":154},[127,97010,1053],{"class":147},[127,97012,1095],{"class":154},[127,97014,687],{"class":147},[127,97016,97017],{"class":129,"line":151},[127,97018,97019],{"class":133},"#进行指定填充\n",[127,97021,97022,97025,97027],{"class":129,"line":167},[127,97023,97024],{"class":147},"np.full_like(a,",[127,97026,1121],{"class":154},[127,97028,687],{"class":147},[19,97030,12056],{},[19,97032,97033],{},[23,97034],{"alt":122,"src":97035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[62,97037,97039],{"id":97038},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22539,97041,97043],{"id":97042},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[117,97045,97047],{"className":30918,"code":97046,"language":30920,"meta":122,"style":122},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[124,97048,97049,97066],{"__ignoreMap":122},[127,97050,97051,97054,97056,97058,97060,97062,97064],{"class":129,"line":130},[127,97052,97053],{"class":147},"np.eye(",[127,97055,968],{"class":154},[127,97057,1053],{"class":147},[127,97059,94029],{"class":5758},[127,97061,725],{"class":290},[127,97063,684],{"class":154},[127,97065,687],{"class":147},[127,97067,97068],{"class":129,"line":137},[127,97069,97070],{"class":133},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22539,97072,97074],{"id":97073},"_2662-法2identity","2.6.6.2 法2：identity()",[117,97076,97078],{"className":30918,"code":97077,"language":30920,"meta":122,"style":122},"#identity()\nnp.identity(5,dtype=int)\n",[124,97079,97080,97085],{"__ignoreMap":122},[127,97081,97082],{"class":129,"line":130},[127,97083,97084],{"class":133},"#identity()\n",[127,97086,97087,97090,97092,97094,97096,97098,97100],{"class":129,"line":137},[127,97088,97089],{"class":147},"np.identity(",[127,97091,994],{"class":154},[127,97093,1053],{"class":147},[127,97095,94029],{"class":5758},[127,97097,725],{"class":290},[127,97099,684],{"class":154},[127,97101,687],{"class":147},[19,97103,97104],{},"两个函数是有区别的",[19,97106,97107],{},[23,97108],{"alt":122,"src":97109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97111,97112],{},[23,97113],{"alt":122,"src":97114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[117,97116,97118],{"className":30918,"code":97117,"language":30920,"meta":122,"style":122},"# 创建一个 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",[124,97119,97120,97125,97137,97142,97147,97152,97157,97161,97166,97186,97190,97195,97200],{"__ignoreMap":122},[127,97121,97122],{"class":129,"line":130},[127,97123,97124],{"class":133},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[127,97126,97127,97129,97131,97133,97135],{"class":129,"line":137},[127,97128,97053],{"class":147},[127,97130,749],{"class":154},[127,97132,12977],{"class":147},[127,97134,968],{"class":154},[127,97136,687],{"class":147},[127,97138,97139],{"class":129,"line":151},[127,97140,97141],{"class":133},"# 输出:\n",[127,97143,97144],{"class":129,"line":167},[127,97145,97146],{"class":133},"# [[1. 0. 0. 0.]\n",[127,97148,97149],{"class":129,"line":415},[127,97150,97151],{"class":133},"#  [0. 1. 0. 0.]\n",[127,97153,97154],{"class":129,"line":421},[127,97155,97156],{"class":133},"#  [0. 0. 1. 0.]]\n",[127,97158,97159],{"class":129,"line":1766},[127,97160,2942],{"emptyLinePlaceholder":606},[127,97162,97163],{"class":129,"line":1856},[127,97164,97165],{"class":133},"# 对角线向上偏移1\n",[127,97167,97168,97170,97172,97174,97176,97178,97180,97182,97184],{"class":129,"line":1862},[127,97169,97053],{"class":147},[127,97171,749],{"class":154},[127,97173,12977],{"class":147},[127,97175,968],{"class":154},[127,97177,12977],{"class":147},[127,97179,1168],{"class":5758},[127,97181,725],{"class":290},[127,97183,893],{"class":154},[127,97185,687],{"class":147},[127,97187,97188],{"class":129,"line":1874},[127,97189,97141],{"class":133},[127,97191,97192],{"class":129,"line":2155},[127,97193,97194],{"class":133},"# [[0. 1. 0. 0.]\n",[127,97196,97197],{"class":129,"line":2160},[127,97198,97199],{"class":133},"#  [0. 0. 1. 0.]\n",[127,97201,97202],{"class":129,"line":2166},[127,97203,97204],{"class":133},"#  [0. 0. 0. 1.]]\n",[62,97206,97208],{"id":97207},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[117,97210,97212],{"className":30918,"code":97211,"language":30920,"meta":122,"style":122},"#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",[124,97213,97214,97219,97223,97228,97233,97238,97243,97248,97253,97258,97263],{"__ignoreMap":122},[127,97215,97216],{"class":129,"line":130},[127,97217,97218],{"class":133},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[127,97220,97221],{"class":129,"line":137},[127,97222,96227],{"class":781},[127,97224,97225],{"class":129,"line":151},[127,97226,97227],{"class":781},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[127,97229,97230],{"class":129,"line":167},[127,97231,97232],{"class":781},"参数介绍：\n",[127,97234,97235],{"class":129,"line":415},[127,97236,97237],{"class":781},"start：序列的起始值\n",[127,97239,97240],{"class":129,"line":421},[127,97241,97242],{"class":781},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[127,97244,97245],{"class":129,"line":1766},[127,97246,97247],{"class":781},"num：要生长的等步长的样本数量，默认为50\n",[127,97249,97250],{"class":129,"line":1856},[127,97251,97252],{"class":781},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[127,97254,97255],{"class":129,"line":1862},[127,97256,97257],{"class":781},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[127,97259,97260],{"class":129,"line":1874},[127,97261,97262],{"class":781},"dtype：ndarry的数据类型\n",[127,97264,97265],{"class":129,"line":2155},[127,97266,96227],{"class":781},[19,97268,97269],{},[23,97270],{"alt":122,"src":97271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97273,97274],{},"这里num=是可以省略的",[19,97276,97277],{},"也就是下方两行代码结果是一模一样的",[117,97279,97281],{"className":30918,"code":97280,"language":30920,"meta":122,"style":122},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[124,97282,97283,97300],{"__ignoreMap":122},[127,97284,97285,97288,97290,97292,97294,97296,97298],{"class":129,"line":130},[127,97286,97287],{"class":147},"np.linspace(",[127,97289,893],{"class":154},[127,97291,1053],{"class":147},[127,97293,994],{"class":154},[127,97295,1053],{"class":147},[127,97297,994],{"class":154},[127,97299,687],{"class":147},[127,97301,97302,97304,97306,97308,97310,97312,97314,97316,97318],{"class":129,"line":137},[127,97303,97287],{"class":147},[127,97305,893],{"class":154},[127,97307,1053],{"class":147},[127,97309,994],{"class":154},[127,97311,1053],{"class":147},[127,97313,2208],{"class":5758},[127,97315,725],{"class":290},[127,97317,994],{"class":154},[127,97319,687],{"class":147},[62,97321,97323],{"id":97322},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[117,97325,97327],{"className":30918,"code":97326,"language":30920,"meta":122,"style":122},"#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",[124,97328,97329,97334,97338,97343,97348,97353,97358,97362,97367,97372,97376],{"__ignoreMap":122},[127,97330,97331],{"class":129,"line":130},[127,97332,97333],{"class":133},"#logspace函数用于创建一个等比数列，格式如下：\n",[127,97335,97336],{"class":129,"line":137},[127,97337,96227],{"class":781},[127,97339,97340],{"class":129,"line":151},[127,97341,97342],{"class":781},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[127,97344,97345],{"class":129,"line":167},[127,97346,97347],{"class":781},"参数为：\n",[127,97349,97350],{"class":129,"line":415},[127,97351,97352],{"class":781},"start:序列的起始位置为：base**start\n",[127,97354,97355],{"class":129,"line":421},[127,97356,97357],{"class":781},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[127,97359,97360],{"class":129,"line":1766},[127,97361,97247],{"class":781},[127,97363,97364],{"class":129,"line":1856},[127,97365,97366],{"class":781},"endpoint：是否包含 stop 这个值，默认是 True\n",[127,97368,97369],{"class":129,"line":1862},[127,97370,97371],{"class":781},"base：对数的底数，默认是 10（常见对数）\n",[127,97373,97374],{"class":129,"line":1874},[127,97375,97262],{"class":781},[127,97377,97378],{"class":129,"line":2155},[127,97379,96227],{"class":781},[19,97381,97382],{},[23,97383],{"alt":122,"src":97384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97386,97387],{},"logspace()函数中的num参数也是可以不写num=的",[19,97389,97390],{},"endpoint是不可以省略的",[575,97392,97393],{},"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":122,"searchDepth":137,"depth":137,"links":97395},[97396,97400,97405,97409,97413,97414],{"id":95785,"depth":137,"text":95786,"children":97397},[97398,97399],{"id":95789,"depth":151,"text":95790},{"id":95862,"depth":151,"text":95863},{"id":95894,"depth":137,"text":95895,"children":97401},[97402,97403,97404],{"id":95898,"depth":151,"text":95899},{"id":96080,"depth":151,"text":96081},{"id":96158,"depth":151,"text":96159},{"id":96193,"depth":137,"text":96194,"children":97406},[97407,97408],{"id":96197,"depth":151,"text":96198},{"id":96254,"depth":151,"text":96255},{"id":96350,"depth":137,"text":96351,"children":97410},[97411,97412],{"id":96354,"depth":151,"text":96355},{"id":96366,"depth":151,"text":96367},{"id":96400,"depth":137,"text":96401},{"id":96437,"depth":137,"text":96438,"children":97415},[97416,97417,97418,97419,97420,97421,97422,97423],{"id":96441,"depth":151,"text":96442},{"id":96666,"depth":151,"text":96667},{"id":96673,"depth":151,"text":96674},{"id":96882,"depth":151,"text":96883},{"id":96902,"depth":151,"text":96903},{"id":97038,"depth":151,"text":97039},{"id":97207,"depth":151,"text":97208},{"id":97322,"depth":151,"text":97323},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95777,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97430,"title":97431,"body":97432,"description":603,"extension":604,"meta":97525,"navigation":606,"path":97526,"seo":97527,"stem":97528,"__hash__":97529},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97433,"toc":97523},[97434,97437,97440,97443,97446,97449,97452,97455,97458,97461,97464,97467,97469,97472,97475,97480,97483,97486,97520],[10,97435,97431],{"id":97436},"_20魔法命令mprun",[19,97438,97439],{},"逐行分析数据内存的使用情况",[19,97441,97442],{},"语法格式：",[19,97444,97445],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97447,97448],{},"分析结果列如下：",[19,97450,97451],{},"Line行号",[19,97453,97454],{},"Mem usage内存使用大小",[19,97456,97457],{},"increment内存增量",[19,97459,97460],{},"Line content代码内容",[19,97462,97463],{},"补充说明：",[19,97465,97466],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97468,95732],{},[19,97470,97471],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97473,97474],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97476,97477],{},[23,97478],{"alt":122,"src":97479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97481,97482],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97484,97485],{},"这时候需要重新加载模块",[117,97487,97489],{"className":30918,"code":97488,"language":30920,"meta":122,"style":122},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[124,97490,97491,97496,97503,97508],{"__ignoreMap":122},[127,97492,97493],{"class":129,"line":130},[127,97494,97495],{"class":133},"#重新加载模块\n",[127,97497,97498,97500],{"class":129,"line":137},[127,97499,30932],{"class":290},[127,97501,97502],{"class":147}," importlib\n",[127,97504,97505],{"class":129,"line":151},[127,97506,97507],{"class":147},"importlib.reload(mprun_test)\n",[127,97509,97510,97512,97515,97517],{"class":129,"line":167},[127,97511,1003],{"class":290},[127,97513,97514],{"class":147},"mprun ",[127,97516,1207],{"class":290},[127,97518,97519],{"class":147},"f mprun_test.fun_test mprun_test.fun_test()\n",[575,97521,97522],{},"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":122,"searchDepth":137,"depth":137,"links":97524},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97431,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97531,"title":97532,"body":97533,"description":603,"extension":604,"meta":97550,"navigation":606,"path":97551,"seo":97552,"stem":97553,"__hash__":97554},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97534,"toc":97548},[97535,97538,97543],[10,97536,97532],{"id":97537},"_3一维数组的索引和切片",[19,97539,97540],{},[23,97541],{"alt":122,"src":97542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97544,97545],{},[23,97546],{"alt":122,"src":97547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":122,"searchDepth":137,"depth":137,"links":97549},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97532,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97556,"title":97557,"body":97558,"description":603,"extension":604,"meta":98041,"navigation":606,"path":98042,"seo":98043,"stem":98044,"__hash__":98045},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97559,"toc":98039},[97560,97563,97566,97571,97604,97607,97645,97648,97682,97685,97790,97793,97830,97833,97934,97937,97988,97991,98033,98036],[10,97561,97557],{"id":97562},"_4二维数组的索引与切片",[19,97564,97565],{},"①获取指定单个元素",[19,97567,97568],{},[23,97569],{"alt":122,"src":97570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[117,97572,97574],{"className":30918,"code":97573,"language":30920,"meta":122,"style":122},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[124,97575,97576,97581,97586,97591],{"__ignoreMap":122},[127,97577,97578],{"class":129,"line":130},[127,97579,97580],{"class":133},"#获取元素9\n",[127,97582,97583],{"class":129,"line":137},[127,97584,97585],{"class":133},"#先获取所在行，再获取所在列\n",[127,97587,97588],{"class":129,"line":151},[127,97589,97590],{"class":133},"#数组[行索引号，列索引号]\n",[127,97592,97593,97596,97598,97600,97602],{"class":129,"line":167},[127,97594,97595],{"class":147},"a[",[127,97597,893],{"class":154},[127,97599,1053],{"class":147},[127,97601,530],{"class":154},[127,97603,33786],{"class":147},[19,97605,97606],{},"②获取整行元素",[117,97608,97610],{"className":30918,"code":97609,"language":30920,"meta":122,"style":122},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[124,97611,97612,97617,97622,97630,97635],{"__ignoreMap":122},[127,97613,97614],{"class":129,"line":130},[127,97615,97616],{"class":133},"#获取整行 数组[行索引号]\n",[127,97618,97619],{"class":129,"line":137},[127,97620,97621],{"class":133},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[127,97623,97624,97626,97628],{"class":129,"line":151},[127,97625,97595],{"class":147},[127,97627,530],{"class":154},[127,97629,33786],{"class":147},[127,97631,97632],{"class":129,"line":167},[127,97633,97634],{"class":133},"#也可以负索引获取一行\n",[127,97636,97637,97639,97641,97643],{"class":129,"line":415},[127,97638,97595],{"class":147},[127,97640,1207],{"class":290},[127,97642,893],{"class":154},[127,97644,33786],{"class":147},[19,97646,97647],{},"③获取整列元素",[117,97649,97651],{"className":30918,"code":97650,"language":30920,"meta":122,"style":122},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[124,97652,97653,97658,97667,97672],{"__ignoreMap":122},[127,97654,97655],{"class":129,"line":130},[127,97656,97657],{"class":133},"#获取整列 数组名[:,列索引]\n",[127,97659,97660,97663,97665],{"class":129,"line":137},[127,97661,97662],{"class":147},"a[:,",[127,97664,530],{"class":154},[127,97666,33786],{"class":147},[127,97668,97669],{"class":129,"line":151},[127,97670,97671],{"class":133},"#也可以负索引获取一列\n",[127,97673,97674,97676,97678,97680],{"class":129,"line":167},[127,97675,97662],{"class":147},[127,97677,1207],{"class":290},[127,97679,893],{"class":154},[127,97681,33786],{"class":147},[19,97683,97684],{},"④部分行部分列的元素",[117,97686,97688],{"className":30918,"code":97687,"language":30920,"meta":122,"style":122},"#部分行部分列 数组名[行切片，列切片]\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",[124,97689,97690,97695,97705,97709,97713,97718,97723,97727,97739,97743,97747,97752,97757,97762,97767,97771,97776],{"__ignoreMap":122},[127,97691,97692],{"class":129,"line":130},[127,97693,97694],{"class":133},"#部分行部分列 数组名[行切片，列切片]\n",[127,97696,97697,97700,97702],{"class":129,"line":137},[127,97698,97699],{"class":147},"a[:",[127,97701,530],{"class":154},[127,97703,97704],{"class":147},",:]\n",[127,97706,97707],{"class":129,"line":151},[127,97708,94093],{"class":133},[127,97710,97711],{"class":129,"line":167},[127,97712,94457],{"class":781},[127,97714,97715],{"class":129,"line":415},[127,97716,97717],{"class":781},"array([[ 1,  2,  3,  4,  5,  6],\n",[127,97719,97720],{"class":129,"line":421},[127,97721,97722],{"class":781},"       [ 7,  8,  9, 10, 11, 12]])\n",[127,97724,97725],{"class":129,"line":1766},[127,97726,94457],{"class":781},[127,97728,97729,97731,97733,97735,97737],{"class":129,"line":1856},[127,97730,97662],{"class":147},[127,97732,893],{"class":154},[127,97734,1533],{"class":147},[127,97736,968],{"class":154},[127,97738,33786],{"class":147},[127,97740,97741],{"class":129,"line":1862},[127,97742,94093],{"class":133},[127,97744,97745],{"class":129,"line":1874},[127,97746,94457],{"class":781},[127,97748,97749],{"class":129,"line":2155},[127,97750,97751],{"class":781},"array([[ 2,  3,  4],\n",[127,97753,97754],{"class":129,"line":2160},[127,97755,97756],{"class":781},"       [ 8,  9, 10],\n",[127,97758,97759],{"class":129,"line":2166},[127,97760,97761],{"class":781},"       [14, 15, 16],\n",[127,97763,97764],{"class":129,"line":2171},[127,97765,97766],{"class":781},"       [20, 21, 22]])\n",[127,97768,97769],{"class":129,"line":2185},[127,97770,94457],{"class":781},[127,97772,97773],{"class":129,"line":2190},[127,97774,97775],{"class":133},"#对列行同时进行切片，使用了step参数\n",[127,97777,97778,97781,97783,97786,97788],{"class":129,"line":2196},[127,97779,97780],{"class":147},"a[::",[127,97782,530],{"class":154},[127,97784,97785],{"class":147},",::",[127,97787,530],{"class":154},[127,97789,33786],{"class":147},[19,97791,97792],{},"⑤同时获取两个元素",[117,97794,97796],{"className":30918,"code":97795,"language":30920,"meta":122,"style":122},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[124,97797,97798,97803,97808],{"__ignoreMap":122},[127,97799,97800],{"class":129,"line":130},[127,97801,97802],{"class":133},"#同时获取第三行第二列，第四行第一列\n",[127,97804,97805],{"class":129,"line":137},[127,97806,97807],{"class":133},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[127,97809,97810,97813,97815,97817,97819,97821,97823,97825,97827],{"class":129,"line":151},[127,97811,97812],{"class":147},"a[(",[127,97814,530],{"class":154},[127,97816,1053],{"class":147},[127,97818,749],{"class":154},[127,97820,42787],{"class":147},[127,97822,893],{"class":154},[127,97824,1053],{"class":147},[127,97826,867],{"class":154},[127,97828,97829],{"class":147},")]\n",[19,97831,97832],{},"⑥切片，对行进行反向获取",[117,97834,97836],{"className":30918,"code":97835,"language":30920,"meta":122,"style":122},"#切片 对所有行进行反向获取\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",[124,97837,97838,97843,97853,97857,97861,97866,97871,97876,97881,97885,97890,97906,97910,97915,97920,97925,97930],{"__ignoreMap":122},[127,97839,97840],{"class":129,"line":130},[127,97841,97842],{"class":133},"#切片 对所有行进行反向获取\n",[127,97844,97845,97847,97849,97851],{"class":129,"line":137},[127,97846,97780],{"class":147},[127,97848,1207],{"class":290},[127,97850,893],{"class":154},[127,97852,33786],{"class":147},[127,97854,97855],{"class":129,"line":151},[127,97856,94093],{"class":133},[127,97858,97859],{"class":129,"line":167},[127,97860,94457],{"class":781},[127,97862,97863],{"class":129,"line":415},[127,97864,97865],{"class":781},"array([[19, 20, 21, 22, 23, 24],\n",[127,97867,97868],{"class":129,"line":421},[127,97869,97870],{"class":781},"       [13, 14, 15, 16, 17, 18],\n",[127,97872,97873],{"class":129,"line":1766},[127,97874,97875],{"class":781},"       [ 7,  8,  9, 10, 11, 12],\n",[127,97877,97878],{"class":129,"line":1856},[127,97879,97880],{"class":781},"       [ 1,  2,  3,  4,  5,  6]])\n",[127,97882,97883],{"class":129,"line":1862},[127,97884,94457],{"class":781},[127,97886,97887],{"class":129,"line":1874},[127,97888,97889],{"class":133},"#对行列都进行反向切片获取\n",[127,97891,97892,97894,97896,97898,97900,97902,97904],{"class":129,"line":2155},[127,97893,97780],{"class":147},[127,97895,1207],{"class":290},[127,97897,893],{"class":154},[127,97899,97785],{"class":147},[127,97901,1207],{"class":290},[127,97903,893],{"class":154},[127,97905,33786],{"class":147},[127,97907,97908],{"class":129,"line":2160},[127,97909,94457],{"class":781},[127,97911,97912],{"class":129,"line":2166},[127,97913,97914],{"class":781},"array([[24, 23, 22, 21, 20, 19],\n",[127,97916,97917],{"class":129,"line":2171},[127,97918,97919],{"class":781},"       [18, 17, 16, 15, 14, 13],\n",[127,97921,97922],{"class":129,"line":2185},[127,97923,97924],{"class":781},"       [12, 11, 10,  9,  8,  7],\n",[127,97926,97927],{"class":129,"line":2190},[127,97928,97929],{"class":781},"       [ 6,  5,  4,  3,  2,  1]])\n",[127,97931,97932],{"class":129,"line":2196},[127,97933,94457],{"class":781},[19,97935,97936],{},"⑦修改元素",[117,97938,97940],{"className":30918,"code":97939,"language":30920,"meta":122,"style":122},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[124,97941,97942,97947,97965,97970],{"__ignoreMap":122},[127,97943,97944],{"class":129,"line":130},[127,97945,97946],{"class":133},"#获取前两行和前两列\n",[127,97948,97949,97952,97954,97956,97958,97961,97963],{"class":129,"line":137},[127,97950,97951],{"class":147},"sub_a",[127,97953,725],{"class":290},[127,97955,97699],{"class":147},[127,97957,530],{"class":154},[127,97959,97960],{"class":147},",:",[127,97962,530],{"class":154},[127,97964,33786],{"class":147},[127,97966,97967],{"class":129,"line":151},[127,97968,97969],{"class":133},"#修改sub_a第一个元素的值\n",[127,97971,97972,97975,97977,97979,97981,97983,97985],{"class":129,"line":167},[127,97973,97974],{"class":147},"sub_a[",[127,97976,867],{"class":154},[127,97978,1053],{"class":147},[127,97980,867],{"class":154},[127,97982,1614],{"class":147},[127,97984,725],{"class":290},[127,97986,97987],{"class":154},"100\n",[19,97989,97990],{},"⑧数组复制copy()",[117,97992,97994],{"className":30918,"code":97993,"language":30920,"meta":122,"style":122},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[124,97995,97996,98001,98011,98016],{"__ignoreMap":122},[127,97997,97998],{"class":129,"line":130},[127,97999,98000],{"class":133},"#数组复制\n",[127,98002,98003,98006,98008],{"class":129,"line":137},[127,98004,98005],{"class":147},"copy_a",[127,98007,725],{"class":290},[127,98009,98010],{"class":147},"np.copy(sub_a)\n",[127,98012,98013],{"class":129,"line":151},[127,98014,98015],{"class":133},"#修改copy_a后不影响原数组\n",[127,98017,98018,98021,98023,98025,98027,98029,98031],{"class":129,"line":167},[127,98019,98020],{"class":147},"copy_a[",[127,98022,867],{"class":154},[127,98024,1053],{"class":147},[127,98026,867],{"class":154},[127,98028,1614],{"class":147},[127,98030,725],{"class":290},[127,98032,97987],{"class":154},[19,98034,98035],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[575,98037,98038],{},"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":122,"searchDepth":137,"depth":137,"links":98040},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97557,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98047,"title":98048,"body":98049,"description":603,"extension":604,"meta":98541,"navigation":606,"path":98542,"seo":98543,"stem":98544,"__hash__":98545},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98050,"toc":98533},[98051,98054,98058,98061,98064,98117,98120,98145,98148,98167,98187,98190,98206,98210,98256,98260,98302,98306,98309,98312,98315,98318,98321,98383,98443,98447,98450,98507,98511,98516,98525,98530],[10,98052,98048],{"id":98053},"_5改变数组的维度",[14,98055,98057],{"id":98056},"_51-使用reshape","5.1 使用reshape()",[19,98059,98060],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98062,98063],{},"①一维数组转换为二维数组",[117,98065,98067],{"className":30918,"code":98066,"language":30920,"meta":122,"style":122},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[124,98068,98069,98085,98090,98095,98100],{"__ignoreMap":122},[127,98070,98071,98073,98075,98077,98079,98081,98083],{"class":129,"line":130},[127,98072,457],{"class":147},[127,98074,725],{"class":290},[127,98076,93531],{"class":147},[127,98078,893],{"class":154},[127,98080,1053],{"class":147},[127,98082,1198],{"class":154},[127,98084,687],{"class":147},[127,98086,98087],{"class":129,"line":137},[127,98088,98089],{"class":133},"#将一维数组进行转换\n",[127,98091,98092],{"class":129,"line":151},[127,98093,98094],{"class":133},"#注意点：元素个数不可以变\n",[127,98096,98097],{"class":129,"line":167},[127,98098,98099],{"class":133},"#转换维度要保持一致，不一致就异常！！！\n",[127,98101,98102,98104,98106,98109,98111,98113,98115],{"class":129,"line":415},[127,98103,93835],{"class":147},[127,98105,725],{"class":290},[127,98107,98108],{"class":147},"a.reshape(",[127,98110,530],{"class":154},[127,98112,1053],{"class":147},[127,98114,1019],{"class":154},[127,98116,687],{"class":147},[19,98118,98119],{},"②一维数组转换为三维数组",[117,98121,98123],{"className":30918,"code":98122,"language":30920,"meta":122,"style":122},"aaa=a.reshape(2,3,2)\n",[124,98124,98125],{"__ignoreMap":122},[127,98126,98127,98129,98131,98133,98135,98137,98139,98141,98143],{"class":129,"line":130},[127,98128,96050],{"class":147},[127,98130,725],{"class":290},[127,98132,98108],{"class":147},[127,98134,530],{"class":154},[127,98136,1053],{"class":147},[127,98138,749],{"class":154},[127,98140,1053],{"class":147},[127,98142,530],{"class":154},[127,98144,687],{"class":147},[19,98146,98147],{},"③二维数组转化为一维数组",[117,98149,98151],{"className":30918,"code":98150,"language":30920,"meta":122,"style":122},"#知道元素个数：\naa.reshape(12)\n",[124,98152,98153,98158],{"__ignoreMap":122},[127,98154,98155],{"class":129,"line":130},[127,98156,98157],{"class":133},"#知道元素个数：\n",[127,98159,98160,98163,98165],{"class":129,"line":137},[127,98161,98162],{"class":147},"aa.reshape(",[127,98164,1173],{"class":154},[127,98166,687],{"class":147},[117,98168,98170],{"className":30918,"code":98169,"language":30920,"meta":122,"style":122},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[124,98171,98172,98177],{"__ignoreMap":122},[127,98173,98174],{"class":129,"line":130},[127,98175,98176],{"class":133},"#不知道元素个数，参数传递-1\n",[127,98178,98179,98181,98183,98185],{"class":129,"line":137},[127,98180,98162],{"class":147},[127,98182,1207],{"class":290},[127,98184,893],{"class":154},[127,98186,687],{"class":147},[19,98188,98189],{},"④三维数组转换为一维数组",[117,98191,98193],{"className":30918,"code":98192,"language":30920,"meta":122,"style":122},"aaa.reshape(-1)\n",[124,98194,98195],{"__ignoreMap":122},[127,98196,98197,98200,98202,98204],{"class":129,"line":130},[127,98198,98199],{"class":147},"aaa.reshape(",[127,98201,1207],{"class":290},[127,98203,893],{"class":154},[127,98205,687],{"class":147},[14,98207,98209],{"id":98208},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[117,98211,98213],{"className":30918,"code":98212,"language":30920,"meta":122,"style":122},"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",[124,98214,98215,98242,98247,98251],{"__ignoreMap":122},[127,98216,98217,98219,98221,98223,98225,98227,98229,98231,98233,98235,98237,98239],{"class":129,"line":130},[127,98218,93835],{"class":147},[127,98220,725],{"class":290},[127,98222,93531],{"class":147},[127,98224,893],{"class":154},[127,98226,1053],{"class":147},[127,98228,1198],{"class":154},[127,98230,93536],{"class":147},[127,98232,530],{"class":154},[127,98234,1053],{"class":147},[127,98236,1019],{"class":154},[127,98238,1104],{"class":147},[127,98240,98241],{"class":133},"#转换为2行6列的数组\n",[127,98243,98244],{"class":129,"line":137},[127,98245,98246],{"class":147},"aa.revel()\n",[127,98248,98249],{"class":129,"line":151},[127,98250,94093],{"class":133},[127,98252,98253],{"class":129,"line":167},[127,98254,98255],{"class":133},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98257,98259],{"id":98258},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[117,98261,98263],{"className":30918,"code":98262,"language":30920,"meta":122,"style":122},"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",[124,98264,98265,98289,98294,98298],{"__ignoreMap":122},[127,98266,98267,98269,98271,98273,98275,98277,98279,98281,98283,98285,98287],{"class":129,"line":130},[127,98268,93835],{"class":147},[127,98270,725],{"class":290},[127,98272,93531],{"class":147},[127,98274,893],{"class":154},[127,98276,1053],{"class":147},[127,98278,1198],{"class":154},[127,98280,93536],{"class":147},[127,98282,530],{"class":154},[127,98284,1053],{"class":147},[127,98286,1019],{"class":154},[127,98288,687],{"class":147},[127,98290,98291],{"class":129,"line":137},[127,98292,98293],{"class":147},"aa.flatten()\n",[127,98295,98296],{"class":129,"line":151},[127,98297,94093],{"class":133},[127,98299,98300],{"class":129,"line":167},[127,98301,98255],{"class":133},[14,98303,98305],{"id":98304},"_54-使用resize","5.4 使用resize()",[19,98307,98308],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98310,98311],{},"通过resize方法可以改变数组的维度",[19,98313,98314],{},"#resize修改数组维度",[19,98316,98317],{},"#以元组的形式指定形状",[19,98319,98320],{},"#改变的是原数组",[117,98322,98324],{"className":30918,"code":98323,"language":30920,"meta":122,"style":122},"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",[124,98325,98326,98342,98362,98375,98379],{"__ignoreMap":122},[127,98327,98328,98330,98332,98334,98336,98338,98340],{"class":129,"line":130},[127,98329,457],{"class":147},[127,98331,725],{"class":290},[127,98333,93531],{"class":147},[127,98335,893],{"class":154},[127,98337,1053],{"class":147},[127,98339,1198],{"class":154},[127,98341,687],{"class":147},[127,98343,98344,98347,98349,98351,98353,98355,98357,98359],{"class":129,"line":137},[127,98345,98346],{"class":147},"a.shape",[127,98348,725],{"class":290},[127,98350,681],{"class":147},[127,98352,530],{"class":154},[127,98354,1053],{"class":147},[127,98356,1019],{"class":154},[127,98358,1104],{"class":147},[127,98360,98361],{"class":133},"#改变了原数组\n",[127,98363,98364,98366,98368,98371,98373],{"class":129,"line":151},[127,98365,457],{"class":147},[127,98367,725],{"class":290},[127,98369,98370],{"class":147},"resize((",[127,98372,1173],{"class":154},[127,98374,31037],{"class":147},[127,98376,98377],{"class":129,"line":167},[127,98378,94093],{"class":133},[127,98380,98381],{"class":129,"line":415},[127,98382,98255],{"class":133},[117,98384,98386],{"className":30918,"code":98385,"language":30920,"meta":122,"style":122},"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",[124,98387,98388,98401,98405,98409,98414,98419,98424,98429,98434,98439],{"__ignoreMap":122},[127,98389,98390,98393,98395,98397,98399],{"class":129,"line":130},[127,98391,98392],{"class":147},"a.resize((",[127,98394,1019],{"class":154},[127,98396,1053],{"class":147},[127,98398,530],{"class":154},[127,98400,31037],{"class":147},[127,98402,98403],{"class":129,"line":137},[127,98404,94093],{"class":133},[127,98406,98407],{"class":129,"line":151},[127,98408,94457],{"class":781},[127,98410,98411],{"class":129,"line":167},[127,98412,98413],{"class":781},"array([[ 1,  2],\n",[127,98415,98416],{"class":129,"line":415},[127,98417,98418],{"class":781},"       [ 3,  4],\n",[127,98420,98421],{"class":129,"line":421},[127,98422,98423],{"class":781},"       [ 5,  6],\n",[127,98425,98426],{"class":129,"line":1766},[127,98427,98428],{"class":781},"       [ 7,  8],\n",[127,98430,98431],{"class":129,"line":1856},[127,98432,98433],{"class":781},"       [ 9, 10],\n",[127,98435,98436],{"class":129,"line":1862},[127,98437,98438],{"class":781},"       [11, 12]])\n",[127,98440,98441],{"class":129,"line":1874},[127,98442,94457],{"class":781},[14,98444,98446],{"id":98445},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98448,98449],{},"改变了原数组",[117,98451,98453],{"className":30918,"code":98452,"language":30920,"meta":122,"style":122},"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",[124,98454,98455,98471,98487,98491,98495,98499,98503],{"__ignoreMap":122},[127,98456,98457,98459,98461,98463,98465,98467,98469],{"class":129,"line":130},[127,98458,457],{"class":147},[127,98460,725],{"class":290},[127,98462,93531],{"class":147},[127,98464,893],{"class":154},[127,98466,1053],{"class":147},[127,98468,1198],{"class":154},[127,98470,687],{"class":147},[127,98472,98473,98475,98477,98479,98481,98483,98485],{"class":129,"line":137},[127,98474,98346],{"class":147},[127,98476,725],{"class":290},[127,98478,681],{"class":147},[127,98480,530],{"class":154},[127,98482,1053],{"class":147},[127,98484,1019],{"class":154},[127,98486,687],{"class":147},[127,98488,98489],{"class":129,"line":151},[127,98490,94093],{"class":133},[127,98492,98493],{"class":129,"line":167},[127,98494,94457],{"class":781},[127,98496,98497],{"class":129,"line":415},[127,98498,97717],{"class":781},[127,98500,98501],{"class":129,"line":421},[127,98502,97722],{"class":781},[127,98504,98505],{"class":129,"line":1766},[127,98506,94457],{"class":781},[14,98508,98510],{"id":98509},"_56-重要比较","5.6 重要比较：",[19,98512,98513],{},[23,98514],{"alt":122,"src":98515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98517,98518,98519,98521,98522,98524],{},"口诀：NumPy 函数要么用 ",[124,98520,96492],{},"，要么用 ",[124,98523,32036],{},"，创建结构用 shape，造数据用 size",[19,98526,98527],{},[23,98528],{"alt":122,"src":98529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[575,98531,98532],{},"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":122,"searchDepth":137,"depth":137,"links":98534},[98535,98536,98537,98538,98539,98540],{"id":98056,"depth":137,"text":98057},{"id":98208,"depth":137,"text":98209},{"id":98258,"depth":137,"text":98259},{"id":98304,"depth":137,"text":98305},{"id":98445,"depth":137,"text":98446},{"id":98509,"depth":137,"text":98510},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98048,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98547,"title":98548,"body":98549,"description":603,"extension":604,"meta":99621,"navigation":606,"path":99622,"seo":99623,"stem":99624,"__hash__":99625},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98550,"toc":99615},[98551,98554,98558,98561,98564,98567,98632,98635,98675,98678,98760,98763,98768,98790,98792,98797,98802,98805,98808,98963,98966,99168,99172,99175,99178,99246,99248,99253,99256,99259,99339,99343,99346,99348,99421,99423,99428,99430,99510,99514,99517,99520,99523,99526,99529,99532,99612],[10,98552,98548],{"id":98553},"_6数组的拼接",[14,98555,98557],{"id":98556},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98559,98560],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98562,98563],{},"函数内部传两个数列构成的数列或者元组",[19,98565,98566],{},"①一维数组的拼接",[117,98568,98570],{"className":30918,"code":98569,"language":30920,"meta":122,"style":122},"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",[124,98571,98572,98592,98612,98617,98622,98627],{"__ignoreMap":122},[127,98573,98574,98576,98578,98580,98582,98584,98586,98588,98590],{"class":129,"line":130},[127,98575,457],{"class":147},[127,98577,725],{"class":290},[127,98579,93553],{"class":147},[127,98581,893],{"class":154},[127,98583,1053],{"class":147},[127,98585,530],{"class":154},[127,98587,1053],{"class":147},[127,98589,749],{"class":154},[127,98591,5199],{"class":147},[127,98593,98594,98596,98598,98600,98602,98604,98606,98608,98610],{"class":129,"line":137},[127,98595,938],{"class":147},[127,98597,725],{"class":290},[127,98599,93553],{"class":147},[127,98601,968],{"class":154},[127,98603,1053],{"class":147},[127,98605,994],{"class":154},[127,98607,1053],{"class":147},[127,98609,1019],{"class":154},[127,98611,5199],{"class":147},[127,98613,98614],{"class":129,"line":151},[127,98615,98616],{"class":133},"#调用concatenate进行数组拼接\n",[127,98618,98619],{"class":129,"line":167},[127,98620,98621],{"class":147},"np.concatenate((a,b))\n",[127,98623,98624],{"class":129,"line":415},[127,98625,98626],{"class":133},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[127,98628,98629],{"class":129,"line":421},[127,98630,98631],{"class":133},"#np.concatenate([a,b])\n",[19,98633,98634],{},"②一维多个数组拼接",[117,98636,98638],{"className":30918,"code":98637,"language":30920,"meta":122,"style":122},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[124,98639,98640,98645,98665,98670],{"__ignoreMap":122},[127,98641,98642],{"class":129,"line":130},[127,98643,98644],{"class":133},"#也可以多个数组进行拼接\n",[127,98646,98647,98649,98651,98653,98655,98657,98659,98661,98663],{"class":129,"line":137},[127,98648,963],{"class":147},[127,98650,725],{"class":290},[127,98652,93553],{"class":147},[127,98654,1121],{"class":154},[127,98656,1053],{"class":147},[127,98658,1147],{"class":154},[127,98660,1053],{"class":147},[127,98662,1198],{"class":154},[127,98664,5199],{"class":147},[127,98666,98667],{"class":129,"line":151},[127,98668,98669],{"class":147},"c\n",[127,98671,98672],{"class":129,"line":167},[127,98673,98674],{"class":147},"np.concatenate((a,b,c))\n",[19,98676,98677],{},"③二维数组拼接",[117,98679,98681],{"className":30918,"code":98680,"language":30920,"meta":122,"style":122},"#二维数组使用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",[124,98682,98683,98688,98712,98737,98742,98747],{"__ignoreMap":122},[127,98684,98685],{"class":129,"line":130},[127,98686,98687],{"class":133},"#二维数组使用concatenate进行拼接\n",[127,98689,98690,98692,98694,98696,98698,98700,98702,98704,98706,98708,98710],{"class":129,"line":137},[127,98691,93835],{"class":147},[127,98693,725],{"class":290},[127,98695,93531],{"class":147},[127,98697,893],{"class":154},[127,98699,1053],{"class":147},[127,98701,1198],{"class":154},[127,98703,93536],{"class":147},[127,98705,749],{"class":154},[127,98707,1053],{"class":147},[127,98709,968],{"class":154},[127,98711,687],{"class":147},[127,98713,98714,98717,98719,98721,98723,98725,98727,98729,98731,98733,98735],{"class":129,"line":151},[127,98715,98716],{"class":147},"bb",[127,98718,725],{"class":290},[127,98720,93531],{"class":147},[127,98722,1012],{"class":154},[127,98724,1053],{"class":147},[127,98726,1316],{"class":154},[127,98728,93536],{"class":147},[127,98730,749],{"class":154},[127,98732,1053],{"class":147},[127,98734,968],{"class":154},[127,98736,687],{"class":147},[127,98738,98739],{"class":129,"line":167},[127,98740,98741],{"class":133},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[127,98743,98744],{"class":129,"line":415},[127,98745,98746],{"class":133},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[127,98748,98749,98752,98754,98756,98758],{"class":129,"line":421},[127,98750,98751],{"class":147},"np.concatenate((aa,bb),",[127,98753,48054],{"class":5758},[127,98755,725],{"class":290},[127,98757,867],{"class":154},[127,98759,687],{"class":147},[19,98761,98762],{},"结果：",[19,98764,98765],{},[23,98766],{"alt":122,"src":98767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[117,98769,98771],{"className":30918,"code":98770,"language":30920,"meta":122,"style":122},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[124,98772,98773,98778],{"__ignoreMap":122},[127,98774,98775],{"class":129,"line":130},[127,98776,98777],{"class":133},"#指定axis为1进行拼接\n",[127,98779,98780,98782,98784,98786,98788],{"class":129,"line":137},[127,98781,98751],{"class":147},[127,98783,48054],{"class":5758},[127,98785,725],{"class":290},[127,98787,893],{"class":154},[127,98789,687],{"class":147},[19,98791,98762],{},[19,98793,98794],{},[23,98795],{"alt":122,"src":98796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98798,98799],{},[30,98800,98801],{},"二维数组总结：0竖着方向，1横着方向",[19,98803,98804],{},"④三维数组拼接",[19,98806,98807],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[117,98809,98811],{"className":30918,"code":98810,"language":30920,"meta":122,"style":122},"#两个三行六列\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",[124,98812,98813,98818,98846,98876,98881,98898,98903,98908,98913,98930,98935,98940,98945,98958],{"__ignoreMap":122},[127,98814,98815],{"class":129,"line":130},[127,98816,98817],{"class":133},"#两个三行六列\n",[127,98819,98820,98822,98824,98826,98828,98830,98832,98834,98836,98838,98840,98842,98844],{"class":129,"line":137},[127,98821,96050],{"class":147},[127,98823,725],{"class":290},[127,98825,93531],{"class":147},[127,98827,893],{"class":154},[127,98829,1053],{"class":147},[127,98831,1000],{"class":154},[127,98833,93536],{"class":147},[127,98835,530],{"class":154},[127,98837,1053],{"class":147},[127,98839,749],{"class":154},[127,98841,1053],{"class":147},[127,98843,1019],{"class":154},[127,98845,687],{"class":147},[127,98847,98848,98851,98853,98855,98857,98859,98862,98864,98866,98868,98870,98872,98874],{"class":129,"line":151},[127,98849,98850],{"class":147},"bbb",[127,98852,725],{"class":290},[127,98854,93531],{"class":147},[127,98856,1012],{"class":154},[127,98858,1053],{"class":147},[127,98860,98861],{"class":154},"137",[127,98863,93536],{"class":147},[127,98865,530],{"class":154},[127,98867,1053],{"class":147},[127,98869,749],{"class":154},[127,98871,1053],{"class":147},[127,98873,1019],{"class":154},[127,98875,687],{"class":147},[127,98877,98878],{"class":129,"line":167},[127,98879,98880],{"class":133},"#axis=0\n",[127,98882,98883,98885,98887,98890,98892,98894,98896],{"class":129,"line":415},[127,98884,1369],{"class":147},[127,98886,725],{"class":290},[127,98888,98889],{"class":147},"np.concatenate((aaa,bbb),",[127,98891,48054],{"class":5758},[127,98893,725],{"class":290},[127,98895,867],{"class":154},[127,98897,687],{"class":147},[127,98899,98900],{"class":129,"line":421},[127,98901,98902],{"class":147},"s.shape\n",[127,98904,98905],{"class":129,"line":1766},[127,98906,98907],{"class":133},"#输出：(4,3,6)\n",[127,98909,98910],{"class":129,"line":1856},[127,98911,98912],{"class":133},"#axis=1\n",[127,98914,98915,98918,98920,98922,98924,98926,98928],{"class":129,"line":1862},[127,98916,98917],{"class":147},"ss",[127,98919,725],{"class":290},[127,98921,98889],{"class":147},[127,98923,48054],{"class":5758},[127,98925,725],{"class":290},[127,98927,893],{"class":154},[127,98929,687],{"class":147},[127,98931,98932],{"class":129,"line":1874},[127,98933,98934],{"class":147},"ss.shape\n",[127,98936,98937],{"class":129,"line":2155},[127,98938,98939],{"class":133},"#输出：(2,6,6)\n",[127,98941,98942],{"class":129,"line":2160},[127,98943,98944],{"class":133},"#axis=2\n",[127,98946,98947,98949,98951,98953,98955],{"class":129,"line":2166},[127,98948,98889],{"class":147},[127,98950,48054],{"class":5758},[127,98952,725],{"class":290},[127,98954,530],{"class":154},[127,98956,98957],{"class":147},").shape\n",[127,98959,98960],{"class":129,"line":2171},[127,98961,98962],{"class":133},"#输出：（2，3，12）\n",[19,98964,98965],{},"⑤四维数组拼接",[117,98967,98969],{"className":30918,"code":98968,"language":30920,"meta":122,"style":122},"#两个三行六列\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",[124,98970,98971,98975,99003,99031,99056,99082,99086,99099,99104,99108,99120,99125,99129,99141,99146,99151,99163],{"__ignoreMap":122},[127,98972,98973],{"class":129,"line":130},[127,98974,98817],{"class":133},[127,98976,98977,98979,98981,98983,98985,98987,98989,98991,98993,98995,98997,98999,99001],{"class":129,"line":137},[127,98978,96050],{"class":147},[127,98980,725],{"class":290},[127,98982,93531],{"class":147},[127,98984,893],{"class":154},[127,98986,1053],{"class":147},[127,98988,1000],{"class":154},[127,98990,93536],{"class":147},[127,98992,530],{"class":154},[127,98994,1053],{"class":147},[127,98996,749],{"class":154},[127,98998,1053],{"class":147},[127,99000,1019],{"class":154},[127,99002,687],{"class":147},[127,99004,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023,99025,99027,99029],{"class":129,"line":151},[127,99006,98850],{"class":147},[127,99008,725],{"class":290},[127,99010,93531],{"class":147},[127,99012,1012],{"class":154},[127,99014,1053],{"class":147},[127,99016,98861],{"class":154},[127,99018,93536],{"class":147},[127,99020,530],{"class":154},[127,99022,1053],{"class":147},[127,99024,749],{"class":154},[127,99026,1053],{"class":147},[127,99028,1019],{"class":154},[127,99030,687],{"class":147},[127,99032,99033,99036,99038,99040,99042,99044,99046,99048,99050,99052,99054],{"class":129,"line":167},[127,99034,99035],{"class":147},"aaaa",[127,99037,725],{"class":290},[127,99039,98199],{"class":147},[127,99041,530],{"class":154},[127,99043,1053],{"class":147},[127,99045,749],{"class":154},[127,99047,1053],{"class":147},[127,99049,749],{"class":154},[127,99051,1053],{"class":147},[127,99053,530],{"class":154},[127,99055,687],{"class":147},[127,99057,99058,99061,99063,99066,99068,99070,99072,99074,99076,99078,99080],{"class":129,"line":415},[127,99059,99060],{"class":147},"bbbb",[127,99062,725],{"class":290},[127,99064,99065],{"class":147},"bbb.reshape(",[127,99067,530],{"class":154},[127,99069,1053],{"class":147},[127,99071,749],{"class":154},[127,99073,1053],{"class":147},[127,99075,749],{"class":154},[127,99077,1053],{"class":147},[127,99079,530],{"class":154},[127,99081,687],{"class":147},[127,99083,99084],{"class":129,"line":421},[127,99085,98880],{"class":133},[127,99087,99088,99091,99093,99095,99097],{"class":129,"line":1766},[127,99089,99090],{"class":147},"np.concatenate((aaaa,bbbb),",[127,99092,48054],{"class":5758},[127,99094,725],{"class":290},[127,99096,867],{"class":154},[127,99098,98957],{"class":147},[127,99100,99101],{"class":129,"line":1856},[127,99102,99103],{"class":133},"#结果：（4，3，3，2）\n",[127,99105,99106],{"class":129,"line":1862},[127,99107,98912],{"class":133},[127,99109,99110,99112,99114,99116,99118],{"class":129,"line":1874},[127,99111,99090],{"class":147},[127,99113,48054],{"class":5758},[127,99115,725],{"class":290},[127,99117,893],{"class":154},[127,99119,98957],{"class":147},[127,99121,99122],{"class":129,"line":2155},[127,99123,99124],{"class":133},"#结果：（2，6，3，2）\n",[127,99126,99127],{"class":129,"line":2160},[127,99128,98944],{"class":133},[127,99130,99131,99133,99135,99137,99139],{"class":129,"line":2166},[127,99132,99090],{"class":147},[127,99134,48054],{"class":5758},[127,99136,725],{"class":290},[127,99138,530],{"class":154},[127,99140,98957],{"class":147},[127,99142,99143],{"class":129,"line":2171},[127,99144,99145],{"class":133},"#结果：（2，3，6，2）\n",[127,99147,99148],{"class":129,"line":2185},[127,99149,99150],{"class":133},"#axis=3\n",[127,99152,99153,99155,99157,99159,99161],{"class":129,"line":2190},[127,99154,99090],{"class":147},[127,99156,48054],{"class":5758},[127,99158,725],{"class":290},[127,99160,749],{"class":154},[127,99162,98957],{"class":147},[127,99164,99165],{"class":129,"line":2196},[127,99166,99167],{"class":133},"#结果：（2，3，3，4）\n",[14,99169,99171],{"id":99170},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99173,99174],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99176,99177],{},"①二维数组",[117,99179,99181],{"className":30918,"code":99180,"language":30920,"meta":122,"style":122},"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",[124,99182,99183,99207,99231,99236,99241],{"__ignoreMap":122},[127,99184,99185,99187,99189,99191,99193,99195,99197,99199,99201,99203,99205],{"class":129,"line":130},[127,99186,93835],{"class":147},[127,99188,725],{"class":290},[127,99190,93531],{"class":147},[127,99192,893],{"class":154},[127,99194,1053],{"class":147},[127,99196,1198],{"class":154},[127,99198,93536],{"class":147},[127,99200,749],{"class":154},[127,99202,1053],{"class":147},[127,99204,968],{"class":154},[127,99206,687],{"class":147},[127,99208,99209,99211,99213,99215,99217,99219,99221,99223,99225,99227,99229],{"class":129,"line":137},[127,99210,98716],{"class":147},[127,99212,725],{"class":290},[127,99214,93531],{"class":147},[127,99216,1012],{"class":154},[127,99218,1053],{"class":147},[127,99220,1316],{"class":154},[127,99222,93536],{"class":147},[127,99224,749],{"class":154},[127,99226,1053],{"class":147},[127,99228,968],{"class":154},[127,99230,687],{"class":147},[127,99232,99233],{"class":129,"line":151},[127,99234,99235],{"class":147},"np.hstack((aa,bb))\n",[127,99237,99238],{"class":129,"line":167},[127,99239,99240],{"class":133},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[127,99242,99243],{"class":129,"line":415},[127,99244,99245],{"class":133},"#np.hstack([aa,bb])\n",[19,99247,98762],{},[19,99249,99250],{},[23,99251],{"alt":122,"src":99252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99254,99255],{},"等效于concatenate()函数中axis=1时的情况",[19,99257,99258],{},"②三维数组",[117,99260,99262],{"className":30918,"code":99261,"language":30920,"meta":122,"style":122},"#两个三行六列\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",[124,99263,99264,99268,99296,99324,99329,99334],{"__ignoreMap":122},[127,99265,99266],{"class":129,"line":130},[127,99267,98817],{"class":133},[127,99269,99270,99272,99274,99276,99278,99280,99282,99284,99286,99288,99290,99292,99294],{"class":129,"line":137},[127,99271,96050],{"class":147},[127,99273,725],{"class":290},[127,99275,93531],{"class":147},[127,99277,893],{"class":154},[127,99279,1053],{"class":147},[127,99281,1000],{"class":154},[127,99283,93536],{"class":147},[127,99285,530],{"class":154},[127,99287,1053],{"class":147},[127,99289,749],{"class":154},[127,99291,1053],{"class":147},[127,99293,1019],{"class":154},[127,99295,687],{"class":147},[127,99297,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318,99320,99322],{"class":129,"line":151},[127,99299,98850],{"class":147},[127,99301,725],{"class":290},[127,99303,93531],{"class":147},[127,99305,1012],{"class":154},[127,99307,1053],{"class":147},[127,99309,98861],{"class":154},[127,99311,93536],{"class":147},[127,99313,530],{"class":154},[127,99315,1053],{"class":147},[127,99317,749],{"class":154},[127,99319,1053],{"class":147},[127,99321,1019],{"class":154},[127,99323,687],{"class":147},[127,99325,99326],{"class":129,"line":167},[127,99327,99328],{"class":133},"#使用hstack\n",[127,99330,99331],{"class":129,"line":415},[127,99332,99333],{"class":147},"np.hstack((aaa,bbb)).shape\n",[127,99335,99336],{"class":129,"line":421},[127,99337,99338],{"class":133},"#输出：（2，6，6）\n",[14,99340,99342],{"id":99341},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99344,99345],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99347,99177],{},[117,99349,99351],{"className":30918,"code":99350,"language":30920,"meta":122,"style":122},"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",[124,99352,99353,99377,99401,99406,99411,99416],{"__ignoreMap":122},[127,99354,99355,99357,99359,99361,99363,99365,99367,99369,99371,99373,99375],{"class":129,"line":130},[127,99356,93835],{"class":147},[127,99358,725],{"class":290},[127,99360,93531],{"class":147},[127,99362,893],{"class":154},[127,99364,1053],{"class":147},[127,99366,1198],{"class":154},[127,99368,93536],{"class":147},[127,99370,749],{"class":154},[127,99372,1053],{"class":147},[127,99374,968],{"class":154},[127,99376,687],{"class":147},[127,99378,99379,99381,99383,99385,99387,99389,99391,99393,99395,99397,99399],{"class":129,"line":137},[127,99380,98716],{"class":147},[127,99382,725],{"class":290},[127,99384,93531],{"class":147},[127,99386,1012],{"class":154},[127,99388,1053],{"class":147},[127,99390,1316],{"class":154},[127,99392,93536],{"class":147},[127,99394,749],{"class":154},[127,99396,1053],{"class":147},[127,99398,968],{"class":154},[127,99400,687],{"class":147},[127,99402,99403],{"class":129,"line":151},[127,99404,99405],{"class":133},"#vstack 垂直方向进行堆叠\n",[127,99407,99408],{"class":129,"line":167},[127,99409,99410],{"class":147},"np.vstack((aa,bb))\n",[127,99412,99413],{"class":129,"line":415},[127,99414,99415],{"class":133},"#与hstack传的参数类似，等价于：\n",[127,99417,99418],{"class":129,"line":421},[127,99419,99420],{"class":147},"np.vstack([aa,bb])\n",[19,99422,98762],{},[19,99424,99425],{},[23,99426],{"alt":122,"src":99427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99429,99258],{},[117,99431,99433],{"className":30918,"code":99432,"language":30920,"meta":122,"style":122},"#两个三行六列\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",[124,99434,99435,99439,99467,99495,99500,99505],{"__ignoreMap":122},[127,99436,99437],{"class":129,"line":130},[127,99438,98817],{"class":133},[127,99440,99441,99443,99445,99447,99449,99451,99453,99455,99457,99459,99461,99463,99465],{"class":129,"line":137},[127,99442,96050],{"class":147},[127,99444,725],{"class":290},[127,99446,93531],{"class":147},[127,99448,893],{"class":154},[127,99450,1053],{"class":147},[127,99452,1000],{"class":154},[127,99454,93536],{"class":147},[127,99456,530],{"class":154},[127,99458,1053],{"class":147},[127,99460,749],{"class":154},[127,99462,1053],{"class":147},[127,99464,1019],{"class":154},[127,99466,687],{"class":147},[127,99468,99469,99471,99473,99475,99477,99479,99481,99483,99485,99487,99489,99491,99493],{"class":129,"line":151},[127,99470,98850],{"class":147},[127,99472,725],{"class":290},[127,99474,93531],{"class":147},[127,99476,1012],{"class":154},[127,99478,1053],{"class":147},[127,99480,98861],{"class":154},[127,99482,93536],{"class":147},[127,99484,530],{"class":154},[127,99486,1053],{"class":147},[127,99488,749],{"class":154},[127,99490,1053],{"class":147},[127,99492,1019],{"class":154},[127,99494,687],{"class":147},[127,99496,99497],{"class":129,"line":167},[127,99498,99499],{"class":133},"#使用vstack\n",[127,99501,99502],{"class":129,"line":415},[127,99503,99504],{"class":147},"np.vstack((aaa,bbb)).shape\n",[127,99506,99507],{"class":129,"line":421},[127,99508,99509],{"class":133},"#输出：（4，3，6）\n",[14,99511,99513],{"id":99512},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99515,99516],{},"该方法是三维数组特有的方法",[19,99518,99519],{},"也就是说",[19,99521,99522],{},"一维数组拼接方法用：concatenate()",[19,99524,99525],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99527,99528],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99530,99531],{},"四维数组及多维数组只能用concatenate进行拼接",[117,99533,99535],{"className":30918,"code":99534,"language":30920,"meta":122,"style":122},"#两个三行六列\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",[124,99536,99537,99541,99569,99597,99602,99607],{"__ignoreMap":122},[127,99538,99539],{"class":129,"line":130},[127,99540,98817],{"class":133},[127,99542,99543,99545,99547,99549,99551,99553,99555,99557,99559,99561,99563,99565,99567],{"class":129,"line":137},[127,99544,96050],{"class":147},[127,99546,725],{"class":290},[127,99548,93531],{"class":147},[127,99550,893],{"class":154},[127,99552,1053],{"class":147},[127,99554,1000],{"class":154},[127,99556,93536],{"class":147},[127,99558,530],{"class":154},[127,99560,1053],{"class":147},[127,99562,749],{"class":154},[127,99564,1053],{"class":147},[127,99566,1019],{"class":154},[127,99568,687],{"class":147},[127,99570,99571,99573,99575,99577,99579,99581,99583,99585,99587,99589,99591,99593,99595],{"class":129,"line":151},[127,99572,98850],{"class":147},[127,99574,725],{"class":290},[127,99576,93531],{"class":147},[127,99578,1012],{"class":154},[127,99580,1053],{"class":147},[127,99582,98861],{"class":154},[127,99584,93536],{"class":147},[127,99586,530],{"class":154},[127,99588,1053],{"class":147},[127,99590,749],{"class":154},[127,99592,1053],{"class":147},[127,99594,1019],{"class":154},[127,99596,687],{"class":147},[127,99598,99599],{"class":129,"line":167},[127,99600,99601],{"class":133},"#使用dstack\n",[127,99603,99604],{"class":129,"line":415},[127,99605,99606],{"class":147},"np.dstack((aaa,bbb)).shape\n",[127,99608,99609],{"class":129,"line":421},[127,99610,99611],{"class":133},"#结果：（2，3，12）\n",[575,99613,99614],{},"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":122,"searchDepth":137,"depth":137,"links":99616},[99617,99618,99619,99620],{"id":98556,"depth":137,"text":98557},{"id":99170,"depth":137,"text":99171},{"id":99341,"depth":137,"text":99342},{"id":99512,"depth":137,"text":99513},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98548,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99627,"title":99628,"body":99629,"description":603,"extension":604,"meta":99904,"navigation":606,"path":99905,"seo":99906,"stem":99907,"__hash__":99908},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99630,"toc":99902},[99631,99634,99637,99731,99734,99737,99740,99743,99746,99749,99752,99755,99899],[10,99632,99628],{"id":99633},"_7数组转置",[19,99635,99636],{},"使用transpose()函数",[117,99638,99640],{"className":30918,"code":99639,"language":30920,"meta":122,"style":122},"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",[124,99641,99642,99652,99676,99681,99686,99691,99696,99704,99708,99712,99717,99722,99727],{"__ignoreMap":122},[127,99643,99644,99646,99648,99650],{"class":129,"line":130},[127,99645,30932],{"class":290},[127,99647,31920],{"class":147},[127,99649,31923],{"class":290},[127,99651,31926],{"class":147},[127,99653,99654,99656,99658,99660,99662,99664,99666,99668,99670,99672,99674],{"class":129,"line":137},[127,99655,457],{"class":147},[127,99657,725],{"class":290},[127,99659,32257],{"class":147},[127,99661,893],{"class":154},[127,99663,1053],{"class":147},[127,99665,1198],{"class":154},[127,99667,93536],{"class":147},[127,99669,968],{"class":154},[127,99671,1053],{"class":147},[127,99673,749],{"class":154},[127,99675,687],{"class":147},[127,99677,99678],{"class":129,"line":151},[127,99679,99680],{"class":133},"#二维数组转置\n",[127,99682,99683],{"class":129,"line":167},[127,99684,99685],{"class":133},"#调用transpose()函数\n",[127,99687,99688],{"class":129,"line":415},[127,99689,99690],{"class":147},"a.transpose()\n",[127,99692,99693],{"class":129,"line":421},[127,99694,99695],{"class":133},"#对于二维数组也可以采用.T来实现\n",[127,99697,99698,99701],{"class":129,"line":1766},[127,99699,99700],{"class":147},"a.T",[127,99702,99703],{"class":133},"#与上述代码一样\n",[127,99705,99706],{"class":129,"line":1856},[127,99707,94093],{"class":133},[127,99709,99710],{"class":129,"line":1862},[127,99711,94457],{"class":781},[127,99713,99714],{"class":129,"line":1874},[127,99715,99716],{"class":781},"array([[ 1,  4,  7, 10],\n",[127,99718,99719],{"class":129,"line":2155},[127,99720,99721],{"class":781},"       [ 2,  5,  8, 11],\n",[127,99723,99724],{"class":129,"line":2160},[127,99725,99726],{"class":781},"       [ 3,  6,  9, 12]])\n",[127,99728,99729],{"class":129,"line":2166},[127,99730,94457],{"class":781},[19,99732,99733],{},"也可以使用np.transpose()的形式",[19,99735,99736],{},"#多维数组进行转置 np.transpose()",[19,99738,99739],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99741,99742],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99744,99745],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99747,99748],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99750,99751],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99753,99754],{},"四维及以上的数组也是一样的道理",[117,99756,99758],{"className":30918,"code":99757,"language":30920,"meta":122,"style":122},"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",[124,99759,99760,99788,99793,99798,99803,99821,99826,99858,99863,99868,99873,99894],{"__ignoreMap":122},[127,99761,99762,99764,99766,99768,99770,99772,99774,99776,99778,99780,99782,99784,99786],{"class":129,"line":130},[127,99763,1494],{"class":147},[127,99765,725],{"class":290},[127,99767,93531],{"class":147},[127,99769,893],{"class":154},[127,99771,1053],{"class":147},[127,99773,1000],{"class":154},[127,99775,93536],{"class":147},[127,99777,749],{"class":154},[127,99779,1053],{"class":147},[127,99781,1019],{"class":154},[127,99783,1053],{"class":147},[127,99785,530],{"class":154},[127,99787,687],{"class":147},[127,99789,99790],{"class":129,"line":137},[127,99791,99792],{"class":147},"x.shape\n",[127,99794,99795],{"class":129,"line":151},[127,99796,99797],{"class":133},"#结果：（3,6,2）\n",[127,99799,99800],{"class":129,"line":167},[127,99801,99802],{"class":133},"#使用np.transpose()进行转置 变为(2,6,3)\n",[127,99804,99805,99808,99810,99812,99814,99816,99818],{"class":129,"line":415},[127,99806,99807],{"class":147},"np.transpose(x,(",[127,99809,530],{"class":154},[127,99811,1053],{"class":147},[127,99813,893],{"class":154},[127,99815,1053],{"class":147},[127,99817,867],{"class":154},[127,99819,99820],{"class":147},")).shape\n",[127,99822,99823],{"class":129,"line":421},[127,99824,99825],{"class":133},"#结果：(2,6,3)\n",[127,99827,99828,99830,99832,99834,99836,99838,99840,99842,99844,99846,99848,99850,99852,99854,99856],{"class":129,"line":1766},[127,99829,99035],{"class":147},[127,99831,725],{"class":290},[127,99833,93531],{"class":147},[127,99835,893],{"class":154},[127,99837,1053],{"class":147},[127,99839,1000],{"class":154},[127,99841,93536],{"class":147},[127,99843,749],{"class":154},[127,99845,1053],{"class":147},[127,99847,530],{"class":154},[127,99849,1053],{"class":147},[127,99851,893],{"class":154},[127,99853,1053],{"class":147},[127,99855,1019],{"class":154},[127,99857,687],{"class":147},[127,99859,99860],{"class":129,"line":1856},[127,99861,99862],{"class":147},"aaaa.shape\n",[127,99864,99865],{"class":129,"line":1862},[127,99866,99867],{"class":133},"#结果：（3，2，1，6）\n",[127,99869,99870],{"class":129,"line":1874},[127,99871,99872],{"class":133},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[127,99874,99875,99878,99880,99882,99884,99886,99888,99890,99892],{"class":129,"line":2155},[127,99876,99877],{"class":147},"np.transpose(aaaa,(",[127,99879,893],{"class":154},[127,99881,1053],{"class":147},[127,99883,530],{"class":154},[127,99885,1053],{"class":147},[127,99887,867],{"class":154},[127,99889,1053],{"class":147},[127,99891,749],{"class":154},[127,99893,99820],{"class":147},[127,99895,99896],{"class":129,"line":2160},[127,99897,99898],{"class":133},"#结果：(2,1,3,6)\n",[575,99900,99901],{},"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":122,"searchDepth":137,"depth":137,"links":99903},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99628,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99910,"title":99911,"body":99912,"description":603,"extension":604,"meta":100646,"navigation":606,"path":100647,"seo":100648,"stem":100649,"__hash__":100650},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99913,"toc":100644},[99914,99917,99920,99923,99926,99929,99932,99935,99938,100047,100050,100053,100641],[10,99915,99911],{"id":99916},"_8数组分割",[19,99918,99919],{},"split分割",[19,99921,99922],{},"numpy.split(ary,indics_or_sections,axis)",[19,99924,99925],{},"解释：",[19,99927,99928],{},"ary:被分割的数组",[19,99930,99931],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99933,99934],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99936,99937],{},"①一维数组的分割",[117,99939,99941],{"className":30918,"code":99940,"language":30920,"meta":122,"style":122},"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",[124,99942,99943,99959,99964,99973,99977,99982,99990,99994,99999,100004,100017,100021,100026,100038,100042],{"__ignoreMap":122},[127,99944,99945,99947,99949,99951,99953,99955,99957],{"class":129,"line":130},[127,99946,457],{"class":147},[127,99948,725],{"class":290},[127,99950,93531],{"class":147},[127,99952,893],{"class":154},[127,99954,1053],{"class":147},[127,99956,1095],{"class":154},[127,99958,687],{"class":147},[127,99960,99961],{"class":129,"line":137},[127,99962,99963],{"class":133},"#如果传入整数，必须能够平分，否则会报错\n",[127,99965,99966,99969,99971],{"class":129,"line":151},[127,99967,99968],{"class":147},"np.split(a,",[127,99970,530],{"class":154},[127,99972,687],{"class":147},[127,99974,99975],{"class":129,"line":167},[127,99976,94093],{"class":133},[127,99978,99979],{"class":129,"line":415},[127,99980,99981],{"class":133},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[127,99983,99984,99986,99988],{"class":129,"line":421},[127,99985,99968],{"class":147},[127,99987,968],{"class":154},[127,99989,687],{"class":147},[127,99991,99992],{"class":129,"line":1766},[127,99993,94093],{"class":133},[127,99995,99996],{"class":129,"line":1856},[127,99997,99998],{"class":133},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[127,100000,100001],{"class":129,"line":1862},[127,100002,100003],{"class":133},"#传入数组\n",[127,100005,100006,100009,100011,100013,100015],{"class":129,"line":1874},[127,100007,100008],{"class":147},"np.split(a,[",[127,100010,749],{"class":154},[127,100012,1053],{"class":147},[127,100014,994],{"class":154},[127,100016,5199],{"class":147},[127,100018,100019],{"class":129,"line":2155},[127,100020,94093],{"class":133},[127,100022,100023],{"class":129,"line":2160},[127,100024,100025],{"class":133},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[127,100027,100028,100030,100032,100034,100036],{"class":129,"line":2166},[127,100029,100008],{"class":147},[127,100031,994],{"class":154},[127,100033,1053],{"class":147},[127,100035,1044],{"class":154},[127,100037,5199],{"class":147},[127,100039,100040],{"class":129,"line":2171},[127,100041,94093],{"class":133},[127,100043,100044],{"class":129,"line":2185},[127,100045,100046],{"class":133},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100048,100049],{},"②二维数组的分割",[19,100051,100052],{},"使用split()",[117,100054,100056],{"className":30918,"code":100055,"language":30920,"meta":122,"style":122},"#二维数组分割\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",[124,100057,100058,100063,100087,100092,100101,100105,100109,100114,100119,100124,100129,100134,100139,100144,100148,100161,100165,100169,100173,100177,100181,100186,100191,100196,100200,100205,100221,100225,100229,100234,100239,100244,100249,100254,100259,100264,100269,100274,100279,100284,100289,100294,100299,100304,100309,100314,100319,100323,100327,100347,100351,100355,100360,100365,100370,100375,100380,100385,100390,100395,100400,100405,100410,100415,100420,100425,100430,100435,100440,100445,100449,100454,100463,100467,100471,100475,100479,100483,100487,100491,100495,100499,100508,100512,100516,100520,100524,100528,100532,100536,100540,100544,100548,100552,100556,100560,100564,100568,100572,100576,100580,100584,100588,100592,100605,100609,100613,100617,100621,100625,100629,100633,100637],{"__ignoreMap":122},[127,100059,100060],{"class":129,"line":130},[127,100061,100062],{"class":133},"#二维数组分割\n",[127,100064,100065,100067,100069,100071,100073,100075,100077,100079,100081,100083,100085],{"class":129,"line":137},[127,100066,93835],{"class":147},[127,100068,725],{"class":290},[127,100070,93531],{"class":147},[127,100072,893],{"class":154},[127,100074,1053],{"class":147},[127,100076,1000],{"class":154},[127,100078,93536],{"class":147},[127,100080,1019],{"class":154},[127,100082,1053],{"class":147},[127,100084,1019],{"class":154},[127,100086,687],{"class":147},[127,100088,100089],{"class":129,"line":151},[127,100090,100091],{"class":133},"#默认axis=0  传入整数平均分,按行来的\n",[127,100093,100094,100097,100099],{"class":129,"line":167},[127,100095,100096],{"class":147},"np.split(aa,",[127,100098,749],{"class":154},[127,100100,687],{"class":147},[127,100102,100103],{"class":129,"line":415},[127,100104,96293],{"class":133},[127,100106,100107],{"class":129,"line":421},[127,100108,94457],{"class":781},[127,100110,100111],{"class":129,"line":1766},[127,100112,100113],{"class":781},"[array([[ 1,  2,  3,  4,  5,  6],\n",[127,100115,100116],{"class":129,"line":1856},[127,100117,100118],{"class":781},"        [ 7,  8,  9, 10, 11, 12]]),\n",[127,100120,100121],{"class":129,"line":1862},[127,100122,100123],{"class":781}," array([[13, 14, 15, 16, 17, 18],\n",[127,100125,100126],{"class":129,"line":1874},[127,100127,100128],{"class":781},"        [19, 20, 21, 22, 23, 24]]),\n",[127,100130,100131],{"class":129,"line":2155},[127,100132,100133],{"class":781}," array([[25, 26, 27, 28, 29, 30],\n",[127,100135,100136],{"class":129,"line":2160},[127,100137,100138],{"class":781},"        [31, 32, 33, 34, 35, 36]])]\n",[127,100140,100141],{"class":129,"line":2166},[127,100142,100143],{"class":781}," '''\n",[127,100145,100146],{"class":129,"line":2171},[127,100147,100003],{"class":133},[127,100149,100150,100153,100155,100157,100159],{"class":129,"line":2185},[127,100151,100152],{"class":147},"np.split(aa,[",[127,100154,530],{"class":154},[127,100156,1053],{"class":147},[127,100158,994],{"class":154},[127,100160,5199],{"class":147},[127,100162,100163],{"class":129,"line":2190},[127,100164,96293],{"class":133},[127,100166,100167],{"class":129,"line":2196},[127,100168,94457],{"class":781},[127,100170,100171],{"class":129,"line":2217},[127,100172,100113],{"class":781},[127,100174,100175],{"class":129,"line":2222},[127,100176,100118],{"class":781},[127,100178,100179],{"class":129,"line":2236},[127,100180,100123],{"class":781},[127,100182,100183],{"class":129,"line":2241},[127,100184,100185],{"class":781},"        [19, 20, 21, 22, 23, 24],\n",[127,100187,100188],{"class":129,"line":2270},[127,100189,100190],{"class":781},"        [25, 26, 27, 28, 29, 30]]),\n",[127,100192,100193],{"class":129,"line":2275},[127,100194,100195],{"class":781}," array([[31, 32, 33, 34, 35, 36]])]\n",[127,100197,100198],{"class":129,"line":2292},[127,100199,94457],{"class":781},[127,100201,100202],{"class":129,"line":2297},[127,100203,100204],{"class":133},"#axis=1 按照列来分\n",[127,100206,100207,100209,100211,100213,100215,100217,100219],{"class":129,"line":2302},[127,100208,100096],{"class":147},[127,100210,749],{"class":154},[127,100212,1053],{"class":147},[127,100214,48054],{"class":5758},[127,100216,725],{"class":290},[127,100218,893],{"class":154},[127,100220,687],{"class":147},[127,100222,100223],{"class":129,"line":2307},[127,100224,96293],{"class":133},[127,100226,100227],{"class":129,"line":2321},[127,100228,94457],{"class":781},[127,100230,100231],{"class":129,"line":2326},[127,100232,100233],{"class":781},"[array([[ 1,  2],\n",[127,100235,100236],{"class":129,"line":3119},[127,100237,100238],{"class":781},"        [ 7,  8],\n",[127,100240,100241],{"class":129,"line":3133},[127,100242,100243],{"class":781},"        [13, 14],\n",[127,100245,100246],{"class":129,"line":3141},[127,100247,100248],{"class":781},"        [19, 20],\n",[127,100250,100251],{"class":129,"line":3146},[127,100252,100253],{"class":781},"        [25, 26],\n",[127,100255,100256],{"class":129,"line":3152},[127,100257,100258],{"class":781},"        [31, 32]]),\n",[127,100260,100261],{"class":129,"line":3158},[127,100262,100263],{"class":781}," array([[ 3,  4],\n",[127,100265,100266],{"class":129,"line":3163},[127,100267,100268],{"class":781},"        [ 9, 10],\n",[127,100270,100271],{"class":129,"line":8490},[127,100272,100273],{"class":781},"        [15, 16],\n",[127,100275,100276],{"class":129,"line":8514},[127,100277,100278],{"class":781},"        [21, 22],\n",[127,100280,100281],{"class":129,"line":8519},[127,100282,100283],{"class":781},"        [27, 28],\n",[127,100285,100286],{"class":129,"line":8525},[127,100287,100288],{"class":781},"        [33, 34]]),\n",[127,100290,100291],{"class":129,"line":8552},[127,100292,100293],{"class":781}," array([[ 5,  6],\n",[127,100295,100296],{"class":129,"line":8557},[127,100297,100298],{"class":781},"        [11, 12],\n",[127,100300,100301],{"class":129,"line":8563},[127,100302,100303],{"class":781},"        [17, 18],\n",[127,100305,100306],{"class":129,"line":8575},[127,100307,100308],{"class":781},"        [23, 24],\n",[127,100310,100311],{"class":129,"line":8587},[127,100312,100313],{"class":781},"        [29, 30],\n",[127,100315,100316],{"class":129,"line":8599},[127,100317,100318],{"class":781},"        [35, 36]])]\n",[127,100320,100321],{"class":129,"line":10258},[127,100322,100143],{"class":781},[127,100324,100325],{"class":129,"line":10283},[127,100326,100003],{"class":133},[127,100328,100329,100331,100333,100335,100337,100339,100341,100343,100345],{"class":129,"line":10306},[127,100330,100152],{"class":147},[127,100332,893],{"class":154},[127,100334,1053],{"class":147},[127,100336,530],{"class":154},[127,100338,42149],{"class":147},[127,100340,48054],{"class":5758},[127,100342,725],{"class":290},[127,100344,893],{"class":154},[127,100346,687],{"class":147},[127,100348,100349],{"class":129,"line":10330},[127,100350,94093],{"class":133},[127,100352,100353],{"class":129,"line":10335},[127,100354,94457],{"class":781},[127,100356,100357],{"class":129,"line":10340},[127,100358,100359],{"class":781},"[array([[ 1],\n",[127,100361,100362],{"class":129,"line":10345},[127,100363,100364],{"class":781},"        [ 7],\n",[127,100366,100367],{"class":129,"line":10354},[127,100368,100369],{"class":781},"        [13],\n",[127,100371,100372],{"class":129,"line":10359},[127,100373,100374],{"class":781},"        [19],\n",[127,100376,100377],{"class":129,"line":10365},[127,100378,100379],{"class":781},"        [25],\n",[127,100381,100382],{"class":129,"line":10386},[127,100383,100384],{"class":781},"        [31]]),\n",[127,100386,100387],{"class":129,"line":10392},[127,100388,100389],{"class":781}," array([[ 2],\n",[127,100391,100392],{"class":129,"line":10406},[127,100393,100394],{"class":781},"        [ 8],\n",[127,100396,100397],{"class":129,"line":10412},[127,100398,100399],{"class":781},"        [14],\n",[127,100401,100402],{"class":129,"line":10439},[127,100403,100404],{"class":781},"        [20],\n",[127,100406,100407],{"class":129,"line":10448},[127,100408,100409],{"class":781},"        [26],\n",[127,100411,100412],{"class":129,"line":10454},[127,100413,100414],{"class":781},"        [32]]),\n",[127,100416,100417],{"class":129,"line":10462},[127,100418,100419],{"class":781}," array([[ 3,  4,  5,  6],\n",[127,100421,100422],{"class":129,"line":10467},[127,100423,100424],{"class":781},"        [ 9, 10, 11, 12],\n",[127,100426,100427],{"class":129,"line":17145},[127,100428,100429],{"class":781},"        [15, 16, 17, 18],\n",[127,100431,100432],{"class":129,"line":17151},[127,100433,100434],{"class":781},"        [21, 22, 23, 24],\n",[127,100436,100437],{"class":129,"line":17174},[127,100438,100439],{"class":781},"        [27, 28, 29, 30],\n",[127,100441,100442],{"class":129,"line":17180},[127,100443,100444],{"class":781},"        [33, 34, 35, 36]])]\n",[127,100446,100447],{"class":129,"line":17203},[127,100448,94457],{"class":781},[127,100450,100451],{"class":129,"line":17217},[127,100452,100453],{"class":133},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[127,100455,100456,100459,100461],{"class":129,"line":17237},[127,100457,100458],{"class":147},"np.vsplit(aa,",[127,100460,749],{"class":154},[127,100462,687],{"class":147},[127,100464,100465],{"class":129,"line":17243},[127,100466,94093],{"class":133},[127,100468,100469],{"class":129,"line":17254},[127,100470,94457],{"class":781},[127,100472,100473],{"class":129,"line":17277},[127,100474,100113],{"class":781},[127,100476,100477],{"class":129,"line":17299},[127,100478,100118],{"class":781},[127,100480,100481],{"class":129,"line":17304},[127,100482,100123],{"class":781},[127,100484,100485],{"class":129,"line":17310},[127,100486,100128],{"class":781},[127,100488,100489],{"class":129,"line":17324},[127,100490,100133],{"class":781},[127,100492,100493],{"class":129,"line":17337},[127,100494,100138],{"class":781},[127,100496,100497],{"class":129,"line":17342},[127,100498,94457],{"class":781},[127,100500,100501,100504,100506],{"class":129,"line":17356},[127,100502,100503],{"class":147},"np.hsplit(aa,",[127,100505,749],{"class":154},[127,100507,687],{"class":147},[127,100509,100510],{"class":129,"line":17361},[127,100511,94093],{"class":133},[127,100513,100514],{"class":129,"line":17367},[127,100515,94457],{"class":781},[127,100517,100518],{"class":129,"line":17372},[127,100519,100233],{"class":781},[127,100521,100522],{"class":129,"line":17386},[127,100523,100238],{"class":781},[127,100525,100526],{"class":129,"line":17391},[127,100527,100243],{"class":781},[127,100529,100530],{"class":129,"line":17396},[127,100531,100248],{"class":781},[127,100533,100534],{"class":129,"line":17410},[127,100535,100253],{"class":781},[127,100537,100538],{"class":129,"line":17422},[127,100539,100258],{"class":781},[127,100541,100542],{"class":129,"line":17427},[127,100543,100263],{"class":781},[127,100545,100546],{"class":129,"line":17440},[127,100547,100268],{"class":781},[127,100549,100550],{"class":129,"line":17445},[127,100551,100273],{"class":781},[127,100553,100554],{"class":129,"line":17450},[127,100555,100278],{"class":781},[127,100557,100558],{"class":129,"line":17455},[127,100559,100283],{"class":781},[127,100561,100562],{"class":129,"line":17468},[127,100563,100288],{"class":781},[127,100565,100566],{"class":129,"line":17473},[127,100567,100293],{"class":781},[127,100569,100570],{"class":129,"line":33173},[127,100571,100298],{"class":781},[127,100573,100574],{"class":129,"line":33179},[127,100575,100303],{"class":781},[127,100577,100578],{"class":129,"line":33185},[127,100579,100308],{"class":781},[127,100581,100582],{"class":129,"line":33191},[127,100583,100313],{"class":781},[127,100585,100586],{"class":129,"line":33197},[127,100587,100318],{"class":781},[127,100589,100590],{"class":129,"line":33208},[127,100591,94457],{"class":781},[127,100593,100594,100597,100599,100601,100603],{"class":129,"line":33214},[127,100595,100596],{"class":147},"np.vsplit(aa,[",[127,100598,530],{"class":154},[127,100600,1053],{"class":147},[127,100602,994],{"class":154},[127,100604,5199],{"class":147},[127,100606,100607],{"class":129,"line":33234},[127,100608,94093],{"class":133},[127,100610,100611],{"class":129,"line":33240},[127,100612,94457],{"class":781},[127,100614,100615],{"class":129,"line":33251},[127,100616,100113],{"class":781},[127,100618,100619],{"class":129,"line":33257},[127,100620,100118],{"class":781},[127,100622,100623],{"class":129,"line":33263},[127,100624,100123],{"class":781},[127,100626,100627],{"class":129,"line":33269},[127,100628,100185],{"class":781},[127,100630,100631],{"class":129,"line":33275},[127,100632,100190],{"class":781},[127,100634,100635],{"class":129,"line":33281},[127,100636,100195],{"class":781},[127,100638,100639],{"class":129,"line":33287},[127,100640,100143],{"class":781},[575,100642,100643],{},"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":122,"searchDepth":137,"depth":137,"links":100645},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99911,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100652,"title":100653,"body":100654,"description":603,"extension":604,"meta":101148,"navigation":606,"path":101149,"seo":101150,"stem":101151,"__hash__":101152},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100655,"toc":101139},[100656,100659,100662,100687,100691,100750,100802,100806,100808,100844,100898,100900,100938,101009,101013,101018,101022,101025,101058,101061,101065,101068,101071,101074,101077,101082,101086,101089,101092,101095,101098,101103,101107,101112,101115,101136],[10,100657,100653],{"id":100658},"_9数学函数",[19,100660,100661],{},"补充回顾：python的列表推导式",[117,100663,100665],{"className":30918,"code":100664,"language":30920,"meta":122,"style":122},"[1\u002Fi for i in a]\n",[124,100666,100667],{"__ignoreMap":122},[127,100668,100669,100671,100673,100675,100678,100680,100682,100684],{"class":129,"line":130},[127,100670,1564],{"class":147},[127,100672,893],{"class":154},[127,100674,1259],{"class":290},[127,100676,100677],{"class":147},"i ",[127,100679,3567],{"class":290},[127,100681,9980],{"class":147},[127,100683,26584],{"class":290},[127,100685,100686],{"class":147}," a]\n",[14,100688,100690],{"id":100689},"_91-求倒数","9.1 求倒数",[117,100692,100694],{"className":30918,"code":100693,"language":30920,"meta":122,"style":122},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[124,100695,100696,100701,100729,100741],{"__ignoreMap":122},[127,100697,100698],{"class":129,"line":130},[127,100699,100700],{"class":133},"#数组求倒数\n",[127,100702,100703,100705,100707,100709,100711,100713,100715,100717,100719,100721,100723,100725,100727],{"class":129,"line":137},[127,100704,457],{"class":147},[127,100706,725],{"class":290},[127,100708,1564],{"class":147},[127,100710,893],{"class":154},[127,100712,1053],{"class":147},[127,100714,530],{"class":154},[127,100716,1053],{"class":147},[127,100718,749],{"class":154},[127,100720,1053],{"class":147},[127,100722,968],{"class":154},[127,100724,1053],{"class":147},[127,100726,994],{"class":154},[127,100728,33786],{"class":147},[127,100730,100731,100733,100735,100738],{"class":129,"line":151},[127,100732,938],{"class":147},[127,100734,725],{"class":290},[127,100736,100737],{"class":147},"np.array(a)",[127,100739,100740],{"class":133},"#将列表转换为数组\n",[127,100742,100743,100745,100747],{"class":129,"line":167},[127,100744,893],{"class":154},[127,100746,1259],{"class":290},[127,100748,100749],{"class":147},"b\n",[117,100751,100753],{"className":30918,"code":100752,"language":30920,"meta":122,"style":122},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[124,100754,100755,100783,100792,100797],{"__ignoreMap":122},[127,100756,100757,100759,100761,100763,100765,100767,100769,100771,100773,100775,100777,100779,100781],{"class":129,"line":130},[127,100758,457],{"class":147},[127,100760,725],{"class":290},[127,100762,1564],{"class":147},[127,100764,893],{"class":154},[127,100766,1053],{"class":147},[127,100768,530],{"class":154},[127,100770,1053],{"class":147},[127,100772,749],{"class":154},[127,100774,1053],{"class":147},[127,100776,968],{"class":154},[127,100778,1053],{"class":147},[127,100780,994],{"class":154},[127,100782,33786],{"class":147},[127,100784,100785,100787,100789],{"class":129,"line":137},[127,100786,938],{"class":147},[127,100788,725],{"class":290},[127,100790,100791],{"class":147},"np.array(a)\n",[127,100793,100794],{"class":129,"line":151},[127,100795,100796],{"class":133},"#调用numpy中的函数reciprocal()\n",[127,100798,100799],{"class":129,"line":167},[127,100800,100801],{"class":147},"np.reciprocal(b)\n",[14,100803,100805],{"id":100804},"_92-求平方","9.2 求平方",[19,100807,95059],{},[117,100809,100811],{"className":30918,"code":100810,"language":30920,"meta":122,"style":122},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[124,100812,100813,100818,100823,100839],{"__ignoreMap":122},[127,100814,100815],{"class":129,"line":130},[127,100816,100817],{"class":133},"#square()，求平方\n",[127,100819,100820],{"class":129,"line":137},[127,100821,100822],{"class":133},"#一维数组\n",[127,100824,100825,100827,100829,100831,100833,100835,100837],{"class":129,"line":151},[127,100826,457],{"class":147},[127,100828,725],{"class":290},[127,100830,93531],{"class":147},[127,100832,893],{"class":154},[127,100834,1053],{"class":147},[127,100836,1121],{"class":154},[127,100838,687],{"class":147},[127,100840,100841],{"class":129,"line":167},[127,100842,100843],{"class":147},"np.square(a)\n",[117,100845,100847],{"className":30918,"code":100846,"language":30920,"meta":122,"style":122},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[124,100848,100849,100854,100859,100880],{"__ignoreMap":122},[127,100850,100851],{"class":129,"line":130},[127,100852,100853],{"class":133},"#或者通过循环遍历的形式来计算\n",[127,100855,100856],{"class":129,"line":137},[127,100857,100858],{"class":133},"#这是一个列表\n",[127,100860,100861,100864,100866,100868,100870,100872,100874,100877],{"class":129,"line":151},[127,100862,100863],{"class":147},"[i",[127,100865,1130],{"class":290},[127,100867,100677],{"class":147},[127,100869,3567],{"class":290},[127,100871,9980],{"class":147},[127,100873,26584],{"class":290},[127,100875,100876],{"class":147}," a]",[127,100878,100879],{"class":133},"#这个求完之后在数列当中\n",[127,100881,100882,100885,100887,100889,100891,100893,100895],{"class":129,"line":167},[127,100883,100884],{"class":147},"np.array([i",[127,100886,1130],{"class":290},[127,100888,100677],{"class":147},[127,100890,3567],{"class":290},[127,100892,9980],{"class":147},[127,100894,26584],{"class":290},[127,100896,100897],{"class":147}," a])\n",[19,100899,93820],{},[117,100901,100903],{"className":30918,"code":100902,"language":30920,"meta":122,"style":122},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[124,100904,100905,100909,100933],{"__ignoreMap":122},[127,100906,100907],{"class":129,"line":130},[127,100908,93830],{"class":133},[127,100910,100911,100913,100915,100917,100919,100921,100923,100925,100927,100929,100931],{"class":129,"line":137},[127,100912,93835],{"class":147},[127,100914,725],{"class":290},[127,100916,93531],{"class":147},[127,100918,893],{"class":154},[127,100920,1053],{"class":147},[127,100922,1198],{"class":154},[127,100924,93536],{"class":147},[127,100926,968],{"class":154},[127,100928,1053],{"class":147},[127,100930,749],{"class":154},[127,100932,687],{"class":147},[127,100934,100935],{"class":129,"line":151},[127,100936,100937],{"class":147},"np.square(aa)\n",[117,100939,100941],{"className":30918,"code":100940,"language":30920,"meta":122,"style":122},"#传统的方式\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",[124,100942,100943,100948,100957,100973,100989,101004],{"__ignoreMap":122},[127,100944,100945],{"class":129,"line":130},[127,100946,100947],{"class":133},"#传统的方式\n",[127,100949,100950,100952,100954],{"class":129,"line":137},[127,100951,98716],{"class":147},[127,100953,725],{"class":290},[127,100955,100956],{"class":147},"np.empty_like(aa)\n",[127,100958,100959,100961,100963,100965,100967,100969,100971],{"class":129,"line":151},[127,100960,3567],{"class":290},[127,100962,9980],{"class":147},[127,100964,26584],{"class":290},[127,100966,32983],{"class":154},[127,100968,681],{"class":147},[127,100970,968],{"class":154},[127,100972,31326],{"class":147},[127,100974,100975,100977,100979,100981,100983,100985,100987],{"class":129,"line":167},[127,100976,3743],{"class":290},[127,100978,10042],{"class":147},[127,100980,26584],{"class":290},[127,100982,32983],{"class":154},[127,100984,681],{"class":147},[127,100986,749],{"class":154},[127,100988,31326],{"class":147},[127,100990,100991,100994,100996,100999,101001],{"class":129,"line":415},[127,100992,100993],{"class":147},"        bb[i,j]",[127,100995,725],{"class":290},[127,100997,100998],{"class":147},"aa[i,j]",[127,101000,1130],{"class":290},[127,101002,101003],{"class":147},"aa[i,j]\n",[127,101005,101006],{"class":129,"line":421},[127,101007,101008],{"class":147},"bb\n",[14,101010,101012],{"id":101011},"_93-求各元素的符号","9.3 求各元素的符号",[19,101014,101015],{},[23,101016],{"alt":122,"src":101017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101019,101021],{"id":101020},"_94-modf函数","9.4 modf函数",[19,101023,101024],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[117,101026,101028],{"className":30918,"code":101027,"language":30920,"meta":122,"style":122},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[124,101029,101030,101053],{"__ignoreMap":122},[127,101031,101032,101034,101036,101038,101040,101042,101044,101046,101048,101051],{"class":129,"line":130},[127,101033,457],{"class":147},[127,101035,725],{"class":290},[127,101037,93531],{"class":147},[127,101039,1207],{"class":290},[127,101041,1121],{"class":154},[127,101043,1053],{"class":147},[127,101045,1121],{"class":154},[127,101047,1053],{"class":147},[127,101049,101050],{"class":154},"0.3",[127,101052,687],{"class":147},[127,101054,101055],{"class":129,"line":137},[127,101056,101057],{"class":147},"np.modf(a)\n",[19,101059,101060],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101062,101064],{"id":101063},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101066,101067],{},"np.cell()",[19,101069,101070],{},"np.floor()",[19,101072,101073],{},"np.rint()",[19,101075,101076],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101078,101079],{},[23,101080],{"alt":122,"src":101081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101083,101085],{"id":101084},"_96-around函数","9.6 around()函数",[19,101087,101088],{},"around()函数也可以实现对数的小数位数进行操作",[19,101090,101091],{},"其中的参数：",[19,101093,101094],{},"1.要传的数组",[19,101096,101097],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101099,101100],{},[23,101101],{"alt":122,"src":101102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101104,101106],{"id":101105},"_97-三角函数","9.7 三角函数",[19,101108,101109],{},[23,101110],{"alt":122,"src":101111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101113,101114],{},"引入图像模块非常重要",[117,101116,101118],{"className":30918,"code":101117,"language":30920,"meta":122,"style":122},"from matplotlib import pyplot as plt\n",[124,101119,101120],{"__ignoreMap":122},[127,101121,101122,101124,101127,101129,101132,101134],{"class":129,"line":130},[127,101123,31277],{"class":290},[127,101125,101126],{"class":147}," matplotlib ",[127,101128,30932],{"class":290},[127,101130,101131],{"class":147}," pyplot ",[127,101133,31923],{"class":290},[127,101135,31977],{"class":147},[575,101137,101138],{},"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":122,"searchDepth":137,"depth":137,"links":101140},[101141,101142,101143,101144,101145,101146,101147],{"id":100689,"depth":137,"text":100690},{"id":100804,"depth":137,"text":100805},{"id":101011,"depth":137,"text":101012},{"id":101020,"depth":137,"text":101021},{"id":101063,"depth":137,"text":101064},{"id":101084,"depth":137,"text":101085},{"id":101105,"depth":137,"text":101106},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100653,"description":603},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101154,"title":101155,"body":101156,"description":603,"extension":604,"meta":101160,"navigation":606,"path":101161,"seo":101162,"stem":101163,"__hash__":101164},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101157,"toc":101158},[],{"title":122,"searchDepth":137,"depth":137,"links":101159},[],{"category":50960},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101155,"description":603},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101166,"title":101167,"body":101168,"description":122,"extension":604,"meta":103176,"navigation":606,"path":103177,"seo":103178,"stem":103179,"__hash__":103180},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101169,"toc":103152},[101170,101173,101177,101180,101183,101189,101192,101215,101218,101252,101255,101296,101300,101303,101396,101399,101443,101446,101463,101466,101480,101483,101486,101531,101534,101571,101575,101578,101584,101589,101609,101613,101616,101682,101685,101703,101707,101710,101739,101749,101755,101759,101762,101768,101779,101783,101786,101816,101819,102099,102102,102105,102116,102119,102122,102144,102151,102154,102172,102175,102178,102192,102200,102203,102229,102235,102238,102241,102251,102263,102283,102292,102312,102322,102346,102359,102373,102378,102419,102436,102461,102473,102493,102499,102544,102563,102580,102593,102609,102616,102628,102637,102672,102693,102718,102731,102755,102770,102795,102798,102819,102828,102831,102842,102846,102849,102855,102867,102874,102878,102881,102893,102896,102910,102913,102923,102933,102936,102976,102979,102983,102989,102992,103006,103010,103013,103046,103050,103053,103076,103084,103087,103093,103099,103102,103105,103133,103137,103140,103146,103149],[10,101171,101167],{"id":101172},"_1环境安装与第一个-mujoco-程序",[14,101174,101176],{"id":101175},"_1目标说明","1.目标说明",[19,101178,101179],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101181,101182],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[117,101184,101187],{"className":101185,"code":101186,"language":5729,"meta":122},[5727],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[124,101188,101186],{"__ignoreMap":122},[19,101190,101191],{},"需要掌握:",[632,101193,101194,101197,101200,101205,101210],{},[635,101195,101196],{},"Fedora 44 下 MuJoCo 的系统依赖",[635,101198,101199],{},"Python 虚拟环境创建",[635,101201,101202],{},[124,101203,101204],{},"mujoco.MjModel",[635,101206,101207],{},[124,101208,101209],{},"mujoco.MjData",[635,101211,101212],{},[124,101213,101214],{},"mujoco.mj_step(model, data)",[19,101216,101217],{},"MuJoCo 中最重要的两个对象:",[814,101219,101220,101230],{},[817,101221,101222],{},[820,101223,101224,101227],{},[823,101225,101226],{"align":24276},"对象",[823,101228,101229],{"align":24276},"含义",[860,101231,101232,101242],{},[820,101233,101234,101239],{},[865,101235,101236],{"align":24276},[124,101237,101238],{},"MjModel",[865,101240,101241],{"align":24276},"模型结构，来自 XML，基本不随时间变化",[820,101243,101244,101249],{},[865,101245,101246],{"align":24276},[124,101247,101248],{},"MjData",[865,101250,101251],{"align":24276},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101253,101254],{},"可以先用一个类比理解：",[814,101256,101257,101267],{},[817,101258,101259],{},[820,101260,101261,101264],{},[823,101262,101263],{"align":24276},"类比",[823,101265,101266],{"align":24276},"MuJoCo 对象",[860,101268,101269,101278,101287],{},[820,101270,101271,101274],{},[865,101272,101273],{"align":24276},"游戏地图和角色配置",[865,101275,101276],{"align":24276},[124,101277,101238],{},[820,101279,101280,101283],{},[865,101281,101282],{"align":24276},"游戏运行到当前帧的状态",[865,101284,101285],{"align":24276},[124,101286,101248],{},[820,101288,101289,101292],{},[865,101290,101291],{"align":24276},"前进一帧",[865,101293,101294],{"align":24276},[124,101295,101214],{},[14,101297,101299],{"id":101298},"_2环境与依赖安装","2.环境与依赖安装",[19,101301,101302],{},"Fedora 44 系统依赖:",[117,101304,101306],{"className":24362,"code":101305,"language":24364,"meta":122,"style":122},"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",[124,101307,101308,101320,101333,101346,101356,101366,101385],{"__ignoreMap":122},[127,101309,101310,101312,101314,101316,101318],{"class":129,"line":130},[127,101311,25117],{"class":143},[127,101313,26856],{"class":781},[127,101315,24374],{"class":781},[127,101317,26941],{"class":154},[127,101319,25219],{"class":154},[127,101321,101322,101325,101328,101331],{"class":129,"line":137},[127,101323,101324],{"class":781},"  python3",[127,101326,101327],{"class":781}," python3-pip",[127,101329,101330],{"class":781}," python3-virtualenv",[127,101332,25219],{"class":154},[127,101334,101335,101338,101341,101344],{"class":129,"line":151},[127,101336,101337],{"class":781},"  mesa-libGL",[127,101339,101340],{"class":781}," mesa-libGLU",[127,101342,101343],{"class":781}," mesa-dri-drivers",[127,101345,25219],{"class":154},[127,101347,101348,101351,101354],{"class":129,"line":167},[127,101349,101350],{"class":781},"  libglvnd-glx",[127,101352,101353],{"class":781}," libglvnd-opengl",[127,101355,25219],{"class":154},[127,101357,101358,101361,101364],{"class":129,"line":415},[127,101359,101360],{"class":781},"  glfw",[127,101362,101363],{"class":781}," glfw-devel",[127,101365,25219],{"class":154},[127,101367,101368,101371,101374,101377,101380,101383],{"class":129,"line":421},[127,101369,101370],{"class":781},"  libX11",[127,101372,101373],{"class":781}," libXcursor",[127,101375,101376],{"class":781}," libXi",[127,101378,101379],{"class":781}," libXinerama",[127,101381,101382],{"class":781}," libXrandr",[127,101384,25219],{"class":154},[127,101386,101387,101390,101393],{"class":129,"line":1766},[127,101388,101389],{"class":781},"  gcc",[127,101391,101392],{"class":781}," gcc-c++",[127,101394,101395],{"class":781}," make\n",[19,101397,101398],{},"创建 Python 环境:",[117,101400,101402],{"className":24362,"code":101401,"language":24364,"meta":122,"style":122},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[124,101403,101404,101418,101426],{"__ignoreMap":122},[127,101405,101406,101409,101412,101415],{"class":129,"line":130},[127,101407,101408],{"class":143},"python3",[127,101410,101411],{"class":154}," -m",[127,101413,101414],{"class":781}," venv",[127,101416,101417],{"class":781}," .venv\n",[127,101419,101420,101423],{"class":129,"line":137},[127,101421,101422],{"class":154},"source",[127,101424,101425],{"class":781}," .venv\u002Fbin\u002Factivate\n",[127,101427,101428,101430,101432,101435,101437,101440],{"class":129,"line":151},[127,101429,30920],{"class":143},[127,101431,101411],{"class":154},[127,101433,101434],{"class":781}," pip",[127,101436,24374],{"class":781},[127,101438,101439],{"class":154}," --upgrade",[127,101441,101442],{"class":781}," pip\n",[19,101444,101445],{},"pip 安装:",[117,101447,101449],{"className":24362,"code":101448,"language":24364,"meta":122,"style":122},"pip install \"mujoco>=2.3\" numpy\n",[124,101450,101451],{"__ignoreMap":122},[127,101452,101453,101455,101457,101460],{"class":129,"line":130},[127,101454,24371],{"class":143},[127,101456,24374],{"class":781},[127,101458,101459],{"class":781}," \"mujoco>=2.3\"",[127,101461,101462],{"class":781}," numpy\n",[19,101464,101465],{},"安装完成后，先做最小检查：",[117,101467,101469],{"className":24362,"code":101468,"language":24364,"meta":122,"style":122},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[124,101470,101471],{"__ignoreMap":122},[127,101472,101473,101475,101477],{"class":129,"line":130},[127,101474,30920],{"class":143},[127,101476,30898],{"class":154},[127,101478,101479],{"class":781}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101481,101482],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101484,101485],{},"conda 安装:",[117,101487,101489],{"className":24362,"code":101488,"language":24364,"meta":122,"style":122},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[124,101490,101491,101511,101521],{"__ignoreMap":122},[127,101492,101493,101495,101497,101499,101502,101505,101508],{"class":129,"line":130},[127,101494,30870],{"class":143},[127,101496,29716],{"class":781},[127,101498,25656],{"class":154},[127,101500,101501],{"class":781}," mujoco-study",[127,101503,101504],{"class":781}," python=",[127,101506,101507],{"class":154},"3.10",[127,101509,101510],{"class":154}," -y\n",[127,101512,101513,101515,101518],{"class":129,"line":137},[127,101514,30870],{"class":143},[127,101516,101517],{"class":781}," activate",[127,101519,101520],{"class":781}," mujoco-study\n",[127,101522,101523,101525,101527,101529],{"class":129,"line":151},[127,101524,24371],{"class":143},[127,101526,24374],{"class":781},[127,101528,101459],{"class":781},[127,101530,101462],{"class":781},[19,101532,101533],{},"版本冲突说明:",[632,101535,101536,101542,101552,101561],{},[635,101537,101538,101539,28925],{},"不要安装 ",[124,101540,101541],{},"mujoco-py",[635,101543,101544,101545,101547,101548,101551],{},"如果旧项目里同时安装了 ",[124,101546,101541],{}," 和 ",[124,101549,101550],{},"mujoco","，建议新建干净虚拟环境。",[635,101553,101554,101557,101558,28925],{},[124,101555,101556],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[124,101559,101560],{},"~\u002F.mujoco\u002Fmujoco210",[635,101562,101563,101564,83068,101567,101570],{},"离屏渲染可能涉及 OpenGL 后端，",[124,101565,101566],{},"MUJOCO_GL=egl",[124,101568,101569],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101572,101574],{"id":101573},"_3核心概念解释","3.核心概念解释",[19,101576,101577],{},"MuJoCo 的基本执行流程:",[117,101579,101582],{"className":101580,"code":101581,"language":5729,"meta":122},[5727],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[124,101583,101581],{"__ignoreMap":122},[19,101585,101586,101588],{},[124,101587,101238],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101590,101591,101593,101594,888,101597,888,101600,888,101603,888,101606,28925],{},[124,101592,101248],{}," 存放仿真运行时状态，例如 ",[124,101595,101596],{},"data.time",[124,101598,101599],{},"data.qpos",[124,101601,101602],{},"data.qvel",[124,101604,101605],{},"data.ctrl",[124,101607,101608],{},"data.xpos",[62,101610,101612],{"id":101611},"xml-是什么","XML 是什么",[19,101614,101615],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[117,101617,101619],{"className":53602,"code":101618,"language":53604,"meta":122,"style":122},"\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",[124,101620,101621,101643,101674],{"__ignoreMap":122},[127,101622,101623,101625,101627,101629,101631,101633,101636,101638,101641],{"class":129,"line":130},[127,101624,1584],{"class":147},[127,101626,275],{"class":140},[127,101628,15462],{"class":143},[127,101630,725],{"class":147},[127,101632,54026],{"class":781},[127,101634,101635],{"class":143}," pos",[127,101637,725],{"class":147},[127,101639,101640],{"class":781},"\"0 0 1\"",[127,101642,51846],{"class":147},[127,101644,101645,101647,101650,101652,101654,101657,101659,101661,101663,101666,101668,101671],{"class":129,"line":137},[127,101646,52679],{"class":147},[127,101648,101649],{"class":140},"geom",[127,101651,15462],{"class":143},[127,101653,725],{"class":147},[127,101655,101656],{"class":781},"\"box_geom\"",[127,101658,54359],{"class":143},[127,101660,725],{"class":147},[127,101662,54026],{"class":781},[127,101664,101665],{"class":143}," size",[127,101667,725],{"class":147},[127,101669,101670],{"class":781},"\"0.1 0.1 0.1\"",[127,101672,101673],{"class":147},"\u002F>\n",[127,101675,101676,101678,101680],{"class":129,"line":151},[127,101677,52321],{"class":147},[127,101679,275],{"class":140},[127,101681,51846],{"class":147},[19,101683,101684],{},"这段意思是：",[632,101686,101687,101693,101700],{},[635,101688,101689,101690,101692],{},"创建一个叫 ",[124,101691,54249],{}," 的刚体。",[635,101694,101695,101696,101699],{},"它初始放在 ",[124,101697,101698],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[635,101701,101702],{},"它里面有一个盒子形状的几何体。",[62,101704,101706],{"id":101705},"timestep-是什么","timestep 是什么",[19,101708,101709],{},"XML 里的：",[117,101711,101713],{"className":53602,"code":101712,"language":53604,"meta":122,"style":122},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[124,101714,101715],{"__ignoreMap":122},[127,101716,101717,101719,101721,101724,101726,101729,101732,101734,101737],{"class":129,"line":130},[127,101718,1584],{"class":147},[127,101720,69699],{"class":140},[127,101722,101723],{"class":143}," timestep",[127,101725,725],{"class":147},[127,101727,101728],{"class":781},"\"0.01\"",[127,101730,101731],{"class":143}," gravity",[127,101733,725],{"class":147},[127,101735,101736],{"class":781},"\"0 0 -9.81\"",[127,101738,101673],{"class":147},[19,101740,101741,101742,101745,101746,101748],{},"表示每调用一次 ",[124,101743,101744],{},"mj_step","，仿真时间前进 ",[124,101747,39526],{}," 秒。循环 100 次，大约就是 1 秒：",[117,101750,101753],{"className":101751,"code":101752,"language":5729,"meta":122},[5727],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[124,101754,101752],{"__ignoreMap":122},[62,101756,101758],{"id":101757},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101760,101761],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[117,101763,101766],{"className":101764,"code":101765,"language":5729,"meta":122},[5727],"x y z qw qx qy qz\n",[124,101767,101765],{"__ignoreMap":122},[19,101769,101770,101771,101774,101775,101778],{},"表示一个自由刚体的位置和姿态。其中 ",[124,101772,101773],{},"x y z"," 是位置，",[124,101776,101777],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101780,101782],{"id":101781},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101784,101785],{},"新建文件:",[117,101787,101789],{"className":24362,"code":101788,"language":24364,"meta":122,"style":122},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[124,101790,101791,101801,101808],{"__ignoreMap":122},[127,101792,101793,101796,101798],{"class":129,"line":130},[127,101794,101795],{"class":143},"mkdir",[127,101797,29756],{"class":154},[127,101799,101800],{"class":781}," mujoco_tutorial\n",[127,101802,101803,101806],{"class":129,"line":137},[127,101804,101805],{"class":154},"cd",[127,101807,101800],{"class":781},[127,101809,101810,101813],{"class":129,"line":151},[127,101811,101812],{"class":143},"touch",[127,101814,101815],{"class":781}," ch1_first_sim.py\n",[19,101817,101818],{},"写入:",[117,101820,101822],{"className":30918,"code":101821,"language":30920,"meta":122,"style":122},"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",[124,101823,101824,101831,101835,101839,101849,101854,101859,101863,101868,101873,101877,101882,101887,101892,101897,101902,101907,101911,101915,101919,101932,101946,101956,101960,101972,101984,101996,102008,102020,102024,102041,102046,102050,102061,102072,102076,102080,102094],{"__ignoreMap":122},[127,101825,101826,101828],{"class":129,"line":130},[127,101827,30932],{"class":290},[127,101829,101830],{"class":147}," mujoco\n",[127,101832,101833],{"class":129,"line":137},[127,101834,2942],{"emptyLinePlaceholder":606},[127,101836,101837],{"class":129,"line":151},[127,101838,2942],{"emptyLinePlaceholder":606},[127,101840,101841,101844,101846],{"class":129,"line":167},[127,101842,101843],{"class":154},"XML",[127,101845,14106],{"class":290},[127,101847,101848],{"class":781}," \"\"\"\n",[127,101850,101851],{"class":129,"line":415},[127,101852,101853],{"class":781},"\u003Cmujoco model=\"first_sim\">\n",[127,101855,101856],{"class":129,"line":421},[127,101857,101858],{"class":781},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[127,101860,101861],{"class":129,"line":1766},[127,101862,2942],{"emptyLinePlaceholder":606},[127,101864,101865],{"class":129,"line":1856},[127,101866,101867],{"class":781},"  \u003Cworldbody>\n",[127,101869,101870],{"class":129,"line":1862},[127,101871,101872],{"class":781},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[127,101874,101875],{"class":129,"line":1874},[127,101876,2942],{"emptyLinePlaceholder":606},[127,101878,101879],{"class":129,"line":2155},[127,101880,101881],{"class":781},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[127,101883,101884],{"class":129,"line":2160},[127,101885,101886],{"class":781},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[127,101888,101889],{"class":129,"line":2166},[127,101890,101891],{"class":781},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[127,101893,101894],{"class":129,"line":2171},[127,101895,101896],{"class":781},"    \u003C\u002Fbody>\n",[127,101898,101899],{"class":129,"line":2185},[127,101900,101901],{"class":781},"  \u003C\u002Fworldbody>\n",[127,101903,101904],{"class":129,"line":2190},[127,101905,101906],{"class":781},"\u003C\u002Fmujoco>\n",[127,101908,101909],{"class":129,"line":2196},[127,101910,96227],{"class":781},[127,101912,101913],{"class":129,"line":2217},[127,101914,2942],{"emptyLinePlaceholder":606},[127,101916,101917],{"class":129,"line":2222},[127,101918,2942],{"emptyLinePlaceholder":606},[127,101920,101921,101923,101925,101928,101930],{"class":129,"line":2236},[127,101922,32487],{"class":290},[127,101924,2515],{"class":143},[127,101926,101927],{"class":147},"() -> ",[127,101929,96215],{"class":154},[127,101931,4281],{"class":147},[127,101933,101934,101937,101939,101942,101944],{"class":129,"line":2241},[127,101935,101936],{"class":147},"    model ",[127,101938,725],{"class":290},[127,101940,101941],{"class":147}," mujoco.MjModel.from_xml_string(",[127,101943,101843],{"class":154},[127,101945,687],{"class":147},[127,101947,101948,101951,101953],{"class":129,"line":2270},[127,101949,101950],{"class":147},"    data ",[127,101952,725],{"class":290},[127,101954,101955],{"class":147}," mujoco.MjData(model)\n",[127,101957,101958],{"class":129,"line":2275},[127,101959,2942],{"emptyLinePlaceholder":606},[127,101961,101962,101964,101966,101969],{"class":129,"line":2292},[127,101963,31839],{"class":154},[127,101965,681],{"class":147},[127,101967,101968],{"class":781},"\"nq:\"",[127,101970,101971],{"class":147},", model.nq)\n",[127,101973,101974,101976,101978,101981],{"class":129,"line":2297},[127,101975,31839],{"class":154},[127,101977,681],{"class":147},[127,101979,101980],{"class":781},"\"nv:\"",[127,101982,101983],{"class":147},", model.nv)\n",[127,101985,101986,101988,101990,101993],{"class":129,"line":2302},[127,101987,31839],{"class":154},[127,101989,681],{"class":147},[127,101991,101992],{"class":781},"\"nu:\"",[127,101994,101995],{"class":147},", model.nu)\n",[127,101997,101998,102000,102002,102005],{"class":129,"line":2307},[127,101999,31839],{"class":154},[127,102001,681],{"class":147},[127,102003,102004],{"class":781},"\"initial time:\"",[127,102006,102007],{"class":147},", data.time)\n",[127,102009,102010,102012,102014,102017],{"class":129,"line":2321},[127,102011,31839],{"class":154},[127,102013,681],{"class":147},[127,102015,102016],{"class":781},"\"initial qpos:\"",[127,102018,102019],{"class":147},", data.qpos.copy())\n",[127,102021,102022],{"class":129,"line":2326},[127,102023,2942],{"emptyLinePlaceholder":606},[127,102025,102026,102028,102031,102033,102035,102037,102039],{"class":129,"line":3119},[127,102027,3743],{"class":290},[127,102029,102030],{"class":147}," _ ",[127,102032,26584],{"class":290},[127,102034,32983],{"class":154},[127,102036,681],{"class":147},[127,102038,986],{"class":154},[127,102040,31326],{"class":147},[127,102042,102043],{"class":129,"line":3133},[127,102044,102045],{"class":147},"        mujoco.mj_step(model, data)\n",[127,102047,102048],{"class":129,"line":3141},[127,102049,2942],{"emptyLinePlaceholder":606},[127,102051,102052,102054,102056,102059],{"class":129,"line":3146},[127,102053,31839],{"class":154},[127,102055,681],{"class":147},[127,102057,102058],{"class":781},"\"final time:\"",[127,102060,102007],{"class":147},[127,102062,102063,102065,102067,102070],{"class":129,"line":3152},[127,102064,31839],{"class":154},[127,102066,681],{"class":147},[127,102068,102069],{"class":781},"\"final qpos:\"",[127,102071,102019],{"class":147},[127,102073,102074],{"class":129,"line":3158},[127,102075,2942],{"emptyLinePlaceholder":606},[127,102077,102078],{"class":129,"line":3163},[127,102079,2942],{"emptyLinePlaceholder":606},[127,102081,102082,102084,102086,102089,102092],{"class":129,"line":8490},[127,102083,2075],{"class":290},[127,102085,31760],{"class":154},[127,102087,102088],{"class":290}," ==",[127,102090,102091],{"class":781}," \"__main__\"",[127,102093,4281],{"class":147},[127,102095,102096],{"class":129,"line":8514},[127,102097,102098],{"class":147},"    main()\n",[62,102100,102101],{"id":102101},"代码逐段解释",[19,102103,102104],{},"导入库：",[117,102106,102108],{"className":30918,"code":102107,"language":30920,"meta":122,"style":122},"import mujoco\n",[124,102109,102110],{"__ignoreMap":122},[127,102111,102112,102114],{"class":129,"line":130},[127,102113,30932],{"class":290},[127,102115,101830],{"class":147},[19,102117,102118],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102120,102121],{},"定义 XML：",[117,102123,102125],{"className":30918,"code":102124,"language":30920,"meta":122,"style":122},"XML = \"\"\"\n...\n\"\"\"\n",[124,102126,102127,102135,102140],{"__ignoreMap":122},[127,102128,102129,102131,102133],{"class":129,"line":130},[127,102130,101843],{"class":154},[127,102132,14106],{"class":290},[127,102134,101848],{"class":781},[127,102136,102137],{"class":129,"line":137},[127,102138,102139],{"class":781},"...\n",[127,102141,102142],{"class":129,"line":151},[127,102143,96227],{"class":781},[19,102145,102146,102147,102150],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[124,102148,102149],{},"freejoint"," 的方块。",[19,102152,102153],{},"编译模型：",[117,102155,102157],{"className":30918,"code":102156,"language":30920,"meta":122,"style":122},"model = mujoco.MjModel.from_xml_string(XML)\n",[124,102158,102159],{"__ignoreMap":122},[127,102160,102161,102164,102166,102168,102170],{"class":129,"line":130},[127,102162,102163],{"class":147},"model ",[127,102165,725],{"class":290},[127,102167,101941],{"class":147},[127,102169,101843],{"class":154},[127,102171,687],{"class":147},[19,102173,102174],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102176,102177],{},"创建数据：",[117,102179,102181],{"className":30918,"code":102180,"language":30920,"meta":122,"style":122},"data = mujoco.MjData(model)\n",[124,102182,102183],{"__ignoreMap":122},[127,102184,102185,102188,102190],{"class":129,"line":130},[127,102186,102187],{"class":147},"data ",[127,102189,725],{"class":290},[127,102191,101955],{"class":147},[19,102193,102194,102196,102197,102199],{},[124,102195,33941],{}," 会保存仿真当前状态。刚创建时，时间是 ",[124,102198,867],{},"，方块还在初始位置。",[19,102201,102202],{},"推进仿真：",[117,102204,102206],{"className":30918,"code":102205,"language":30920,"meta":122,"style":122},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[124,102207,102208,102224],{"__ignoreMap":122},[127,102209,102210,102212,102214,102216,102218,102220,102222],{"class":129,"line":130},[127,102211,3567],{"class":290},[127,102213,102030],{"class":147},[127,102215,26584],{"class":290},[127,102217,32983],{"class":154},[127,102219,681],{"class":147},[127,102221,986],{"class":154},[127,102223,31326],{"class":147},[127,102225,102226],{"class":129,"line":137},[127,102227,102228],{"class":147},"    mujoco.mj_step(model, data)\n",[19,102230,102231,102232,102234],{},"每次 ",[124,102233,101744],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[62,102236,102237],{"id":102237},"代码逐行细讲",[19,102239,102240],{},"下面把完整代码按新手视角拆开讲。",[117,102242,102243],{"className":30918,"code":102107,"language":30920,"meta":122,"style":122},[124,102244,102245],{"__ignoreMap":122},[127,102246,102247,102249],{"class":129,"line":130},[127,102248,30932],{"class":290},[127,102250,101830],{"class":147},[19,102252,102253,102255,102256,888,102258,888,102260,28925],{},[124,102254,30932],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[124,102257,101204],{},[124,102259,101209],{},[124,102261,102262],{},"mujoco.mj_step",[117,102264,102265],{"className":30918,"code":102124,"language":30920,"meta":122,"style":122},[124,102266,102267,102275,102279],{"__ignoreMap":122},[127,102268,102269,102271,102273],{"class":129,"line":130},[127,102270,101843],{"class":154},[127,102272,14106],{"class":290},[127,102274,101848],{"class":781},[127,102276,102277],{"class":129,"line":137},[127,102278,102139],{"class":781},[127,102280,102281],{"class":129,"line":151},[127,102282,96227],{"class":781},[19,102284,102285,102287,102288,102291],{},[124,102286,101843],{}," 是一个变量名。右边的三引号 ",[124,102289,102290],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[117,102293,102294],{"className":53602,"code":101853,"language":53604,"meta":122,"style":122},[124,102295,102296],{"__ignoreMap":122},[127,102297,102298,102300,102302,102305,102307,102310],{"class":129,"line":130},[127,102299,1584],{"class":147},[127,102301,101550],{"class":140},[127,102303,102304],{"class":143}," model",[127,102306,725],{"class":147},[127,102308,102309],{"class":781},"\"first_sim\"",[127,102311,51846],{"class":147},[19,102313,102314,102315,102318,102319,28925],{},"这是 XML 的根标签。",[124,102316,102317],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[124,102320,102321],{},"first_sim",[117,102323,102324],{"className":53602,"code":101712,"language":53604,"meta":122,"style":122},[124,102325,102326],{"__ignoreMap":122},[127,102327,102328,102330,102332,102334,102336,102338,102340,102342,102344],{"class":129,"line":130},[127,102329,1584],{"class":147},[127,102331,69699],{"class":140},[127,102333,101723],{"class":143},[127,102335,725],{"class":147},[127,102337,101728],{"class":781},[127,102339,101731],{"class":143},[127,102341,725],{"class":147},[127,102343,101736],{"class":781},[127,102345,101673],{"class":147},[19,102347,102348,102350,102351,102354,102355,102358],{},[124,102349,69699],{}," 用来设置仿真参数。",[124,102352,102353],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[124,102356,102357],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[117,102360,102362],{"className":53602,"code":102361,"language":53604,"meta":122,"style":122},"\u003Cworldbody>\n",[124,102363,102364],{"__ignoreMap":122},[127,102365,102366,102368,102371],{"class":129,"line":130},[127,102367,1584],{"class":147},[127,102369,102370],{"class":140},"worldbody",[127,102372,51846],{"class":147},[19,102374,102375,102377],{},[124,102376,102370],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[117,102379,102381],{"className":53602,"code":102380,"language":53604,"meta":122,"style":122},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[124,102382,102383],{"__ignoreMap":122},[127,102384,102385,102387,102389,102391,102393,102396,102398,102400,102403,102405,102407,102410,102412,102414,102417],{"class":129,"line":130},[127,102386,1584],{"class":147},[127,102388,101649],{"class":140},[127,102390,15462],{"class":143},[127,102392,725],{"class":147},[127,102394,102395],{"class":781},"\"floor\"",[127,102397,54359],{"class":143},[127,102399,725],{"class":147},[127,102401,102402],{"class":781},"\"plane\"",[127,102404,101665],{"class":143},[127,102406,725],{"class":147},[127,102408,102409],{"class":781},"\"2 2 0.1\"",[127,102411,79296],{"class":143},[127,102413,725],{"class":147},[127,102415,102416],{"class":781},"\"0.8 0.8 0.8 1\"",[127,102418,101673],{"class":147},[19,102420,102421,102422,102424,102425,102428,102429,102432,102433,102435],{},"这行创建地面。",[124,102423,101649],{}," 是几何体。",[124,102426,102427],{},"name=\"floor\""," 是名字。",[124,102430,102431],{},"type=\"plane\""," 表示平面。",[124,102434,55644],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[117,102437,102439],{"className":53602,"code":102438,"language":53604,"meta":122,"style":122},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[124,102440,102441],{"__ignoreMap":122},[127,102442,102443,102445,102447,102449,102451,102453,102455,102457,102459],{"class":129,"line":130},[127,102444,1584],{"class":147},[127,102446,275],{"class":140},[127,102448,15462],{"class":143},[127,102450,725],{"class":147},[127,102452,54026],{"class":781},[127,102454,101635],{"class":143},[127,102456,725],{"class":147},[127,102458,101640],{"class":781},[127,102460,51846],{"class":147},[19,102462,102463,102464,28925,102466,102469,102470,102472],{},"这行创建一个刚体，名字叫 ",[124,102465,54249],{},[124,102467,102468],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[124,102471,101698],{},"，也就是离地面 1 米高。",[117,102474,102476],{"className":53602,"code":102475,"language":53604,"meta":122,"style":122},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[124,102477,102478],{"__ignoreMap":122},[127,102479,102480,102482,102484,102486,102488,102491],{"class":129,"line":130},[127,102481,1584],{"class":147},[127,102483,102149],{"class":140},[127,102485,15462],{"class":143},[127,102487,725],{"class":147},[127,102489,102490],{"class":781},"\"box_free\"",[127,102492,101673],{"class":147},[19,102494,102495,102496,102498],{},"这行很重要。",[124,102497,102149],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[117,102500,102502],{"className":53602,"code":102501,"language":53604,"meta":122,"style":122},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[124,102503,102504],{"__ignoreMap":122},[127,102505,102506,102508,102510,102512,102514,102516,102518,102520,102522,102524,102526,102528,102531,102533,102535,102537,102539,102542],{"class":129,"line":130},[127,102507,1584],{"class":147},[127,102509,101649],{"class":140},[127,102511,15462],{"class":143},[127,102513,725],{"class":147},[127,102515,101656],{"class":781},[127,102517,54359],{"class":143},[127,102519,725],{"class":147},[127,102521,54026],{"class":781},[127,102523,101665],{"class":143},[127,102525,725],{"class":147},[127,102527,101670],{"class":781},[127,102529,102530],{"class":143}," mass",[127,102532,725],{"class":147},[127,102534,4220],{"class":781},[127,102536,79296],{"class":143},[127,102538,725],{"class":147},[127,102540,102541],{"class":781},"\"1 0 0 1\"",[127,102543,101673],{"class":147},[19,102545,102546,102547,102550,102551,102554,102555,102558,102559,102562],{},"这行给 box body 添加一个盒子形状。",[124,102548,102549],{},"type=\"box\""," 表示形状是盒子。",[124,102552,102553],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[124,102556,102557],{},"mass=\"1\""," 表示质量是 1。",[124,102560,102561],{},"rgba=\"1 0 0 1\""," 表示红色。",[117,102564,102566],{"className":30918,"code":102565,"language":30920,"meta":122,"style":122},"def main() -> None:\n",[124,102567,102568],{"__ignoreMap":122},[127,102569,102570,102572,102574,102576,102578],{"class":129,"line":130},[127,102571,32487],{"class":290},[127,102573,2515],{"class":143},[127,102575,101927],{"class":147},[127,102577,96215],{"class":154},[127,102579,4281],{"class":147},[19,102581,102582,102584,102585,102588,102589,102592],{},[124,102583,32487],{}," 用来定义函数。这里定义了一个叫 ",[124,102586,102587],{},"main"," 的函数。",[124,102590,102591],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[117,102594,102595],{"className":30918,"code":102156,"language":30920,"meta":122,"style":122},[124,102596,102597],{"__ignoreMap":122},[127,102598,102599,102601,102603,102605,102607],{"class":129,"line":130},[127,102600,102163],{"class":147},[127,102602,725],{"class":290},[127,102604,101941],{"class":147},[127,102606,101843],{"class":154},[127,102608,687],{"class":147},[19,102610,102611,102612,102615],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[124,102613,102614],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[117,102617,102618],{"className":30918,"code":102180,"language":30920,"meta":122,"style":122},[124,102619,102620],{"__ignoreMap":122},[127,102621,102622,102624,102626],{"class":129,"line":130},[127,102623,102187],{"class":147},[127,102625,725],{"class":290},[127,102627,101955],{"class":147},[19,102629,102630,102631,102633,102634,102636],{},"这行创建仿真数据。",[124,102632,33941],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[124,102635,33941],{}," 都会变化。",[117,102638,102640],{"className":30918,"code":102639,"language":30920,"meta":122,"style":122},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[124,102641,102642,102652,102662],{"__ignoreMap":122},[127,102643,102644,102646,102648,102650],{"class":129,"line":130},[127,102645,30955],{"class":154},[127,102647,681],{"class":147},[127,102649,101968],{"class":781},[127,102651,101971],{"class":147},[127,102653,102654,102656,102658,102660],{"class":129,"line":137},[127,102655,30955],{"class":154},[127,102657,681],{"class":147},[127,102659,101980],{"class":781},[127,102661,101983],{"class":147},[127,102663,102664,102666,102668,102670],{"class":129,"line":151},[127,102665,30955],{"class":154},[127,102667,681],{"class":147},[127,102669,101992],{"class":781},[127,102671,101995],{"class":147},[19,102673,102674,102676,102677,102680,102681,102684,102685,102688,102689,102692],{},[124,102675,30955],{}," 用来输出信息。",[124,102678,102679],{},"model.nq"," 是位置变量数量，",[124,102682,102683],{},"model.nv"," 是速度变量数量，",[124,102686,102687],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[124,102690,102691],{},"nu"," 是 0。",[117,102694,102696],{"className":30918,"code":102695,"language":30920,"meta":122,"style":122},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[124,102697,102698,102708],{"__ignoreMap":122},[127,102699,102700,102702,102704,102706],{"class":129,"line":130},[127,102701,30955],{"class":154},[127,102703,681],{"class":147},[127,102705,102004],{"class":781},[127,102707,102007],{"class":147},[127,102709,102710,102712,102714,102716],{"class":129,"line":137},[127,102711,30955],{"class":154},[127,102713,681],{"class":147},[127,102715,102016],{"class":781},[127,102717,102019],{"class":147},[19,102719,102720,102721,102723,102724,102726,102727,102730],{},"这里打印初始时间和初始位置。",[124,102722,101596],{}," 一开始是 0。",[124,102725,101599],{}," 是位置数组。",[124,102728,102729],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[117,102732,102733],{"className":30918,"code":102205,"language":30920,"meta":122,"style":122},[124,102734,102735,102751],{"__ignoreMap":122},[127,102736,102737,102739,102741,102743,102745,102747,102749],{"class":129,"line":130},[127,102738,3567],{"class":290},[127,102740,102030],{"class":147},[127,102742,26584],{"class":290},[127,102744,32983],{"class":154},[127,102746,681],{"class":147},[127,102748,986],{"class":154},[127,102750,31326],{"class":147},[127,102752,102753],{"class":129,"line":137},[127,102754,102228],{"class":147},[19,102756,102757,102759,102760,102763,102764,102766,102767,102769],{},[124,102758,3567],{}," 是循环。",[124,102761,102762],{},"range(100)"," 表示循环 100 次。",[124,102765,1666],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[124,102768,101744],{},"，仿真就前进一步。",[117,102771,102773],{"className":30918,"code":102772,"language":30920,"meta":122,"style":122},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[124,102774,102775,102785],{"__ignoreMap":122},[127,102776,102777,102779,102781,102783],{"class":129,"line":130},[127,102778,30955],{"class":154},[127,102780,681],{"class":147},[127,102782,102058],{"class":781},[127,102784,102007],{"class":147},[127,102786,102787,102789,102791,102793],{"class":129,"line":137},[127,102788,30955],{"class":154},[127,102790,681],{"class":147},[127,102792,102069],{"class":781},[127,102794,102019],{"class":147},[19,102796,102797],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[117,102799,102801],{"className":30918,"code":102800,"language":30920,"meta":122,"style":122},"if __name__ == \"__main__\":\n    main()\n",[124,102802,102803,102815],{"__ignoreMap":122},[127,102804,102805,102807,102809,102811,102813],{"class":129,"line":130},[127,102806,2075],{"class":290},[127,102808,31760],{"class":154},[127,102810,102088],{"class":290},[127,102812,102091],{"class":781},[127,102814,4281],{"class":147},[127,102816,102817],{"class":129,"line":137},[127,102818,102098],{"class":147},[19,102820,102821,102822,102825,102826,28925],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[124,102823,102824],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[124,102827,102824],{},[19,102829,102830],{},"运行:",[117,102832,102834],{"className":24362,"code":102833,"language":24364,"meta":122,"style":122},"python ch1_first_sim.py\n",[124,102835,102836],{"__ignoreMap":122},[127,102837,102838,102840],{"class":129,"line":130},[127,102839,30920],{"class":143},[127,102841,101815],{"class":781},[14,102843,102845],{"id":102844},"_5运行结果说明","5.运行结果说明",[19,102847,102848],{},"你应该看到类似输出:",[117,102850,102853],{"className":102851,"code":102852,"language":5729,"meta":122},[5727],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[124,102854,102852],{"__ignoreMap":122},[19,102856,102857,102859,102860,102863,102864,28925],{},[124,102858,102149],{}," 有 7 个位置变量: ",[124,102861,102862],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[124,102865,102866],{},"vx vy vz wx wy wz",[19,102868,102869,102870,102873],{},"你还会看到 ",[124,102871,102872],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102875,102877],{"id":102876},"_6验证步骤","6.验证步骤",[19,102879,102880],{},"确认版本:",[117,102882,102883],{"className":24362,"code":101468,"language":24364,"meta":122,"style":122},[124,102884,102885],{"__ignoreMap":122},[127,102886,102887,102889,102891],{"class":129,"line":130},[127,102888,30920],{"class":143},[127,102890,30898],{"class":154},[127,102892,101479],{"class":781},[19,102894,102895],{},"确认导入的是官方 bindings:",[117,102897,102899],{"className":24362,"code":102898,"language":24364,"meta":122,"style":122},"python -c \"import mujoco; print(mujoco)\"\n",[124,102900,102901],{"__ignoreMap":122},[127,102902,102903,102905,102907],{"class":129,"line":130},[127,102904,30920],{"class":143},[127,102906,30898],{"class":154},[127,102908,102909],{"class":781}," \"import mujoco; print(mujoco)\"\n",[19,102911,102912],{},"运行程序:",[117,102914,102915],{"className":24362,"code":102833,"language":24364,"meta":122,"style":122},[124,102916,102917],{"__ignoreMap":122},[127,102918,102919,102921],{"class":129,"line":130},[127,102920,30920],{"class":143},[127,102922,101815],{"class":781},[19,102924,102925,102926,102929,102930,28925],{},"检查 ",[124,102927,102928],{},"final time"," 是否约等于 ",[124,102931,102932],{},"1.0",[19,102934,102935],{},"再做几个小实验：",[632,102937,102938,102948,102956,102969],{},[635,102939,102940,102941,102943,102944,102947],{},"把 ",[124,102942,102468],{}," 改成 ",[124,102945,102946],{},"pos=\"0 0 2\"","，观察初始高度变化。",[635,102949,102940,102950,102943,102952,102955],{},[124,102951,102357],{},[124,102953,102954],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[635,102957,102940,102958,102943,102960,102963,102964,102966,102967,28925],{},[124,102959,102353],{},[124,102961,102962],{},"timestep=\"0.005\"","，观察 100 步后的 ",[124,102965,102928],{}," 是否变成约 ",[124,102968,35869],{},[635,102970,102971,102972,102975],{},"删除 ",[124,102973,102974],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102977,102978],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102980,102982],{"id":102981},"_7常见错误与解决方案","7.常见错误与解决方案",[62,102984,102986],{"id":102985},"modulenotfounderror-no-module-named-mujoco",[124,102987,102988],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102990,102991],{},"解决:",[117,102993,102995],{"className":24362,"code":102994,"language":24364,"meta":122,"style":122},"pip install \"mujoco>=2.3\"\n",[124,102996,102997],{"__ignoreMap":122},[127,102998,102999,103001,103003],{"class":129,"line":130},[127,103000,24371],{"class":143},[127,103002,24374],{"class":781},[127,103004,103005],{"class":781}," \"mujoco>=2.3\"\n",[62,103007,103009],{"id":103008},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103011,103012],{},"先安装系统依赖:",[117,103014,103016],{"className":24362,"code":103015,"language":24364,"meta":122,"style":122},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[124,103017,103018],{"__ignoreMap":122},[127,103019,103020,103022,103024,103026,103028,103031,103033,103036,103038,103041,103043],{"class":129,"line":130},[127,103021,25117],{"class":143},[127,103023,26856],{"class":781},[127,103025,24374],{"class":781},[127,103027,26941],{"class":154},[127,103029,103030],{"class":781}," mesa-libGL",[127,103032,101343],{"class":781},[127,103034,103035],{"class":781}," glfw",[127,103037,101363],{"class":781},[127,103039,103040],{"class":781}," libX11",[127,103042,101376],{"class":781},[127,103044,103045],{"class":781}," libXrandr\n",[62,103047,103049],{"id":103048},"xml-解析失败","XML 解析失败",[19,103051,103052],{},"检查:",[632,103054,103055,103058,103061,103067],{},[635,103056,103057],{},"标签是否闭合",[635,103059,103060],{},"属性是否带引号",[635,103062,103063,103064],{},"根节点是否是 ",[124,103065,103066],{},"\u003Cmujoco>",[635,103068,103069,103071,103072,103075],{},[124,103070,275],{}," 是否放在 ",[124,103073,103074],{},"\u003Cworldbody>"," 内部",[62,103077,103079,103081,103082],{"id":103078},"final-time-不是严格等于-10",[124,103080,102928],{}," 不是严格等于 ",[124,103083,102932],{},[19,103085,103086],{},"这通常不是错误。浮点数计算可能得到：",[117,103088,103091],{"className":103089,"code":103090,"language":5729,"meta":122},[5727],"1.0000000000000007\n",[124,103092,103090],{"__ignoreMap":122},[19,103094,103095,103096,103098],{},"只要接近 ",[124,103097,102932],{}," 就正常。",[62,103100,103101],{"id":103101},"方块没有掉下来",[19,103103,103104],{},"检查：",[632,103106,103107,103113,103119,103124],{},[635,103108,103109,103110],{},"方块 body 里是否有 ",[124,103111,103112],{},"\u003Cfreejoint\u002F>",[635,103114,103115,103116],{},"重力是否是 ",[124,103117,103118],{},"0 0 -9.81",[635,103120,103121,103122],{},"是否真的调用了 ",[124,103123,101214],{},[635,103125,103126,103127,103129,103130],{},"你看的是否是 ",[124,103128,102872],{},"，不是 ",[124,103131,103132],{},"initial qpos",[14,103134,103136],{"id":103135},"_8本章小结","8.本章小结",[19,103138,103139],{},"本章你已经完成了 MuJoCo 的最小闭环：",[117,103141,103144],{"className":103142,"code":103143,"language":5729,"meta":122},[5727],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[124,103145,103143],{"__ignoreMap":122},[19,103147,103148],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[575,103150,103151],{},"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":122,"searchDepth":137,"depth":137,"links":103153},[103154,103155,103156,103161,103165,103166,103167,103175],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":103157},[103158,103159,103160],{"id":101611,"depth":151,"text":101612},{"id":101705,"depth":151,"text":101706},{"id":101757,"depth":151,"text":101758},{"id":101781,"depth":137,"text":101782,"children":103162},[103163,103164],{"id":102101,"depth":151,"text":102101},{"id":102237,"depth":151,"text":102237},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":103168},[103169,103170,103171,103172,103174],{"id":102985,"depth":151,"text":102988},{"id":103008,"depth":151,"text":103009},{"id":103048,"depth":151,"text":103049},{"id":103078,"depth":151,"text":103173},"final time 不是严格等于 1.0",{"id":103101,"depth":151,"text":103101},{"id":103135,"depth":137,"text":103136},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101167,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103182,"title":103183,"body":103184,"description":122,"extension":604,"meta":104840,"navigation":606,"path":104841,"seo":104842,"stem":104843,"__hash__":104844},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103185,"toc":104816},[103186,103189,103191,103194,103197,103214,103309,103312,103318,103320,103322,103346,103349,103363,103366,103407,103409,103422,103424,103427,103475,103487,103490,103493,103499,103512,103579,103582,103601,103604,103607,103613,103615,103624,103627,103631,103640,103722,103731,103735,103741,103755,103765,103767,104097,104100,104112,104114,104125,104127,104130,104148,104151,104154,104172,104183,104186,104201,104211,104213,104234,104251,104271,104277,104317,104333,104349,104355,104358,104382,104398,104403,104433,104450,104475,104478,104493,104502,104517,104526,104541,104548,104550,104560,104573,104580,104583,104622,104629,104631,104683,104685,104691,104694,104701,104708,104711,104713,104731,104734,104737,104771,104783,104785,104788,104810,104813],[10,103187,103183],{"id":103188},"_2xml-与-mjcf-物理建模基础",[14,103190,101176],{"id":101175},[19,103192,103193],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103195,103196],{},"本章结束后，你应该能看懂一个简单模型里：",[632,103198,103199,103202,103205,103208,103211],{},[635,103200,103201],{},"地面在哪里。",[635,103203,103204],{},"物体初始位置在哪里。",[635,103206,103207],{},"几何体是什么形状。",[635,103209,103210],{},"哪些 body 可以自由运动。",[635,103212,103213],{},"如何用名字在 Python 里找到 XML 中的对象。",[814,103215,103216,103226],{},[817,103217,103218],{},[820,103219,103220,103223],{},[823,103221,103222],{"align":24276},"标签",[823,103224,103225],{"align":24276},"作用",[860,103227,103228,103237,103247,103256,103266,103276,103289,103299],{},[820,103229,103230,103234],{},[865,103231,103232],{"align":24276},[124,103233,103066],{},[865,103235,103236],{"align":24276},"根节点",[820,103238,103239,103244],{},[865,103240,103241],{"align":24276},[124,103242,103243],{},"\u003Coption>",[865,103245,103246],{"align":24276},"仿真参数",[820,103248,103249,103253],{},[865,103250,103251],{"align":24276},[124,103252,103074],{},[865,103254,103255],{"align":24276},"世界中的物体",[820,103257,103258,103263],{},[865,103259,103260],{"align":24276},[124,103261,103262],{},"\u003Cbody>",[865,103264,103265],{"align":24276},"刚体",[820,103267,103268,103273],{},[865,103269,103270],{"align":24276},[124,103271,103272],{},"\u003Cgeom>",[865,103274,103275],{"align":24276},"几何体、碰撞体、可视体",[820,103277,103278,103286],{},[865,103279,103280,25519,103283],{"align":24276},[124,103281,103282],{},"\u003Cjoint>",[124,103284,103285],{},"\u003Cfreejoint>",[865,103287,103288],{"align":24276},"关节",[820,103290,103291,103296],{},[865,103292,103293],{"align":24276},[124,103294,103295],{},"\u003Csite>",[865,103297,103298],{"align":24276},"标记点",[820,103300,103301,103306],{},[865,103302,103303],{"align":24276},[124,103304,103305],{},"\u003Cactuator>",[865,103307,103308],{"align":24276},"控制器",[19,103310,103311],{},"初学时可以先记住：",[117,103313,103316],{"className":103314,"code":103315,"language":5729,"meta":122},[5727],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[124,103317,103315],{"__ignoreMap":122},[14,103319,101299],{"id":101298},[19,103321,101302],{},[117,103323,103325],{"className":24362,"code":103324,"language":24364,"meta":122,"style":122},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[124,103326,103327],{"__ignoreMap":122},[127,103328,103329,103331,103333,103335,103337,103339,103341,103343],{"class":129,"line":130},[127,103330,25117],{"class":143},[127,103332,26856],{"class":781},[127,103334,24374],{"class":781},[127,103336,26941],{"class":154},[127,103338,103030],{"class":781},[127,103340,101343],{"class":781},[127,103342,103035],{"class":781},[127,103344,103345],{"class":781}," glfw-devel\n",[19,103347,103348],{},"pip:",[117,103350,103351],{"className":24362,"code":101448,"language":24364,"meta":122,"style":122},[124,103352,103353],{"__ignoreMap":122},[127,103354,103355,103357,103359,103361],{"class":129,"line":130},[127,103356,24371],{"class":143},[127,103358,24374],{"class":781},[127,103360,101459],{"class":781},[127,103362,101462],{"class":781},[19,103364,103365],{},"conda:",[117,103367,103369],{"className":24362,"code":103368,"language":24364,"meta":122,"style":122},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[124,103370,103371,103388,103397],{"__ignoreMap":122},[127,103372,103373,103375,103377,103379,103382,103384,103386],{"class":129,"line":130},[127,103374,30870],{"class":143},[127,103376,29716],{"class":781},[127,103378,25656],{"class":154},[127,103380,103381],{"class":781}," mujoco-xml",[127,103383,101504],{"class":781},[127,103385,101507],{"class":154},[127,103387,101510],{"class":154},[127,103389,103390,103392,103394],{"class":129,"line":137},[127,103391,30870],{"class":143},[127,103393,101517],{"class":781},[127,103395,103396],{"class":781}," mujoco-xml\n",[127,103398,103399,103401,103403,103405],{"class":129,"line":151},[127,103400,24371],{"class":143},[127,103402,24374],{"class":781},[127,103404,101459],{"class":781},[127,103406,101462],{"class":781},[19,103408,101533],{},[632,103410,103411,103414,103419],{},[635,103412,103413],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[635,103415,103416,103417,28925],{},"本章使用基础标签，适用于 ",[124,103418,101556],{},[635,103420,103421],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103423,101574],{"id":101573},[19,103425,103426],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[117,103428,103430],{"className":53602,"code":103429,"language":53604,"meta":122,"style":122},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[124,103431,103432,103446,103454,103459,103467],{"__ignoreMap":122},[127,103433,103434,103436,103438,103440,103442,103444],{"class":129,"line":130},[127,103435,1584],{"class":147},[127,103437,101550],{"class":140},[127,103439,102304],{"class":143},[127,103441,725],{"class":147},[127,103443,63212],{"class":781},[127,103445,51846],{"class":147},[127,103447,103448,103450,103452],{"class":129,"line":137},[127,103449,52679],{"class":147},[127,103451,102370],{"class":140},[127,103453,51846],{"class":147},[127,103455,103456],{"class":129,"line":151},[127,103457,103458],{"class":147},"    ...\n",[127,103460,103461,103463,103465],{"class":129,"line":167},[127,103462,52952],{"class":147},[127,103464,102370],{"class":140},[127,103466,51846],{"class":147},[127,103468,103469,103471,103473],{"class":129,"line":415},[127,103470,52321],{"class":147},[127,103472,101550],{"class":140},[127,103474,51846],{"class":147},[19,103476,103477,103479,103480,103482,103483,103486],{},[124,103478,275],{}," 表示刚体。",[124,103481,101649],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[124,103484,103485],{},"joint"," 表示刚体相对父刚体如何运动。",[62,103488,103489],{"id":103489},"层级结构非常重要",[19,103491,103492],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[117,103494,103497],{"className":103495,"code":103496,"language":5729,"meta":122},[5727],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[124,103498,103496],{"__ignoreMap":122},[19,103500,103501,101547,103504,103507,103508,103511],{},[124,103502,103503],{},"red_box_geom",[124,103505,103506],{},"box_center"," 都属于 ",[124,103509,103510],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[117,103513,103515],{"className":53602,"code":103514,"language":53604,"meta":122,"style":122},"\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",[124,103516,103517,103537,103551,103571],{"__ignoreMap":122},[127,103518,103519,103521,103523,103525,103527,103529,103531,103533,103535],{"class":129,"line":130},[127,103520,1584],{"class":147},[127,103522,275],{"class":140},[127,103524,15462],{"class":143},[127,103526,725],{"class":147},[127,103528,54026],{"class":781},[127,103530,101635],{"class":143},[127,103532,725],{"class":147},[127,103534,101640],{"class":781},[127,103536,51846],{"class":147},[127,103538,103539,103541,103543,103545,103547,103549],{"class":129,"line":137},[127,103540,52679],{"class":147},[127,103542,102149],{"class":140},[127,103544,15462],{"class":143},[127,103546,725],{"class":147},[127,103548,102490],{"class":781},[127,103550,101673],{"class":147},[127,103552,103553,103555,103557,103559,103561,103563,103565,103567,103569],{"class":129,"line":151},[127,103554,52679],{"class":147},[127,103556,101649],{"class":140},[127,103558,54359],{"class":143},[127,103560,725],{"class":147},[127,103562,54026],{"class":781},[127,103564,101665],{"class":143},[127,103566,725],{"class":147},[127,103568,101670],{"class":781},[127,103570,101673],{"class":147},[127,103572,103573,103575,103577],{"class":129,"line":167},[127,103574,52321],{"class":147},[127,103576,275],{"class":140},[127,103578,51846],{"class":147},[19,103580,103581],{},"含义:",[632,103583,103584,103590,103595,103598],{},[635,103585,103586,103587,103589],{},"创建名为 ",[124,103588,54249],{}," 的刚体",[635,103591,103592,103593],{},"初始位置在世界坐标 ",[124,103594,101698],{},[635,103596,103597],{},"它有一个自由关节",[635,103599,103600],{},"它有一个盒子几何体",[62,103602,103603],{"id":103603},"坐标怎么理解",[19,103605,103606],{},"MuJoCo 默认使用三维坐标：",[117,103608,103611],{"className":103609,"code":103610,"language":5729,"meta":122},[5727],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[124,103612,103610],{"__ignoreMap":122},[19,103614,15175],{},[117,103616,103618],{"className":53602,"code":103617,"language":53604,"meta":122,"style":122},"pos=\"0 0 1\"\n",[124,103619,103620],{"__ignoreMap":122},[127,103621,103622],{"class":129,"line":130},[127,103623,103617],{"class":147},[19,103625,103626],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[62,103628,103630],{"id":103629},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103632,103633,103634,83059,103637,103639],{},"不同 ",[124,103635,103636],{},"type",[124,103638,32036],{}," 含义不同：",[814,103641,103642,103657],{},[817,103643,103644],{},[820,103645,103646,103650,103655],{},[823,103647,103648],{"align":24276},[124,103649,103636],{},[823,103651,103652,103654],{"align":24276},[124,103653,32036],{}," 示例",[823,103656,101229],{"align":24276},[860,103658,103659,103673,103688,103707],{},[820,103660,103661,103665,103670],{},[865,103662,103663],{"align":24276},[124,103664,54249],{},[865,103666,103667],{"align":24276},[124,103668,103669],{},"size=\"0.1 0.2 0.3\"",[865,103671,103672],{"align":24276},"x\u002Fy\u002Fz 半边长，不是完整长度",[820,103674,103675,103680,103685],{},[865,103676,103677],{"align":24276},[124,103678,103679],{},"sphere",[865,103681,103682],{"align":24276},[124,103683,103684],{},"size=\"0.1\"",[865,103686,103687],{"align":24276},"球半径",[820,103689,103690,103695,103700],{},[865,103691,103692],{"align":24276},[124,103693,103694],{},"capsule",[865,103696,103697],{"align":24276},[124,103698,103699],{},"size=\"0.03\"",[865,103701,103702,103703,103706],{"align":24276},"胶囊半径，长度常用 ",[124,103704,103705],{},"fromto"," 指定",[820,103708,103709,103714,103719],{},[865,103710,103711],{"align":24276},[124,103712,103713],{},"plane",[865,103715,103716],{"align":24276},[124,103717,103718],{},"size=\"3 3 0.1\"",[865,103720,103721],{"align":24276},"可视平面大小，通常当地面",[19,103723,103724,103725,103727,103728,103730],{},"最容易踩坑的是 box：",[124,103726,102553],{}," 表示边长大约是 ",[124,103729,32577],{},"，因为 MuJoCo 用的是半边长。",[62,103732,103734],{"id":103733},"site-是什么","site 是什么",[19,103736,103737,103740],{},[124,103738,103739],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[632,103742,103743,103746,103749,103752],{},[635,103744,103745],{},"标记机械臂末端。",[635,103747,103748],{},"标记目标位置。",[635,103750,103751],{},"放传感器或相机参考点。",[635,103753,103754],{},"在 Python 中读取某个关键点的世界坐标。",[19,103756,103757,103758,101547,103761,103764],{},"在后面的 Reacher 任务中，",[124,103759,103760],{},"tip",[124,103762,103763],{},"target"," 就会用 site 表示。",[14,103766,101782],{"id":101781},[117,103768,103770],{"className":30918,"code":103769,"language":30920,"meta":122,"style":122},"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",[124,103771,103772,103778,103788,103792,103796,103804,103809,103813,103817,103821,103826,103830,103835,103840,103845,103850,103854,103858,103862,103866,103870,103874,103886,103898,103906,103910,103925,103940,103944,103957,103972,103985,103998,104002,104018,104022,104026,104037,104049,104061,104073,104077,104081,104093],{"__ignoreMap":122},[127,103773,103774,103776],{"class":129,"line":130},[127,103775,30932],{"class":290},[127,103777,101830],{"class":147},[127,103779,103780,103782,103784,103786],{"class":129,"line":137},[127,103781,30932],{"class":290},[127,103783,31920],{"class":147},[127,103785,31923],{"class":290},[127,103787,31926],{"class":147},[127,103789,103790],{"class":129,"line":151},[127,103791,2942],{"emptyLinePlaceholder":606},[127,103793,103794],{"class":129,"line":167},[127,103795,2942],{"emptyLinePlaceholder":606},[127,103797,103798,103800,103802],{"class":129,"line":415},[127,103799,101843],{"class":154},[127,103801,14106],{"class":290},[127,103803,101848],{"class":781},[127,103805,103806],{"class":129,"line":421},[127,103807,103808],{"class":781},"\u003Cmujoco model=\"xml_basic\">\n",[127,103810,103811],{"class":129,"line":1766},[127,103812,101858],{"class":781},[127,103814,103815],{"class":129,"line":1856},[127,103816,2942],{"emptyLinePlaceholder":606},[127,103818,103819],{"class":129,"line":1862},[127,103820,101867],{"class":781},[127,103822,103823],{"class":129,"line":1874},[127,103824,103825],{"class":781},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[127,103827,103828],{"class":129,"line":2155},[127,103829,2942],{"emptyLinePlaceholder":606},[127,103831,103832],{"class":129,"line":2160},[127,103833,103834],{"class":781},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[127,103836,103837],{"class":129,"line":2166},[127,103838,103839],{"class":781},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[127,103841,103842],{"class":129,"line":2171},[127,103843,103844],{"class":781},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[127,103846,103847],{"class":129,"line":2185},[127,103848,103849],{"class":781},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[127,103851,103852],{"class":129,"line":2190},[127,103853,101896],{"class":781},[127,103855,103856],{"class":129,"line":2196},[127,103857,101901],{"class":781},[127,103859,103860],{"class":129,"line":2217},[127,103861,101906],{"class":781},[127,103863,103864],{"class":129,"line":2222},[127,103865,96227],{"class":781},[127,103867,103868],{"class":129,"line":2236},[127,103869,2942],{"emptyLinePlaceholder":606},[127,103871,103872],{"class":129,"line":2241},[127,103873,2942],{"emptyLinePlaceholder":606},[127,103875,103876,103878,103880,103882,103884],{"class":129,"line":2270},[127,103877,32487],{"class":290},[127,103879,2515],{"class":143},[127,103881,101927],{"class":147},[127,103883,96215],{"class":154},[127,103885,4281],{"class":147},[127,103887,103888,103890,103892,103894,103896],{"class":129,"line":2275},[127,103889,101936],{"class":147},[127,103891,725],{"class":290},[127,103893,101941],{"class":147},[127,103895,101843],{"class":154},[127,103897,687],{"class":147},[127,103899,103900,103902,103904],{"class":129,"line":2292},[127,103901,101950],{"class":147},[127,103903,725],{"class":290},[127,103905,101955],{"class":147},[127,103907,103908],{"class":129,"line":2297},[127,103909,2942],{"emptyLinePlaceholder":606},[127,103911,103912,103915,103917,103920,103923],{"class":129,"line":2302},[127,103913,103914],{"class":147},"    box_body_id ",[127,103916,725],{"class":290},[127,103918,103919],{"class":147}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[127,103921,103922],{"class":781},"\"red_box\"",[127,103924,687],{"class":147},[127,103926,103927,103930,103932,103935,103938],{"class":129,"line":2307},[127,103928,103929],{"class":147},"    site_id ",[127,103931,725],{"class":290},[127,103933,103934],{"class":147}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[127,103936,103937],{"class":781},"\"box_center\"",[127,103939,687],{"class":147},[127,103941,103942],{"class":129,"line":2321},[127,103943,2942],{"emptyLinePlaceholder":606},[127,103945,103946,103948,103951,103953,103955],{"class":129,"line":2326},[127,103947,3643],{"class":290},[127,103949,103950],{"class":147}," box_body_id ",[127,103952,1584],{"class":290},[127,103954,4635],{"class":154},[127,103956,4281],{"class":147},[127,103958,103959,103962,103965,103967,103970],{"class":129,"line":3119},[127,103960,103961],{"class":290},"        raise",[127,103963,103964],{"class":154}," RuntimeError",[127,103966,681],{"class":147},[127,103968,103969],{"class":781},"\"body red_box not found\"",[127,103971,687],{"class":147},[127,103973,103974,103976,103979,103981,103983],{"class":129,"line":3133},[127,103975,3643],{"class":290},[127,103977,103978],{"class":147}," site_id ",[127,103980,1584],{"class":290},[127,103982,4635],{"class":154},[127,103984,4281],{"class":147},[127,103986,103987,103989,103991,103993,103996],{"class":129,"line":3141},[127,103988,103961],{"class":290},[127,103990,103964],{"class":154},[127,103992,681],{"class":147},[127,103994,103995],{"class":781},"\"site box_center not found\"",[127,103997,687],{"class":147},[127,103999,104000],{"class":129,"line":3146},[127,104001,2942],{"emptyLinePlaceholder":606},[127,104003,104004,104006,104008,104010,104012,104014,104016],{"class":129,"line":3152},[127,104005,3743],{"class":290},[127,104007,102030],{"class":147},[127,104009,26584],{"class":290},[127,104011,32983],{"class":154},[127,104013,681],{"class":147},[127,104015,2265],{"class":154},[127,104017,31326],{"class":147},[127,104019,104020],{"class":129,"line":3158},[127,104021,102045],{"class":147},[127,104023,104024],{"class":129,"line":3163},[127,104025,2942],{"emptyLinePlaceholder":606},[127,104027,104028,104030,104032,104035],{"class":129,"line":8490},[127,104029,31839],{"class":154},[127,104031,681],{"class":147},[127,104033,104034],{"class":781},"\"simulation time:\"",[127,104036,102007],{"class":147},[127,104038,104039,104041,104043,104046],{"class":129,"line":8514},[127,104040,31839],{"class":154},[127,104042,681],{"class":147},[127,104044,104045],{"class":781},"\"box body position:\"",[127,104047,104048],{"class":147},", data.xpos[box_body_id].copy())\n",[127,104050,104051,104053,104055,104058],{"class":129,"line":8519},[127,104052,31839],{"class":154},[127,104054,681],{"class":147},[127,104056,104057],{"class":781},"\"site position:\"",[127,104059,104060],{"class":147},", data.site_xpos[site_id].copy())\n",[127,104062,104063,104065,104067,104070],{"class":129,"line":8525},[127,104064,31839],{"class":154},[127,104066,681],{"class":147},[127,104068,104069],{"class":781},"\"box qpos:\"",[127,104071,104072],{"class":147},", np.array(data.qpos))\n",[127,104074,104075],{"class":129,"line":8552},[127,104076,2942],{"emptyLinePlaceholder":606},[127,104078,104079],{"class":129,"line":8557},[127,104080,2942],{"emptyLinePlaceholder":606},[127,104082,104083,104085,104087,104089,104091],{"class":129,"line":8563},[127,104084,2075],{"class":290},[127,104086,31760],{"class":154},[127,104088,102088],{"class":290},[127,104090,102091],{"class":781},[127,104092,4281],{"class":147},[127,104094,104095],{"class":129,"line":8575},[127,104096,102098],{"class":147},[19,104098,104099],{},"保存为：",[117,104101,104103],{"className":24362,"code":104102,"language":24364,"meta":122,"style":122},"touch ch2_xml_basic.py\n",[124,104104,104105],{"__ignoreMap":122},[127,104106,104107,104109],{"class":129,"line":130},[127,104108,101812],{"class":143},[127,104110,104111],{"class":781}," ch2_xml_basic.py\n",[19,104113,102830],{},[117,104115,104117],{"className":24362,"code":104116,"language":24364,"meta":122,"style":122},"python ch2_xml_basic.py\n",[124,104118,104119],{"__ignoreMap":122},[127,104120,104121,104123],{"class":129,"line":130},[127,104122,30920],{"class":143},[127,104124,104111],{"class":781},[62,104126,102101],{"id":102101},[19,104128,104129],{},"用名字查找 body：",[117,104131,104133],{"className":30918,"code":104132,"language":30920,"meta":122,"style":122},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[124,104134,104135],{"__ignoreMap":122},[127,104136,104137,104140,104142,104144,104146],{"class":129,"line":130},[127,104138,104139],{"class":147},"box_body_id ",[127,104141,725],{"class":290},[127,104143,103919],{"class":147},[127,104145,103922],{"class":781},[127,104147,687],{"class":147},[19,104149,104150],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104152,104153],{},"用名字查找 site：",[117,104155,104157],{"className":30918,"code":104156,"language":30920,"meta":122,"style":122},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[124,104158,104159],{"__ignoreMap":122},[127,104160,104161,104164,104166,104168,104170],{"class":129,"line":130},[127,104162,104163],{"class":147},"site_id ",[127,104165,725],{"class":290},[127,104167,103934],{"class":147},[127,104169,103937],{"class":781},[127,104171,687],{"class":147},[19,104173,104174,104175,104178,104179,104182],{},"注意第二个参数是对象类型。查 body 就用 ",[124,104176,104177],{},"mjOBJ_BODY","，查 site 就用 ",[124,104180,104181],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104184,104185],{},"读取世界坐标：",[117,104187,104189],{"className":30918,"code":104188,"language":30920,"meta":122,"style":122},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[124,104190,104191,104196],{"__ignoreMap":122},[127,104192,104193],{"class":129,"line":130},[127,104194,104195],{"class":147},"data.xpos[box_body_id]\n",[127,104197,104198],{"class":129,"line":137},[127,104199,104200],{"class":147},"data.site_xpos[site_id]\n",[19,104202,104203,104206,104207,104210],{},[124,104204,104205],{},"xpos"," 是 body 的世界坐标，",[124,104208,104209],{},"site_xpos"," 是 site 的世界坐标。",[62,104212,102237],{"id":102237},[117,104214,104216],{"className":30918,"code":104215,"language":30920,"meta":122,"style":122},"import mujoco\nimport numpy as np\n",[124,104217,104218,104224],{"__ignoreMap":122},[127,104219,104220,104222],{"class":129,"line":130},[127,104221,30932],{"class":290},[127,104223,101830],{"class":147},[127,104225,104226,104228,104230,104232],{"class":129,"line":137},[127,104227,30932],{"class":290},[127,104229,31920],{"class":147},[127,104231,31923],{"class":290},[127,104233,31926],{"class":147},[19,104235,104236,104237,104240,104241,104244,104245,888,104248,28925],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[124,104238,104239],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[124,104242,104243],{},"as np"," 是习惯写法，后面就可以写 ",[124,104246,104247],{},"np.array(...)",[124,104249,104250],{},"np.round(...)",[117,104252,104253],{"className":30918,"code":102124,"language":30920,"meta":122,"style":122},[124,104254,104255,104263,104267],{"__ignoreMap":122},[127,104256,104257,104259,104261],{"class":129,"line":130},[127,104258,101843],{"class":154},[127,104260,14106],{"class":290},[127,104262,101848],{"class":781},[127,104264,104265],{"class":129,"line":137},[127,104266,102139],{"class":781},[127,104268,104269],{"class":129,"line":151},[127,104270,96227],{"class":781},[19,104272,104273,104274,28925],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[124,104275,104276],{},"mujoco.MjModel.from_xml_string(XML)",[117,104278,104280],{"className":53602,"code":104279,"language":53604,"meta":122,"style":122},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[124,104281,104282],{"__ignoreMap":122},[127,104283,104284,104286,104288,104290,104292,104294,104296,104298,104301,104303,104305,104308,104310,104312,104315],{"class":129,"line":130},[127,104285,1584],{"class":147},[127,104287,103739],{"class":140},[127,104289,15462],{"class":143},[127,104291,725],{"class":147},[127,104293,103937],{"class":781},[127,104295,101635],{"class":143},[127,104297,725],{"class":147},[127,104299,104300],{"class":781},"\"0 0 0\"",[127,104302,101665],{"class":143},[127,104304,725],{"class":147},[127,104306,104307],{"class":781},"\"0.03\"",[127,104309,79296],{"class":143},[127,104311,725],{"class":147},[127,104313,104314],{"class":781},"\"0 1 0 1\"",[127,104316,101673],{"class":147},[19,104318,104319,104321,104322,104325,104326,104328,104329,104332],{},[124,104320,103739],{}," 是标记点。",[124,104323,104324],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[124,104327,103699],{}," 表示显示出来的小球大小。",[124,104330,104331],{},"rgba=\"0 1 0 1\""," 表示绿色。",[117,104334,104335],{"className":30918,"code":104132,"language":30920,"meta":122,"style":122},[124,104336,104337],{"__ignoreMap":122},[127,104338,104339,104341,104343,104345,104347],{"class":129,"line":130},[127,104340,104139],{"class":147},[127,104342,725],{"class":290},[127,104344,103919],{"class":147},[127,104346,103922],{"class":781},[127,104348,687],{"class":147},[19,104350,104351,104352,104354],{},"这行的作用是：根据名字 ",[124,104353,103922],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104356,104357],{},"拆开看：",[632,104359,104360,104366,104371,104377],{},[635,104361,104362,104365],{},[124,104363,104364],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[635,104367,104368,104370],{},[124,104369,102614],{}," 是被查询的模型。",[635,104372,104373,104376],{},[124,104374,104375],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[635,104378,104379,104381],{},[124,104380,103922],{}," 是 XML 里写的名字。",[117,104383,104384],{"className":30918,"code":104156,"language":30920,"meta":122,"style":122},[124,104385,104386],{"__ignoreMap":122},[127,104387,104388,104390,104392,104394,104396],{"class":129,"line":130},[127,104389,104163],{"class":147},[127,104391,725],{"class":290},[127,104393,103934],{"class":147},[127,104395,103937],{"class":781},[127,104397,687],{"class":147},[19,104399,104400,104401,28925],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[124,104402,103937],{},[117,104404,104406],{"className":30918,"code":104405,"language":30920,"meta":122,"style":122},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[124,104407,104408,104420],{"__ignoreMap":122},[127,104409,104410,104412,104414,104416,104418],{"class":129,"line":130},[127,104411,2075],{"class":290},[127,104413,103950],{"class":147},[127,104415,1584],{"class":290},[127,104417,4635],{"class":154},[127,104419,4281],{"class":147},[127,104421,104422,104425,104427,104429,104431],{"class":129,"line":137},[127,104423,104424],{"class":290},"    raise",[127,104426,103964],{"class":154},[127,104428,681],{"class":147},[127,104430,103969],{"class":781},[127,104432,687],{"class":147},[19,104434,104435,104437,104438,104441,104442,104445,104446,104449],{},[124,104436,2075],{}," 是条件判断。",[124,104439,104440],{},"mj_name2id"," 找不到对象时会返回 ",[124,104443,104444],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[124,104447,104448],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[117,104451,104453],{"className":30918,"code":104452,"language":30920,"meta":122,"style":122},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[124,104454,104455,104471],{"__ignoreMap":122},[127,104456,104457,104459,104461,104463,104465,104467,104469],{"class":129,"line":130},[127,104458,3567],{"class":290},[127,104460,102030],{"class":147},[127,104462,26584],{"class":290},[127,104464,32983],{"class":154},[127,104466,681],{"class":147},[127,104468,2265],{"class":154},[127,104470,31326],{"class":147},[127,104472,104473],{"class":129,"line":137},[127,104474,102228],{"class":147},[19,104476,104477],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[117,104479,104481],{"className":30918,"code":104480,"language":30920,"meta":122,"style":122},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[124,104482,104483],{"__ignoreMap":122},[127,104484,104485,104487,104489,104491],{"class":129,"line":130},[127,104486,30955],{"class":154},[127,104488,681],{"class":147},[127,104490,104045],{"class":781},[127,104492,104048],{"class":147},[19,104494,104495,104497,104498,104501],{},[124,104496,101608],{}," 保存所有 body 的世界坐标。",[124,104499,104500],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[117,104503,104505],{"className":30918,"code":104504,"language":30920,"meta":122,"style":122},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[124,104506,104507],{"__ignoreMap":122},[127,104508,104509,104511,104513,104515],{"class":129,"line":130},[127,104510,30955],{"class":154},[127,104512,681],{"class":147},[127,104514,104057],{"class":781},[127,104516,104060],{"class":147},[19,104518,104519,104522,104523,104525],{},[124,104520,104521],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[124,104524,103506],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[117,104527,104529],{"className":30918,"code":104528,"language":30920,"meta":122,"style":122},"print(\"box qpos:\", np.array(data.qpos))\n",[124,104530,104531],{"__ignoreMap":122},[127,104532,104533,104535,104537,104539],{"class":129,"line":130},[127,104534,30955],{"class":154},[127,104536,681],{"class":147},[127,104538,104069],{"class":781},[127,104540,104072],{"class":147},[19,104542,104543,104544,104547],{},"这里打印广义位置数组。",[124,104545,104546],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104549,102845],{"id":102844},[19,104551,104552,104553,104556,104557,28925],{},"程序会输出 ",[124,104554,104555],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[124,104558,104559],{},"qpos",[19,104561,104562,104564,104565,104568,104569,104572],{},[124,104563,104500],{}," 是 body 的世界坐标位置。",[124,104566,104567],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[124,104570,104571],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104574,82751,104575,83059,104577,104579],{},[124,104576,103506],{},[124,104578,104324],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104581,104582],{},"如果你把 site 改成：",[117,104584,104586],{"className":53602,"code":104585,"language":53604,"meta":122,"style":122},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[124,104587,104588],{"__ignoreMap":122},[127,104589,104590,104592,104594,104596,104598,104601,104603,104605,104608,104610,104612,104614,104616,104618,104620],{"class":129,"line":130},[127,104591,1584],{"class":147},[127,104593,103739],{"class":140},[127,104595,15462],{"class":143},[127,104597,725],{"class":147},[127,104599,104600],{"class":781},"\"box_top\"",[127,104602,101635],{"class":143},[127,104604,725],{"class":147},[127,104606,104607],{"class":781},"\"0 0 0.15\"",[127,104609,101665],{"class":143},[127,104611,725],{"class":147},[127,104613,104307],{"class":781},[127,104615,79296],{"class":143},[127,104617,725],{"class":147},[127,104619,104314],{"class":781},[127,104621,101673],{"class":147},[19,104623,104624,104625,104628],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[124,104626,104627],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104630,102877],{"id":102876},[632,104632,104633,104642,104645,104652,104658,104669],{},[635,104634,102940,104635,104637,104638,102943,104640,28925],{},[124,104636,103510],{}," 的初始高度从 ",[124,104639,893],{},[124,104641,530],{},[635,104643,104644],{},"重新运行程序。",[635,104646,104647,104648,104651],{},"观察 ",[124,104649,104650],{},"box qpos"," 和最终位置是否变化。",[635,104653,104654,104655,104657],{},"故意把 ",[124,104656,103739],{}," 名称改错，确认程序能报错。",[635,104659,102940,104660,104662,104663,102943,104665,104668],{},[124,104661,101649],{}," 的颜色 ",[124,104664,102561],{},[124,104666,104667],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[635,104670,102940,104671,83059,104673,102943,104676,104679,104680,104682],{},[124,104672,103506],{},[124,104674,104675],{},"pos",[124,104677,104678],{},"0 0 0.2","，观察 ",[124,104681,104627],{}," 如何变化。",[14,104684,102982],{"id":102981},[62,104686,104688],{"id":104687},"xml-error-schema-violation",[124,104689,104690],{},"XML Error: Schema violation",[19,104692,104693],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[62,104695,104697,81819,104699],{"id":104696},"mj_name2id-返回-1",[124,104698,104440],{},[124,104700,104444],{},[19,104702,104703,104704,104707],{},"说明名字没有找到。检查 XML 中 ",[124,104705,104706],{},"name=\"...\"","，并确认对象类型正确。",[62,104709,104710],{"id":104710},"物体不下落",[19,104712,103052],{},[632,104714,104715,104720,104725],{},[635,104716,104717,104718],{},"body 是否有 ",[124,104719,102149],{},[635,104721,104722,104723],{},"gravity 是否为 ",[124,104724,103118],{},[635,104726,104727,104728,104730],{},"body 是否被固定在 ",[124,104729,102370],{}," 中",[62,104732,104733],{"id":104733},"坐标看起来不符合预期",[19,104735,104736],{},"先区分两种坐标：",[814,104738,104739,104748],{},[817,104740,104741],{},[820,104742,104743,104746],{},[823,104744,104745],{"align":24276},"坐标",[823,104747,101229],{"align":24276},[860,104749,104750,104760],{},[820,104751,104752,104757],{},[865,104753,104754,104755],{"align":24276},"XML 里的 ",[124,104756,104675],{},[865,104758,104759],{"align":24276},"相对父 body 的局部坐标",[820,104761,104762,104768],{},[865,104763,104764,25519,104766],{"align":24276},[124,104765,101608],{},[124,104767,104521],{},[865,104769,104770],{"align":24276},"仿真更新后的世界坐标",[19,104772,104773,104774,104776,104777,83068,104780,104782],{},"如果你修改了 ",[124,104775,101599],{},"，但还没调用 ",[124,104778,104779],{},"mj_forward",[124,104781,101744],{},"，世界坐标可能还没有更新。",[14,104784,103136],{"id":103135},[19,104786,104787],{},"MJCF 建模先掌握四件事：",[632,104789,104790,104795,104800,104805],{},[635,104791,104792,104794],{},[124,104793,275],{}," 表示刚体层级。",[635,104796,104797,104799],{},[124,104798,101649],{}," 表示形状、碰撞和质量。",[635,104801,104802,104804],{},[124,104803,103485],{}," 决定 body 能不能动、怎么动。",[635,104806,104807,104809],{},[124,104808,103739],{}," 用来标记关键点，方便 Python 读取位置。",[19,104811,104812],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[575,104814,104815],{},"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":122,"searchDepth":137,"depth":137,"links":104817},[104818,104819,104820,104826,104830,104831,104832,104839],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":104821},[104822,104823,104824,104825],{"id":103489,"depth":151,"text":103489},{"id":103603,"depth":151,"text":103603},{"id":103629,"depth":151,"text":103630},{"id":103733,"depth":151,"text":103734},{"id":101781,"depth":137,"text":101782,"children":104827},[104828,104829],{"id":102101,"depth":151,"text":102101},{"id":102237,"depth":151,"text":102237},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":104833},[104834,104835,104837,104838],{"id":104687,"depth":151,"text":104690},{"id":104696,"depth":151,"text":104836},"mj_name2id 返回 -1",{"id":104710,"depth":151,"text":104710},{"id":104733,"depth":151,"text":104733},{"id":103135,"depth":137,"text":103136},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103183,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104846,"title":104847,"body":104848,"description":122,"extension":604,"meta":106343,"navigation":606,"path":106344,"seo":106345,"stem":106346,"__hash__":106347},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104849,"toc":106315},[104850,104853,104855,104858,104861,104899,104902,104908,104911,104913,104915,104942,104944,104958,104960,105001,105003,105027,105029,105032,105041,105050,105053,105062,105070,105079,105082,105092,105095,105147,105154,105160,105168,105216,105219,105238,105241,105249,105253,105262,105295,105297,105645,105647,105659,105661,105672,105674,105677,105698,105704,105707,105732,105742,105745,105753,105756,105759,105780,105791,105793,105813,105816,105837,105846,105865,105871,105896,105899,105913,105920,105944,105947,105955,105964,105980,105992,106000,106009,106011,106014,106038,106043,106046,106068,106070,106109,106111,106118,106120,106128,106131,106134,106146,106187,106194,106205,106212,106215,106264,106267,106270,106276,106278,106283,106309,106312],[10,104851,104847],{"id":104852},"_3python-控制接口读取状态与推进仿真",[14,104854,101176],{"id":101175},[19,104856,104857],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104859,104860],{},"你将学习:",[632,104862,104863,104868,104873,104877,104882,104893],{},[635,104864,104865],{},[124,104866,104867],{},"MjModel.from_xml_string",[635,104869,104870],{},[124,104871,104872],{},"MjData(model)",[635,104874,104875],{},[124,104876,101744],{},[635,104878,104879],{},[124,104880,104881],{},"mj_resetData",[635,104883,104884,104885,888,104887,888,104890],{},"读取 ",[124,104886,104559],{},[124,104888,104889],{},"qvel",[124,104891,104892],{},"ctrl",[635,104894,104895,104896],{},"使用 ",[124,104897,104898],{},"model.opt.timestep",[19,104900,104901],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[117,104903,104906],{"className":104904,"code":104905,"language":5729,"meta":122},[5727],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[124,104907,104905],{"__ignoreMap":122},[19,104909,104910],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104912,101299],{"id":101298},[19,104914,101302],{},[117,104916,104918],{"className":24362,"code":104917,"language":24364,"meta":122,"style":122},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[124,104919,104920],{"__ignoreMap":122},[127,104921,104922,104924,104926,104928,104930,104933,104935,104937,104939],{"class":129,"line":130},[127,104923,25117],{"class":143},[127,104925,26856],{"class":781},[127,104927,24374],{"class":781},[127,104929,26941],{"class":154},[127,104931,104932],{"class":781}," python3",[127,104934,101327],{"class":781},[127,104936,103030],{"class":781},[127,104938,101343],{"class":781},[127,104940,104941],{"class":781}," glfw\n",[19,104943,103348],{},[117,104945,104946],{"className":24362,"code":101448,"language":24364,"meta":122,"style":122},[124,104947,104948],{"__ignoreMap":122},[127,104949,104950,104952,104954,104956],{"class":129,"line":130},[127,104951,24371],{"class":143},[127,104953,24374],{"class":781},[127,104955,101459],{"class":781},[127,104957,101462],{"class":781},[19,104959,103365],{},[117,104961,104963],{"className":24362,"code":104962,"language":24364,"meta":122,"style":122},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[124,104964,104965,104982,104991],{"__ignoreMap":122},[127,104966,104967,104969,104971,104973,104976,104978,104980],{"class":129,"line":130},[127,104968,30870],{"class":143},[127,104970,29716],{"class":781},[127,104972,25656],{"class":154},[127,104974,104975],{"class":781}," mujoco-python-api",[127,104977,101504],{"class":781},[127,104979,101507],{"class":154},[127,104981,101510],{"class":154},[127,104983,104984,104986,104988],{"class":129,"line":137},[127,104985,30870],{"class":143},[127,104987,101517],{"class":781},[127,104989,104990],{"class":781}," mujoco-python-api\n",[127,104992,104993,104995,104997,104999],{"class":129,"line":151},[127,104994,24371],{"class":143},[127,104996,24374],{"class":781},[127,104998,101459],{"class":781},[127,105000,101462],{"class":781},[19,105002,101533],{},[632,105004,105005,105012,105021],{},[635,105006,105007,101547,105009,105011],{},[124,105008,101204],{},[124,105010,101209],{}," 是官方 Python bindings 的类名。",[635,105013,105014,105015,105018,105019,28925],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[124,105016,105017],{},"mjModel"," 在 Python 中是 ",[124,105020,101238],{},[635,105022,105023,105024,28925],{},"不要使用 ",[124,105025,105026],{},"sim = mujoco_py.MjSim(...)",[14,105028,101574],{"id":101573},[19,105030,105031],{},"仿真推进核心代码:",[117,105033,105035],{"className":30918,"code":105034,"language":30920,"meta":122,"style":122},"mujoco.mj_step(model, data)\n",[124,105036,105037],{"__ignoreMap":122},[127,105038,105039],{"class":129,"line":130},[127,105040,105034],{"class":147},[19,105042,105043,105044,888,105046,888,105048,28925],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[124,105045,101599],{},[124,105047,101602],{},[124,105049,101596],{},[19,105051,105052],{},"重置仿真:",[117,105054,105056],{"className":30918,"code":105055,"language":30920,"meta":122,"style":122},"mujoco.mj_resetData(model, data)\n",[124,105057,105058],{"__ignoreMap":122},[127,105059,105060],{"class":129,"line":130},[127,105061,105055],{"class":147},[19,105063,105064,105065,83068,105067,105069],{},"如果手动修改了 ",[124,105066,101599],{},[124,105068,101602],{},"，通常应调用:",[117,105071,105073],{"className":30918,"code":105072,"language":30920,"meta":122,"style":122},"mujoco.mj_forward(model, data)\n",[124,105074,105075],{"__ignoreMap":122},[127,105076,105077],{"class":129,"line":130},[127,105078,105072],{"class":147},[19,105080,105081],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[62,105083,105085,888,105087,888,105089,105091],{"id":105084},"qposqvelctrl-是什么",[124,105086,104559],{},[124,105088,104889],{},[124,105090,104892],{}," 是什么",[19,105093,105094],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[814,105096,105097,105109],{},[817,105098,105099],{},[820,105100,105101,105104,105106],{},[823,105102,105103],{"align":24276},"字段",[823,105105,101229],{"align":24276},[823,105107,105108],{"align":24276},"谁来修改",[860,105110,105111,105123,105135],{},[820,105112,105113,105117,105120],{},[865,105114,105115],{"align":24276},[124,105116,101599],{},[865,105118,105119],{"align":24276},"广义位置，例如小车位置、关节角、自由物体位置姿态",[865,105121,105122],{"align":24276},"MuJoCo 更新，也可以手动设置初始状态",[820,105124,105125,105129,105132],{},[865,105126,105127],{"align":24276},[124,105128,101602],{},[865,105130,105131],{"align":24276},"广义速度，例如小车速度、关节角速度",[865,105133,105134],{"align":24276},"MuJoCo 更新，也可以手动清零",[820,105136,105137,105141,105144],{},[865,105138,105139],{"align":24276},[124,105140,101605],{},[865,105142,105143],{"align":24276},"actuator 的控制输入",[865,105145,105146],{"align":24276},"主要由你的控制代码写入",[19,105148,9567,105149,101547,105151,105153],{},[124,105150,104559],{},[124,105152,104889],{}," 不一定同维。自由刚体就是典型例子：",[117,105155,105158],{"className":105156,"code":105157,"language":5729,"meta":122},[5727],"freejoint: qpos 7 维，qvel 6 维\n",[124,105159,105157],{"__ignoreMap":122},[62,105161,105163,101547,105165,105167],{"id":105162},"mj_step-和-mj_forward-的区别",[124,105164,101744],{},[124,105166,104779],{}," 的区别",[814,105169,105170,105183],{},[817,105171,105172],{},[820,105173,105174,105177,105180],{},[823,105175,105176],{"align":24276},"函数",[823,105178,105179],{"align":24276},"是否推进时间",[823,105181,105182],{"align":24276},"什么时候用",[860,105184,105185,105198],{},[820,105186,105187,105192,105195],{},[865,105188,105189],{"align":24276},[124,105190,105191],{},"mj_step(model, data)",[865,105193,105194],{"align":24276},"是",[865,105196,105197],{"align":24276},"正常仿真循环，每调用一次前进一步",[820,105199,105200,105205,105208],{},[865,105201,105202],{"align":24276},[124,105203,105204],{},"mj_forward(model, data)",[865,105206,105207],{"align":24276},"否",[865,105209,105210,105211,888,105213,105215],{"align":24276},"手动改了 ",[124,105212,104559],{},[124,105214,104889],{}," 后，刷新派生量",[19,105217,105218],{},"例如你写：",[117,105220,105222],{"className":30918,"code":105221,"language":30920,"meta":122,"style":122},"data.qpos[2] = 2.0\n",[124,105223,105224],{"__ignoreMap":122},[127,105225,105226,105229,105231,105233,105235],{"class":129,"line":130},[127,105227,105228],{"class":147},"data.qpos[",[127,105230,530],{"class":154},[127,105232,4985],{"class":147},[127,105234,725],{"class":290},[127,105236,105237],{"class":154}," 2.0\n",[19,105239,105240],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[117,105242,105243],{"className":30918,"code":105072,"language":30920,"meta":122,"style":122},[124,105244,105245],{"__ignoreMap":122},[127,105246,105247],{"class":129,"line":130},[127,105248,105072],{"class":147},[62,105250,105252],{"id":105251},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105254,105255,105258,105259,105261],{},[124,105256,105257],{},"mujoco.mj_resetData(model, data)"," 会把 ",[124,105260,33941],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[117,105263,105265],{"className":30918,"code":105264,"language":30920,"meta":122,"style":122},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[124,105266,105267,105271,105281,105291],{"__ignoreMap":122},[127,105268,105269],{"class":129,"line":130},[127,105270,105055],{"class":147},[127,105272,105273,105276,105278],{"class":129,"line":137},[127,105274,105275],{"class":147},"data.qpos[:] ",[127,105277,725],{"class":290},[127,105279,105280],{"class":147}," random_qpos\n",[127,105282,105283,105286,105288],{"class":129,"line":151},[127,105284,105285],{"class":147},"data.qvel[:] ",[127,105287,725],{"class":290},[127,105289,105290],{"class":154}," 0.0\n",[127,105292,105293],{"class":129,"line":167},[127,105294,105072],{"class":147},[14,105296,101782],{"id":101781},[117,105298,105300],{"className":30918,"code":105299,"language":30920,"meta":122,"style":122},"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",[124,105301,105302,105308,105318,105322,105326,105334,105339,105343,105347,105351,105356,105360,105365,105370,105375,105379,105383,105387,105391,105395,105399,105418,105425,105437,105448,105464,105480,105484,105488,105500,105512,105520,105524,105535,105539,105555,105559,105563,105572,105576,105581,105590,105594,105607,105612,105621,105625,105629,105641],{"__ignoreMap":122},[127,105303,105304,105306],{"class":129,"line":130},[127,105305,30932],{"class":290},[127,105307,101830],{"class":147},[127,105309,105310,105312,105314,105316],{"class":129,"line":137},[127,105311,30932],{"class":290},[127,105313,31920],{"class":147},[127,105315,31923],{"class":290},[127,105317,31926],{"class":147},[127,105319,105320],{"class":129,"line":151},[127,105321,2942],{"emptyLinePlaceholder":606},[127,105323,105324],{"class":129,"line":167},[127,105325,2942],{"emptyLinePlaceholder":606},[127,105327,105328,105330,105332],{"class":129,"line":415},[127,105329,101843],{"class":154},[127,105331,14106],{"class":290},[127,105333,101848],{"class":781},[127,105335,105336],{"class":129,"line":421},[127,105337,105338],{"class":781},"\u003Cmujoco model=\"state_api\">\n",[127,105340,105341],{"class":129,"line":1766},[127,105342,101858],{"class":781},[127,105344,105345],{"class":129,"line":1856},[127,105346,2942],{"emptyLinePlaceholder":606},[127,105348,105349],{"class":129,"line":1862},[127,105350,101867],{"class":781},[127,105352,105353],{"class":129,"line":1874},[127,105354,105355],{"class":781},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[127,105357,105358],{"class":129,"line":2155},[127,105359,2942],{"emptyLinePlaceholder":606},[127,105361,105362],{"class":129,"line":2160},[127,105363,105364],{"class":781},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[127,105366,105367],{"class":129,"line":2166},[127,105368,105369],{"class":781},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[127,105371,105372],{"class":129,"line":2171},[127,105373,105374],{"class":781},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[127,105376,105377],{"class":129,"line":2185},[127,105378,101896],{"class":781},[127,105380,105381],{"class":129,"line":2190},[127,105382,101901],{"class":781},[127,105384,105385],{"class":129,"line":2196},[127,105386,101906],{"class":781},[127,105388,105389],{"class":129,"line":2217},[127,105390,96227],{"class":781},[127,105392,105393],{"class":129,"line":2222},[127,105394,2942],{"emptyLinePlaceholder":606},[127,105396,105397],{"class":129,"line":2236},[127,105398,2942],{"emptyLinePlaceholder":606},[127,105400,105401,105403,105406,105409,105411,105414,105416],{"class":129,"line":2241},[127,105402,32487],{"class":290},[127,105404,105405],{"class":143}," print_state",[127,105407,105408],{"class":147},"(prefix: ",[127,105410,1844],{"class":154},[127,105412,105413],{"class":147},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[127,105415,96215],{"class":154},[127,105417,4281],{"class":147},[127,105419,105420,105422],{"class":129,"line":2270},[127,105421,31839],{"class":154},[127,105423,105424],{"class":147},"(prefix)\n",[127,105426,105427,105429,105431,105434],{"class":129,"line":2275},[127,105428,31839],{"class":154},[127,105430,681],{"class":147},[127,105432,105433],{"class":781},"\"  timestep:\"",[127,105435,105436],{"class":147},", model.opt.timestep)\n",[127,105438,105439,105441,105443,105446],{"class":129,"line":2292},[127,105440,31839],{"class":154},[127,105442,681],{"class":147},[127,105444,105445],{"class":781},"\"  time:\"",[127,105447,102007],{"class":147},[127,105449,105450,105452,105454,105457,105460,105462],{"class":129,"line":2297},[127,105451,31839],{"class":154},[127,105453,681],{"class":147},[127,105455,105456],{"class":781},"\"  qpos:\"",[127,105458,105459],{"class":147},", np.round(data.qpos.copy(), ",[127,105461,968],{"class":154},[127,105463,31037],{"class":147},[127,105465,105466,105468,105470,105473,105476,105478],{"class":129,"line":2302},[127,105467,31839],{"class":154},[127,105469,681],{"class":147},[127,105471,105472],{"class":781},"\"  qvel:\"",[127,105474,105475],{"class":147},", np.round(data.qvel.copy(), ",[127,105477,968],{"class":154},[127,105479,31037],{"class":147},[127,105481,105482],{"class":129,"line":2307},[127,105483,2942],{"emptyLinePlaceholder":606},[127,105485,105486],{"class":129,"line":2321},[127,105487,2942],{"emptyLinePlaceholder":606},[127,105489,105490,105492,105494,105496,105498],{"class":129,"line":2326},[127,105491,32487],{"class":290},[127,105493,2515],{"class":143},[127,105495,101927],{"class":147},[127,105497,96215],{"class":154},[127,105499,4281],{"class":147},[127,105501,105502,105504,105506,105508,105510],{"class":129,"line":3119},[127,105503,101936],{"class":147},[127,105505,725],{"class":290},[127,105507,101941],{"class":147},[127,105509,101843],{"class":154},[127,105511,687],{"class":147},[127,105513,105514,105516,105518],{"class":129,"line":3133},[127,105515,101950],{"class":147},[127,105517,725],{"class":290},[127,105519,101955],{"class":147},[127,105521,105522],{"class":129,"line":3141},[127,105523,2942],{"emptyLinePlaceholder":606},[127,105525,105526,105529,105532],{"class":129,"line":3146},[127,105527,105528],{"class":147},"    print_state(",[127,105530,105531],{"class":781},"\"initial\"",[127,105533,105534],{"class":147},", model, data)\n",[127,105536,105537],{"class":129,"line":3152},[127,105538,2942],{"emptyLinePlaceholder":606},[127,105540,105541,105543,105545,105547,105549,105551,105553],{"class":129,"line":3158},[127,105542,3743],{"class":290},[127,105544,102030],{"class":147},[127,105546,26584],{"class":290},[127,105548,32983],{"class":154},[127,105550,681],{"class":147},[127,105552,1330],{"class":154},[127,105554,31326],{"class":147},[127,105556,105557],{"class":129,"line":3163},[127,105558,102045],{"class":147},[127,105560,105561],{"class":129,"line":8490},[127,105562,2942],{"emptyLinePlaceholder":606},[127,105564,105565,105567,105570],{"class":129,"line":8514},[127,105566,105528],{"class":147},[127,105568,105569],{"class":781},"\"after 50 steps\"",[127,105571,105534],{"class":147},[127,105573,105574],{"class":129,"line":8519},[127,105575,2942],{"emptyLinePlaceholder":606},[127,105577,105578],{"class":129,"line":8525},[127,105579,105580],{"class":147},"    mujoco.mj_resetData(model, data)\n",[127,105582,105583,105585,105588],{"class":129,"line":8552},[127,105584,105528],{"class":147},[127,105586,105587],{"class":781},"\"after reset\"",[127,105589,105534],{"class":147},[127,105591,105592],{"class":129,"line":8557},[127,105593,2942],{"emptyLinePlaceholder":606},[127,105595,105596,105599,105601,105603,105605],{"class":129,"line":8563},[127,105597,105598],{"class":147},"    data.qpos[",[127,105600,530],{"class":154},[127,105602,4985],{"class":147},[127,105604,725],{"class":290},[127,105606,105237],{"class":154},[127,105608,105609],{"class":129,"line":8575},[127,105610,105611],{"class":147},"    mujoco.mj_forward(model, data)\n",[127,105613,105614,105616,105619],{"class":129,"line":8587},[127,105615,105528],{"class":147},[127,105617,105618],{"class":781},"\"after manual qpos edit\"",[127,105620,105534],{"class":147},[127,105622,105623],{"class":129,"line":8599},[127,105624,2942],{"emptyLinePlaceholder":606},[127,105626,105627],{"class":129,"line":10258},[127,105628,2942],{"emptyLinePlaceholder":606},[127,105630,105631,105633,105635,105637,105639],{"class":129,"line":10283},[127,105632,2075],{"class":290},[127,105634,31760],{"class":154},[127,105636,102088],{"class":290},[127,105638,102091],{"class":781},[127,105640,4281],{"class":147},[127,105642,105643],{"class":129,"line":10306},[127,105644,102098],{"class":147},[19,105646,104099],{},[117,105648,105650],{"className":24362,"code":105649,"language":24364,"meta":122,"style":122},"touch ch3_python_state.py\n",[124,105651,105652],{"__ignoreMap":122},[127,105653,105654,105656],{"class":129,"line":130},[127,105655,101812],{"class":143},[127,105657,105658],{"class":781}," ch3_python_state.py\n",[19,105660,102830],{},[117,105662,105664],{"className":24362,"code":105663,"language":24364,"meta":122,"style":122},"python ch3_python_state.py\n",[124,105665,105666],{"__ignoreMap":122},[127,105667,105668,105670],{"class":129,"line":130},[127,105669,30920],{"class":143},[127,105671,105658],{"class":781},[62,105673,102101],{"id":102101},[19,105675,105676],{},"打印状态的函数：",[117,105678,105680],{"className":30918,"code":105679,"language":30920,"meta":122,"style":122},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[124,105681,105682],{"__ignoreMap":122},[127,105683,105684,105686,105688,105690,105692,105694,105696],{"class":129,"line":130},[127,105685,32487],{"class":290},[127,105687,105405],{"class":143},[127,105689,105408],{"class":147},[127,105691,1844],{"class":154},[127,105693,105413],{"class":147},[127,105695,96215],{"class":154},[127,105697,4281],{"class":147},[19,105699,105700,105701,105703],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[124,105702,33941],{}," 里发生了什么。",[19,105705,105706],{},"推进 50 步：",[117,105708,105710],{"className":30918,"code":105709,"language":30920,"meta":122,"style":122},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[124,105711,105712,105728],{"__ignoreMap":122},[127,105713,105714,105716,105718,105720,105722,105724,105726],{"class":129,"line":130},[127,105715,3567],{"class":290},[127,105717,102030],{"class":147},[127,105719,26584],{"class":290},[127,105721,32983],{"class":154},[127,105723,681],{"class":147},[127,105725,1330],{"class":154},[127,105727,31326],{"class":147},[127,105729,105730],{"class":129,"line":137},[127,105731,102228],{"class":147},[19,105733,105734,105735,105738,105739,105741],{},"由于 ",[124,105736,105737],{},"timestep=0.01","，所以 50 步后时间约为 ",[124,105740,35869],{}," 秒。",[19,105743,105744],{},"重置：",[117,105746,105747],{"className":30918,"code":105055,"language":30920,"meta":122,"style":122},[124,105748,105749],{"__ignoreMap":122},[127,105750,105751],{"class":129,"line":130},[127,105752,105055],{"class":147},[19,105754,105755],{},"这会把时间、位置、速度恢复到初始状态。",[19,105757,105758],{},"手动改高度：",[117,105760,105762],{"className":30918,"code":105761,"language":30920,"meta":122,"style":122},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[124,105763,105764,105776],{"__ignoreMap":122},[127,105765,105766,105768,105770,105772,105774],{"class":129,"line":130},[127,105767,105228],{"class":147},[127,105769,530],{"class":154},[127,105771,4985],{"class":147},[127,105773,725],{"class":290},[127,105775,105237],{"class":154},[127,105777,105778],{"class":129,"line":137},[127,105779,105072],{"class":147},[19,105781,105782,105783,105786,105787,105790],{},"这个例子里 ",[124,105784,105785],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[124,105788,105789],{},"2.0"," 表示把小球放到更高的位置。",[62,105792,102237],{"id":102237},[117,105794,105795],{"className":30918,"code":105679,"language":30920,"meta":122,"style":122},[124,105796,105797],{"__ignoreMap":122},[127,105798,105799,105801,105803,105805,105807,105809,105811],{"class":129,"line":130},[127,105800,32487],{"class":290},[127,105802,105405],{"class":143},[127,105804,105408],{"class":147},[127,105806,1844],{"class":154},[127,105808,105413],{"class":147},[127,105810,96215],{"class":154},[127,105812,4281],{"class":147},[19,105814,105815],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[632,105817,105818,105827,105832],{},[635,105819,105820,105823,105824,105826],{},[124,105821,105822],{},"prefix","：一段文字，比如 ",[124,105825,105531],{},"，用来说明现在打印的是哪个阶段。",[635,105828,105829,105831],{},[124,105830,102614],{},"：MuJoCo 模型。",[635,105833,105834,105836],{},[124,105835,33941],{},"：MuJoCo 当前状态。",[19,105838,105839,888,105842,105845],{},[124,105840,105841],{},"prefix: str",[124,105843,105844],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[117,105847,105849],{"className":30918,"code":105848,"language":30920,"meta":122,"style":122},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[124,105850,105851],{"__ignoreMap":122},[127,105852,105853,105855,105857,105859,105861,105863],{"class":129,"line":130},[127,105854,30955],{"class":154},[127,105856,681],{"class":147},[127,105858,105456],{"class":781},[127,105860,105459],{"class":147},[127,105862,968],{"class":154},[127,105864,31037],{"class":147},[19,105866,105867,105870],{},[124,105868,105869],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[117,105872,105874],{"className":30918,"code":105873,"language":30920,"meta":122,"style":122},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[124,105875,105876,105888],{"__ignoreMap":122},[127,105877,105878,105880,105882,105884,105886],{"class":129,"line":130},[127,105879,102163],{"class":147},[127,105881,725],{"class":290},[127,105883,101941],{"class":147},[127,105885,101843],{"class":154},[127,105887,687],{"class":147},[127,105889,105890,105892,105894],{"class":129,"line":137},[127,105891,102187],{"class":147},[127,105893,725],{"class":290},[127,105895,101955],{"class":147},[19,105897,105898],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[117,105900,105902],{"className":30918,"code":105901,"language":30920,"meta":122,"style":122},"print_state(\"initial\", model, data)\n",[124,105903,105904],{"__ignoreMap":122},[127,105905,105906,105909,105911],{"class":129,"line":130},[127,105907,105908],{"class":147},"print_state(",[127,105910,105531],{"class":781},[127,105912,105534],{"class":147},[19,105914,105915,105916,105919],{},"调用刚才定义的 ",[124,105917,105918],{},"print_state"," 函数，打印初始状态。",[117,105921,105922],{"className":30918,"code":105709,"language":30920,"meta":122,"style":122},[124,105923,105924,105940],{"__ignoreMap":122},[127,105925,105926,105928,105930,105932,105934,105936,105938],{"class":129,"line":130},[127,105927,3567],{"class":290},[127,105929,102030],{"class":147},[127,105931,26584],{"class":290},[127,105933,32983],{"class":154},[127,105935,681],{"class":147},[127,105937,1330],{"class":154},[127,105939,31326],{"class":147},[127,105941,105942],{"class":129,"line":137},[127,105943,102228],{"class":147},[19,105945,105946],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[117,105948,105949],{"className":30918,"code":105055,"language":30920,"meta":122,"style":122},[124,105950,105951],{"__ignoreMap":122},[127,105952,105953],{"class":129,"line":130},[127,105954,105055],{"class":147},[19,105956,105957,105958,105960,105961,105963],{},"重置 ",[124,105959,33941],{},"。注意它不会重新创建 ",[124,105962,102614],{},"，因为模型结构没有变，只是状态回到初始值。",[117,105965,105966],{"className":30918,"code":105221,"language":30920,"meta":122,"style":122},[124,105967,105968],{"__ignoreMap":122},[127,105969,105970,105972,105974,105976,105978],{"class":129,"line":130},[127,105971,105228],{"class":147},[127,105973,530],{"class":154},[127,105975,4985],{"class":147},[127,105977,725],{"class":290},[127,105979,105237],{"class":154},[19,105981,105982,105983,888,105986,888,105989,105991],{},"这行是“手动改状态”。在 freejoint 中，",[124,105984,105985],{},"qpos[0]",[124,105987,105988],{},"qpos[1]",[124,105990,105785],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[117,105993,105994],{"className":30918,"code":105072,"language":30920,"meta":122,"style":122},[124,105995,105996],{"__ignoreMap":122},[127,105997,105998],{"class":129,"line":130},[127,105999,105072],{"class":147},[19,106001,106002,106003,106005,106006,106008],{},"手动改完 ",[124,106004,104559],{}," 后，调用 ",[124,106007,104779],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106010,102845],{"id":102844},[19,106012,106013],{},"你会看到:",[632,106015,106016,106021,106026,106029],{},[635,106017,106018,106019],{},"初始时间为 ",[124,106020,867],{},[635,106022,106023,106024],{},"50 步后时间约为 ",[124,106025,35869],{},[635,106027,106028],{},"reset 后状态恢复",[635,106030,106031,106032,106035,106036],{},"手动修改 ",[124,106033,106034],{},"data.qpos[2]"," 后，小球高度变为 ",[124,106037,105789],{},[19,106039,106040,106042],{},[124,106041,105785],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106044,106045],{},"输出里可以重点看三件事：",[632,106047,106048,106056,106061],{},[635,106049,106050,106052,106053,106055],{},[124,106051,2929],{}," 是否随着 ",[124,106054,101744],{}," 增加。",[635,106057,106058,106060],{},[124,106059,104559],{}," 的 z 坐标是否因为下落而变化。",[635,106062,106063,106065,106066,28925],{},[124,106064,104881],{}," 后时间是否回到 ",[124,106067,867],{},[14,106069,102877],{"id":102876},[632,106071,106072,106078,106084,106090,106093,106102],{},[635,106073,106074,106075,28925],{},"修改 timestep 为 ",[124,106076,106077],{},"0.005",[635,106079,106080,106081,28925],{},"重新运行，检查 50 步后时间是否约为 ",[124,106082,106083],{},"0.25",[635,106085,106086,106087,28925],{},"修改重力为 ",[124,106088,106089],{},"0 0 -1.0",[635,106091,106092],{},"观察小球下降速度是否变慢。",[635,106094,102940,106095,102943,106098,106101],{},[124,106096,106097],{},"data.qpos[2] = 2.0",[124,106099,106100],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[635,106103,106104,106105,106108],{},"注释掉 ",[124,106106,106107],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106110,102982],{"id":102981},[62,106112,106114,106115,106117],{"id":106113},"修改-dataqpos-后位置没有更新","修改 ",[124,106116,101599],{}," 后位置没有更新",[19,106119,102991],{},[117,106121,106122],{"className":30918,"code":105072,"language":30920,"meta":122,"style":122},[124,106123,106124],{"__ignoreMap":122},[127,106125,106126],{"class":129,"line":130},[127,106127,105072],{"class":147},[62,106129,106130],{"id":106130},"数组维度看不懂",[19,106132,106133],{},"打印模型维度:",[117,106135,106137],{"className":30918,"code":106136,"language":30920,"meta":122,"style":122},"print(model.nq, model.nv, model.nu)\n",[124,106138,106139],{"__ignoreMap":122},[127,106140,106141,106143],{"class":129,"line":130},[127,106142,30955],{"class":154},[127,106144,106145],{"class":147},"(model.nq, model.nv, model.nu)\n",[814,106147,106148,106156],{},[817,106149,106150],{},[820,106151,106152,106154],{},[823,106153,105103],{"align":24276},[823,106155,101229],{"align":24276},[860,106157,106158,106168,106178],{},[820,106159,106160,106165],{},[865,106161,106162],{"align":24276},[124,106163,106164],{},"nq",[865,106166,106167],{"align":24276},"位置变量数量",[820,106169,106170,106175],{},[865,106171,106172],{"align":24276},[124,106173,106174],{},"nv",[865,106176,106177],{"align":24276},"速度变量数量",[820,106179,106180,106184],{},[865,106181,106182],{"align":24276},[124,106183,102691],{},[865,106185,106186],{"align":24276},"控制输入数量",[62,106188,106190,106191,106193],{"id":106189},"误以为-qpos-一定等于关节数","误以为 ",[124,106192,104559],{}," 一定等于关节数",[19,106195,106196,106197,83059,106199,106201,106202,106204],{},"不是。例如 ",[124,106198,102149],{},[124,106200,104559],{}," 是 7 维，但 ",[124,106203,104889],{}," 是 6 维。",[62,106206,106208,106209,106211],{"id":106207},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[124,106210,104559],{}," 的第几位",[19,106213,106214],{},"初学时可以先打印：",[117,106216,106218],{"className":30918,"code":106217,"language":30920,"meta":122,"style":122},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[124,106219,106220,106230,106240,106252],{"__ignoreMap":122},[127,106221,106222,106224,106226,106228],{"class":129,"line":130},[127,106223,30955],{"class":154},[127,106225,681],{"class":147},[127,106227,101968],{"class":781},[127,106229,101971],{"class":147},[127,106231,106232,106234,106236,106238],{"class":129,"line":137},[127,106233,30955],{"class":154},[127,106235,681],{"class":147},[127,106237,101980],{"class":781},[127,106239,101983],{"class":147},[127,106241,106242,106244,106246,106249],{"class":129,"line":151},[127,106243,30955],{"class":154},[127,106245,681],{"class":147},[127,106247,106248],{"class":781},"\"qpos:\"",[127,106250,106251],{"class":147},", data.qpos)\n",[127,106253,106254,106256,106258,106261],{"class":129,"line":167},[127,106255,30955],{"class":154},[127,106257,681],{"class":147},[127,106259,106260],{"class":781},"\"qvel:\"",[127,106262,106263],{"class":147},", data.qvel)\n",[19,106265,106266],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[62,106268,106269],{"id":106269},"仿真结果每次都一样",[19,106271,106272,106273,106275],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[124,106274,104559],{},"、目标点或控制输入。",[14,106277,103136],{"id":103135},[19,106279,106280,106281,25159],{},"Python 控制 MuJoCo 的核心就是读写 ",[124,106282,33941],{},[632,106284,106285,106293,106298,106303],{},[635,106286,106287,106288,101547,106290,106292],{},"用 ",[124,106289,101599],{},[124,106291,101602],{}," 读取状态。",[635,106294,106287,106295,106297],{},[124,106296,101605],{}," 写入控制。",[635,106299,106287,106300,106302],{},[124,106301,101744],{}," 推进时间。",[635,106304,106305,106306,106308],{},"手动改状态后用 ",[124,106307,104779],{}," 刷新派生量。",[19,106310,106311],{},"理解这一章后，就可以进入关节和 actuator 控制。",[575,106313,106314],{},"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":122,"searchDepth":137,"depth":137,"links":106316},[106317,106318,106319,106326,106330,106331,106332,106342],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":106320},[106321,106323,106325],{"id":105084,"depth":151,"text":106322},"qpos、qvel、ctrl 是什么",{"id":105162,"depth":151,"text":106324},"mj_step 和 mj_forward 的区别",{"id":105251,"depth":151,"text":105252},{"id":101781,"depth":137,"text":101782,"children":106327},[106328,106329],{"id":102101,"depth":151,"text":102101},{"id":102237,"depth":151,"text":102237},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":106333},[106334,106336,106337,106339,106341],{"id":106113,"depth":151,"text":106335},"修改 data.qpos 后位置没有更新",{"id":106130,"depth":151,"text":106130},{"id":106189,"depth":151,"text":106338},"误以为 qpos 一定等于关节数",{"id":106207,"depth":151,"text":106340},"不知道某个元素在 qpos 的第几位",{"id":106269,"depth":151,"text":106269},{"id":103135,"depth":137,"text":103136},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104847,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106349,"title":106350,"body":106351,"description":122,"extension":604,"meta":108041,"navigation":606,"path":108042,"seo":108043,"stem":108044,"__hash__":108045},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106352,"toc":108017},[106353,106356,106358,106361,106363,106388,106391,106410,106413,106415,106417,106441,106443,106457,106459,106500,106502,106526,106528,106531,106565,106567,106580,106583,106651,106660,106664,106667,106701,106707,106710,106714,106753,106756,106776,106780,106823,106825,106854,106857,106863,106866,106868,107262,107264,107276,107278,107289,107291,107294,107323,107331,107334,107369,107372,107374,107382,107385,107387,107398,107408,107428,107431,107467,107479,107527,107546,107588,107601,107629,107634,107655,107665,107683,107686,107720,107723,107743,107746,107765,107771,107773,107776,107782,107788,107798,107801,107807,107816,107818,107864,107866,107872,107878,107881,107884,107904,107907,107913,107919,107921,107944,107947,107950,107959,107962,108000,108002,108005,108011,108014],[10,106354,106350],{"id":106355},"_4关节actuator-与力控制",[14,106357,101176],{"id":101175},[19,106359,106360],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106362,104860],{},[632,106364,106365,106371,106376,106380,106385],{},[635,106366,106367,106370],{},[124,106368,106369],{},"hinge"," 关节",[635,106372,106373],{},[124,106374,106375],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[635,106377,106378],{},[124,106379,101605],{},[635,106381,106382],{},[124,106383,106384],{},"ctrlrange",[635,106386,106387],{},"读取关节角和角速度",[19,106389,106390],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[117,106392,106394],{"className":30918,"code":106393,"language":30920,"meta":122,"style":122},"data.ctrl[0] = ...\n",[124,106395,106396],{"__ignoreMap":122},[127,106397,106398,106401,106403,106405,106407],{"class":129,"line":130},[127,106399,106400],{"class":147},"data.ctrl[",[127,106402,867],{"class":154},[127,106404,4985],{"class":147},[127,106406,725],{"class":290},[127,106408,106409],{"class":154}," ...\n",[19,106411,106412],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106414,101299],{"id":101298},[19,106416,101302],{},[117,106418,106419],{"className":24362,"code":104917,"language":24364,"meta":122,"style":122},[124,106420,106421],{"__ignoreMap":122},[127,106422,106423,106425,106427,106429,106431,106433,106435,106437,106439],{"class":129,"line":130},[127,106424,25117],{"class":143},[127,106426,26856],{"class":781},[127,106428,24374],{"class":781},[127,106430,26941],{"class":154},[127,106432,104932],{"class":781},[127,106434,101327],{"class":781},[127,106436,103030],{"class":781},[127,106438,101343],{"class":781},[127,106440,104941],{"class":781},[19,106442,103348],{},[117,106444,106445],{"className":24362,"code":101448,"language":24364,"meta":122,"style":122},[124,106446,106447],{"__ignoreMap":122},[127,106448,106449,106451,106453,106455],{"class":129,"line":130},[127,106450,24371],{"class":143},[127,106452,24374],{"class":781},[127,106454,101459],{"class":781},[127,106456,101462],{"class":781},[19,106458,103365],{},[117,106460,106462],{"className":24362,"code":106461,"language":24364,"meta":122,"style":122},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[124,106463,106464,106481,106490],{"__ignoreMap":122},[127,106465,106466,106468,106470,106472,106475,106477,106479],{"class":129,"line":130},[127,106467,30870],{"class":143},[127,106469,29716],{"class":781},[127,106471,25656],{"class":154},[127,106473,106474],{"class":781}," mujoco-control",[127,106476,101504],{"class":781},[127,106478,101507],{"class":154},[127,106480,101510],{"class":154},[127,106482,106483,106485,106487],{"class":129,"line":137},[127,106484,30870],{"class":143},[127,106486,101517],{"class":781},[127,106488,106489],{"class":781}," mujoco-control\n",[127,106491,106492,106494,106496,106498],{"class":129,"line":151},[127,106493,24371],{"class":143},[127,106495,24374],{"class":781},[127,106497,101459],{"class":781},[127,106499,101462],{"class":781},[19,106501,101533],{},[632,106503,106504,106510,106517,106523],{},[635,106505,106506,106509],{},[124,106507,106508],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[635,106511,106512,106514,106515,28925],{},[124,106513,101605],{}," 长度等于 ",[124,106516,102687],{},[635,106518,82751,106519,106522],{},[124,106520,106521],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[635,106524,106525],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106527,101574],{"id":101573},[19,106529,106530],{},"关节决定 body 如何运动:",[117,106532,106534],{"className":53602,"code":106533,"language":53604,"meta":122,"style":122},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[124,106535,106536],{"__ignoreMap":122},[127,106537,106538,106540,106542,106544,106546,106549,106551,106553,106555,106558,106560,106563],{"class":129,"line":130},[127,106539,1584],{"class":147},[127,106541,103485],{"class":140},[127,106543,15462],{"class":143},[127,106545,725],{"class":147},[127,106547,106548],{"class":781},"\"hinge\"",[127,106550,54359],{"class":143},[127,106552,725],{"class":147},[127,106554,106548],{"class":781},[127,106556,106557],{"class":143}," axis",[127,106559,725],{"class":147},[127,106561,106562],{"class":781},"\"0 1 0\"",[127,106564,101673],{"class":147},[19,106566,103581],{},[632,106568,106569,106574,106577],{},[635,106570,106571,106572],{},"名字是 ",[124,106573,106369],{},[635,106575,106576],{},"类型是旋转关节",[635,106578,106579],{},"绕 y 轴旋转",[19,106581,106582],{},"actuator 决定如何施加控制:",[117,106584,106586],{"className":53602,"code":106585,"language":53604,"meta":122,"style":122},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[124,106587,106588,106597,106643],{"__ignoreMap":122},[127,106589,106590,106592,106595],{"class":129,"line":130},[127,106591,1584],{"class":147},[127,106593,106594],{"class":140},"actuator",[127,106596,51846],{"class":147},[127,106598,106599,106601,106604,106606,106608,106611,106614,106616,106618,106621,106623,106625,106628,106630,106633,106636,106638,106641],{"class":129,"line":137},[127,106600,52679],{"class":147},[127,106602,106603],{"class":140},"motor",[127,106605,15462],{"class":143},[127,106607,725],{"class":147},[127,106609,106610],{"class":781},"\"hinge_motor\"",[127,106612,106613],{"class":143}," joint",[127,106615,725],{"class":147},[127,106617,106548],{"class":781},[127,106619,106620],{"class":143}," gear",[127,106622,725],{"class":147},[127,106624,4220],{"class":781},[127,106626,106627],{"class":143}," ctrlrange",[127,106629,725],{"class":147},[127,106631,106632],{"class":781},"\"-2 2\"",[127,106634,106635],{"class":143}," ctrllimited",[127,106637,725],{"class":147},[127,106639,106640],{"class":781},"\"true\"",[127,106642,101673],{"class":147},[127,106644,106645,106647,106649],{"class":129,"line":151},[127,106646,52321],{"class":147},[127,106648,106594],{"class":140},[127,106650,51846],{"class":147},[19,106652,106653,106656,106657,28925],{},[124,106654,106655],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[124,106658,106659],{},"[-2, 2]",[62,106661,106663],{"id":106662},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106665,106666],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[814,106668,106669,106679],{},[817,106670,106671],{},[820,106672,106673,106675,106677],{},[823,106674,26294],{"align":24276},[823,106676,103225],{"align":24276},[823,106678,101263],{"align":24276},[860,106680,106681,106691],{},[820,106682,106683,106685,106688],{},[865,106684,103485],{"align":24276},[865,106686,106687],{"align":24276},"定义能怎么动",[865,106689,106690],{"align":24276},"门轴允许门旋转",[820,106692,106693,106695,106698],{},[865,106694,106594],{"align":24276},[865,106696,106697],{"align":24276},"定义怎么施力或控制",[865,106699,106700],{"align":24276},"人推门、马达带动门",[19,106702,106703,106704,106706],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[124,106705,101605],{}," 主动控制它。",[19,106708,106709],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[62,106711,106713],{"id":106712},"hinge-joint","hinge joint",[117,106715,106717],{"className":53602,"code":106716,"language":53604,"meta":122,"style":122},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[124,106718,106719],{"__ignoreMap":122},[127,106720,106721,106723,106725,106727,106729,106731,106733,106735,106737,106739,106741,106743,106746,106748,106751],{"class":129,"line":130},[127,106722,1584],{"class":147},[127,106724,103485],{"class":140},[127,106726,15462],{"class":143},[127,106728,725],{"class":147},[127,106730,106548],{"class":781},[127,106732,54359],{"class":143},[127,106734,725],{"class":147},[127,106736,106548],{"class":781},[127,106738,106557],{"class":143},[127,106740,725],{"class":147},[127,106742,106562],{"class":781},[127,106744,106745],{"class":143}," damping",[127,106747,725],{"class":147},[127,106749,106750],{"class":781},"\"0.1\"",[127,106752,101673],{"class":147},[19,106754,106755],{},"含义：",[632,106757,106758,106764,106770],{},[635,106759,106760,106763],{},[124,106761,106762],{},"type=\"hinge\"","：只能绕一个轴旋转。",[635,106765,106766,106769],{},[124,106767,106768],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[635,106771,106772,106775],{},[124,106773,106774],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[62,106777,106779],{"id":106778},"motor-actuator","motor actuator",[117,106781,106783],{"className":53602,"code":106782,"language":53604,"meta":122,"style":122},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[124,106784,106785],{"__ignoreMap":122},[127,106786,106787,106789,106791,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819,106821],{"class":129,"line":130},[127,106788,1584],{"class":147},[127,106790,106603],{"class":140},[127,106792,15462],{"class":143},[127,106794,725],{"class":147},[127,106796,106610],{"class":781},[127,106798,106613],{"class":143},[127,106800,725],{"class":147},[127,106802,106548],{"class":781},[127,106804,106620],{"class":143},[127,106806,725],{"class":147},[127,106808,4220],{"class":781},[127,106810,106627],{"class":143},[127,106812,725],{"class":147},[127,106814,106632],{"class":781},[127,106816,106635],{"class":143},[127,106818,725],{"class":147},[127,106820,106640],{"class":781},[127,106822,101673],{"class":147},[19,106824,106755],{},[632,106826,106827,106836,106842,106848],{},[635,106828,106829,106832,106833,106835],{},[124,106830,106831],{},"joint=\"hinge\"","：这个电机作用在名为 ",[124,106834,106369],{}," 的关节上。",[635,106837,106838,106841],{},[124,106839,106840],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[635,106843,106844,106847],{},[124,106845,106846],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[635,106849,106850,106853],{},[124,106851,106852],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106855,106856],{},"简单理解：",[117,106858,106861],{"className":106859,"code":106860,"language":5729,"meta":122},[5727],"实际施加效果 ≈ data.ctrl[0] * gear\n",[124,106862,106860],{"__ignoreMap":122},[19,106864,106865],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106867,101782],{"id":101781},[117,106869,106871],{"className":30918,"code":106870,"language":30920,"meta":122,"style":122},"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",[124,106872,106873,106880,106884,106890,106900,106904,106908,106916,106921,106926,106930,106934,106939,106944,106948,106953,106958,106963,106968,106972,106976,106980,106985,106990,106995,106999,107003,107007,107011,107023,107035,107043,107047,107057,107067,107077,107081,107094,107107,107111,107128,107142,107177,107181,107185,107196,107211,107226,107238,107242,107246,107258],{"__ignoreMap":122},[127,106874,106875,106877],{"class":129,"line":130},[127,106876,30932],{"class":290},[127,106878,106879],{"class":147}," math\n",[127,106881,106882],{"class":129,"line":137},[127,106883,2942],{"emptyLinePlaceholder":606},[127,106885,106886,106888],{"class":129,"line":151},[127,106887,30932],{"class":290},[127,106889,101830],{"class":147},[127,106891,106892,106894,106896,106898],{"class":129,"line":167},[127,106893,30932],{"class":290},[127,106895,31920],{"class":147},[127,106897,31923],{"class":290},[127,106899,31926],{"class":147},[127,106901,106902],{"class":129,"line":415},[127,106903,2942],{"emptyLinePlaceholder":606},[127,106905,106906],{"class":129,"line":421},[127,106907,2942],{"emptyLinePlaceholder":606},[127,106909,106910,106912,106914],{"class":129,"line":1766},[127,106911,101843],{"class":154},[127,106913,14106],{"class":290},[127,106915,101848],{"class":781},[127,106917,106918],{"class":129,"line":1856},[127,106919,106920],{"class":781},"\u003Cmujoco model=\"one_link_motor\">\n",[127,106922,106923],{"class":129,"line":1862},[127,106924,106925],{"class":781},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[127,106927,106928],{"class":129,"line":1874},[127,106929,2942],{"emptyLinePlaceholder":606},[127,106931,106932],{"class":129,"line":2155},[127,106933,101867],{"class":781},[127,106935,106936],{"class":129,"line":2160},[127,106937,106938],{"class":781},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[127,106940,106941],{"class":129,"line":2166},[127,106942,106943],{"class":781},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[127,106945,106946],{"class":129,"line":2171},[127,106947,2942],{"emptyLinePlaceholder":606},[127,106949,106950],{"class":129,"line":2185},[127,106951,106952],{"class":781},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[127,106954,106955],{"class":129,"line":2190},[127,106956,106957],{"class":781},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[127,106959,106960],{"class":129,"line":2196},[127,106961,106962],{"class":781},"        \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",[127,106964,106965],{"class":129,"line":2217},[127,106966,106967],{"class":781},"      \u003C\u002Fbody>\n",[127,106969,106970],{"class":129,"line":2222},[127,106971,101896],{"class":781},[127,106973,106974],{"class":129,"line":2236},[127,106975,101901],{"class":781},[127,106977,106978],{"class":129,"line":2241},[127,106979,2942],{"emptyLinePlaceholder":606},[127,106981,106982],{"class":129,"line":2270},[127,106983,106984],{"class":781},"  \u003Cactuator>\n",[127,106986,106987],{"class":129,"line":2275},[127,106988,106989],{"class":781},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[127,106991,106992],{"class":129,"line":2292},[127,106993,106994],{"class":781},"  \u003C\u002Factuator>\n",[127,106996,106997],{"class":129,"line":2297},[127,106998,101906],{"class":781},[127,107000,107001],{"class":129,"line":2302},[127,107002,96227],{"class":781},[127,107004,107005],{"class":129,"line":2307},[127,107006,2942],{"emptyLinePlaceholder":606},[127,107008,107009],{"class":129,"line":2321},[127,107010,2942],{"emptyLinePlaceholder":606},[127,107012,107013,107015,107017,107019,107021],{"class":129,"line":2326},[127,107014,32487],{"class":290},[127,107016,2515],{"class":143},[127,107018,101927],{"class":147},[127,107020,96215],{"class":154},[127,107022,4281],{"class":147},[127,107024,107025,107027,107029,107031,107033],{"class":129,"line":3119},[127,107026,101936],{"class":147},[127,107028,725],{"class":290},[127,107030,101941],{"class":147},[127,107032,101843],{"class":154},[127,107034,687],{"class":147},[127,107036,107037,107039,107041],{"class":129,"line":3133},[127,107038,101950],{"class":147},[127,107040,725],{"class":290},[127,107042,101955],{"class":147},[127,107044,107045],{"class":129,"line":3141},[127,107046,2942],{"emptyLinePlaceholder":606},[127,107048,107049,107051,107053,107055],{"class":129,"line":3146},[127,107050,31839],{"class":154},[127,107052,681],{"class":147},[127,107054,101968],{"class":781},[127,107056,101971],{"class":147},[127,107058,107059,107061,107063,107065],{"class":129,"line":3152},[127,107060,31839],{"class":154},[127,107062,681],{"class":147},[127,107064,101980],{"class":781},[127,107066,101983],{"class":147},[127,107068,107069,107071,107073,107075],{"class":129,"line":3158},[127,107070,31839],{"class":154},[127,107072,681],{"class":147},[127,107074,101992],{"class":781},[127,107076,101995],{"class":147},[127,107078,107079],{"class":129,"line":3163},[127,107080,2942],{"emptyLinePlaceholder":606},[127,107082,107083,107085,107088,107090,107092],{"class":129,"line":8490},[127,107084,3643],{"class":290},[127,107086,107087],{"class":147}," model.nu ",[127,107089,21489],{"class":290},[127,107091,25659],{"class":154},[127,107093,4281],{"class":147},[127,107095,107096,107098,107100,107102,107105],{"class":129,"line":8514},[127,107097,103961],{"class":290},[127,107099,103964],{"class":154},[127,107101,681],{"class":147},[127,107103,107104],{"class":781},"\"expected exactly one actuator\"",[127,107106,687],{"class":147},[127,107108,107109],{"class":129,"line":8519},[127,107110,2942],{"emptyLinePlaceholder":606},[127,107112,107113,107115,107117,107119,107121,107123,107126],{"class":129,"line":8525},[127,107114,3743],{"class":290},[127,107116,32156],{"class":147},[127,107118,26584],{"class":290},[127,107120,32983],{"class":154},[127,107122,681],{"class":147},[127,107124,107125],{"class":154},"2000",[127,107127,31326],{"class":147},[127,107129,107130,107133,107135,107137,107139],{"class":129,"line":8552},[127,107131,107132],{"class":147},"        t ",[127,107134,725],{"class":290},[127,107136,32156],{"class":147},[127,107138,1130],{"class":290},[127,107140,107141],{"class":147}," model.opt.timestep\n",[127,107143,107144,107147,107149,107151,107153,107156,107158,107161,107163,107165,107168,107170,107172,107174],{"class":129,"line":8557},[127,107145,107146],{"class":147},"        data.ctrl[",[127,107148,867],{"class":154},[127,107150,4985],{"class":147},[127,107152,725],{"class":290},[127,107154,107155],{"class":154}," 1.5",[127,107157,7060],{"class":290},[127,107159,107160],{"class":147}," math.sin(",[127,107162,105789],{"class":154},[127,107164,7060],{"class":290},[127,107166,107167],{"class":147}," math.pi ",[127,107169,1130],{"class":290},[127,107171,62400],{"class":154},[127,107173,7060],{"class":290},[127,107175,107176],{"class":147}," t)\n",[127,107178,107179],{"class":129,"line":8563},[127,107180,102045],{"class":147},[127,107182,107183],{"class":129,"line":8575},[127,107184,2942],{"emptyLinePlaceholder":606},[127,107186,107187,107189,107191,107194],{"class":129,"line":8587},[127,107188,31839],{"class":154},[127,107190,681],{"class":147},[127,107192,107193],{"class":781},"\"time:\"",[127,107195,102007],{"class":147},[127,107197,107198,107200,107202,107205,107207,107209],{"class":129,"line":8599},[127,107199,31839],{"class":154},[127,107201,681],{"class":147},[127,107203,107204],{"class":781},"\"joint qpos:\"",[127,107206,105459],{"class":147},[127,107208,968],{"class":154},[127,107210,31037],{"class":147},[127,107212,107213,107215,107217,107220,107222,107224],{"class":129,"line":10258},[127,107214,31839],{"class":154},[127,107216,681],{"class":147},[127,107218,107219],{"class":781},"\"joint qvel:\"",[127,107221,105475],{"class":147},[127,107223,968],{"class":154},[127,107225,31037],{"class":147},[127,107227,107228,107230,107232,107235],{"class":129,"line":10283},[127,107229,31839],{"class":154},[127,107231,681],{"class":147},[127,107233,107234],{"class":781},"\"last ctrl:\"",[127,107236,107237],{"class":147},", data.ctrl.copy())\n",[127,107239,107240],{"class":129,"line":10306},[127,107241,2942],{"emptyLinePlaceholder":606},[127,107243,107244],{"class":129,"line":10330},[127,107245,2942],{"emptyLinePlaceholder":606},[127,107247,107248,107250,107252,107254,107256],{"class":129,"line":10335},[127,107249,2075],{"class":290},[127,107251,31760],{"class":154},[127,107253,102088],{"class":290},[127,107255,102091],{"class":781},[127,107257,4281],{"class":147},[127,107259,107260],{"class":129,"line":10340},[127,107261,102098],{"class":147},[19,107263,104099],{},[117,107265,107267],{"className":24362,"code":107266,"language":24364,"meta":122,"style":122},"touch ch4_joint_motor.py\n",[124,107268,107269],{"__ignoreMap":122},[127,107270,107271,107273],{"class":129,"line":130},[127,107272,101812],{"class":143},[127,107274,107275],{"class":781}," ch4_joint_motor.py\n",[19,107277,102830],{},[117,107279,107281],{"className":24362,"code":107280,"language":24364,"meta":122,"style":122},"python ch4_joint_motor.py\n",[124,107282,107283],{"__ignoreMap":122},[127,107284,107285,107287],{"class":129,"line":130},[127,107286,30920],{"class":143},[127,107288,107275],{"class":781},[62,107290,102101],{"id":102101},[19,107292,107293],{},"检查 actuator 数量：",[117,107295,107297],{"className":30918,"code":107296,"language":30920,"meta":122,"style":122},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[124,107298,107299,107311],{"__ignoreMap":122},[127,107300,107301,107303,107305,107307,107309],{"class":129,"line":130},[127,107302,2075],{"class":290},[127,107304,107087],{"class":147},[127,107306,21489],{"class":290},[127,107308,25659],{"class":154},[127,107310,4281],{"class":147},[127,107312,107313,107315,107317,107319,107321],{"class":129,"line":137},[127,107314,104424],{"class":290},[127,107316,103964],{"class":154},[127,107318,681],{"class":147},[127,107320,107104],{"class":781},[127,107322,687],{"class":147},[19,107324,107325,107327,107328,107330],{},[124,107326,102687],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[124,107329,101605],{}," 长度应该是 1。",[19,107332,107333],{},"产生正弦控制信号：",[117,107335,107337],{"className":30918,"code":107336,"language":30920,"meta":122,"style":122},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[124,107338,107339],{"__ignoreMap":122},[127,107340,107341,107343,107345,107347,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367],{"class":129,"line":130},[127,107342,106400],{"class":147},[127,107344,867],{"class":154},[127,107346,4985],{"class":147},[127,107348,725],{"class":290},[127,107350,107155],{"class":154},[127,107352,7060],{"class":290},[127,107354,107160],{"class":147},[127,107356,105789],{"class":154},[127,107358,7060],{"class":290},[127,107360,107167],{"class":147},[127,107362,1130],{"class":290},[127,107364,62400],{"class":154},[127,107366,7060],{"class":290},[127,107368,107176],{"class":147},[19,107370,107371],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107373,102202],{},[117,107375,107376],{"className":30918,"code":105034,"language":30920,"meta":122,"style":122},[124,107377,107378],{"__ignoreMap":122},[127,107379,107380],{"class":129,"line":130},[127,107381,105034],{"class":147},[19,107383,107384],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[62,107386,102237],{"id":102237},[117,107388,107390],{"className":30918,"code":107389,"language":30920,"meta":122,"style":122},"import math\n",[124,107391,107392],{"__ignoreMap":122},[127,107393,107394,107396],{"class":129,"line":130},[127,107395,30932],{"class":290},[127,107397,106879],{"class":147},[19,107399,107400,107401,101547,107404,107407],{},"导入 Python 标准库里的数学模块。后面要用 ",[124,107402,107403],{},"math.sin",[124,107405,107406],{},"math.pi"," 生成周期变化的控制信号。",[117,107409,107410],{"className":30918,"code":104215,"language":30920,"meta":122,"style":122},[124,107411,107412,107418],{"__ignoreMap":122},[127,107413,107414,107416],{"class":129,"line":130},[127,107415,30932],{"class":290},[127,107417,101830],{"class":147},[127,107419,107420,107422,107424,107426],{"class":129,"line":137},[127,107421,30932],{"class":290},[127,107423,31920],{"class":147},[127,107425,31923],{"class":290},[127,107427,31926],{"class":147},[19,107429,107430],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[117,107432,107433],{"className":53602,"code":106716,"language":53604,"meta":122,"style":122},[124,107434,107435],{"__ignoreMap":122},[127,107436,107437,107439,107441,107443,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465],{"class":129,"line":130},[127,107438,1584],{"class":147},[127,107440,103485],{"class":140},[127,107442,15462],{"class":143},[127,107444,725],{"class":147},[127,107446,106548],{"class":781},[127,107448,54359],{"class":143},[127,107450,725],{"class":147},[127,107452,106548],{"class":781},[127,107454,106557],{"class":143},[127,107456,725],{"class":147},[127,107458,106562],{"class":781},[127,107460,106745],{"class":143},[127,107462,725],{"class":147},[127,107464,106750],{"class":781},[127,107466,101673],{"class":147},[19,107468,107469,107470,107472,107473,107475,107476,107478],{},"这行定义关节。",[124,107471,106369],{}," 表示旋转关节。",[124,107474,106768],{}," 表示绕 y 轴旋转。",[124,107477,106774],{}," 表示有一点阻尼，运动不会完全无损耗。",[117,107480,107482],{"className":53602,"code":107481,"language":53604,"meta":122,"style":122},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[124,107483,107484],{"__ignoreMap":122},[127,107485,107486,107488,107490,107492,107494,107497,107499,107501,107504,107507,107509,107512,107514,107516,107518,107520,107522,107525],{"class":129,"line":130},[127,107487,1584],{"class":147},[127,107489,101649],{"class":140},[127,107491,15462],{"class":143},[127,107493,725],{"class":147},[127,107495,107496],{"class":781},"\"link_geom\"",[127,107498,54359],{"class":143},[127,107500,725],{"class":147},[127,107502,107503],{"class":781},"\"capsule\"",[127,107505,107506],{"class":143}," fromto",[127,107508,725],{"class":147},[127,107510,107511],{"class":781},"\"0 0 0 0 0 0.5\"",[127,107513,101665],{"class":143},[127,107515,725],{"class":147},[127,107517,104307],{"class":781},[127,107519,102530],{"class":143},[127,107521,725],{"class":147},[127,107523,107524],{"class":781},"\"0.5\"",[127,107526,101673],{"class":147},[19,107528,107529,107530,107532,107533,107535,107536,107539,107540,28925,107543,107545],{},"这行定义摆杆的形状。",[124,107531,103694],{}," 是胶囊体，适合表示杆子。",[124,107534,103705],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[124,107537,107538],{},"(0,0,0)"," 延伸到 ",[124,107541,107542],{},"(0,0,0.5)",[124,107544,103699],{}," 是半径。",[117,107547,107548],{"className":53602,"code":106782,"language":53604,"meta":122,"style":122},[124,107549,107550],{"__ignoreMap":122},[127,107551,107552,107554,107556,107558,107560,107562,107564,107566,107568,107570,107572,107574,107576,107578,107580,107582,107584,107586],{"class":129,"line":130},[127,107553,1584],{"class":147},[127,107555,106603],{"class":140},[127,107557,15462],{"class":143},[127,107559,725],{"class":147},[127,107561,106610],{"class":781},[127,107563,106613],{"class":143},[127,107565,725],{"class":147},[127,107567,106548],{"class":781},[127,107569,106620],{"class":143},[127,107571,725],{"class":147},[127,107573,4220],{"class":781},[127,107575,106627],{"class":143},[127,107577,725],{"class":147},[127,107579,106632],{"class":781},[127,107581,106635],{"class":143},[127,107583,725],{"class":147},[127,107585,106640],{"class":781},[127,107587,101673],{"class":147},[19,107589,107590,107591,107593,107594,107597,107598,107600],{},"这行定义电机。它作用在 ",[124,107592,106369],{}," 关节上。",[124,107595,107596],{},"gear"," 可以理解成放大倍数。",[124,107599,106384],{}," 限制控制输入范围。",[117,107602,107603],{"className":30918,"code":107296,"language":30920,"meta":122,"style":122},[124,107604,107605,107617],{"__ignoreMap":122},[127,107606,107607,107609,107611,107613,107615],{"class":129,"line":130},[127,107608,2075],{"class":290},[127,107610,107087],{"class":147},[127,107612,21489],{"class":290},[127,107614,25659],{"class":154},[127,107616,4281],{"class":147},[127,107618,107619,107621,107623,107625,107627],{"class":129,"line":137},[127,107620,104424],{"class":290},[127,107622,103964],{"class":154},[127,107624,681],{"class":147},[127,107626,107104],{"class":781},[127,107628,687],{"class":147},[19,107630,107631,107633],{},[124,107632,102687],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[117,107635,107637],{"className":30918,"code":107636,"language":30920,"meta":122,"style":122},"for step in range(2000):\n",[124,107638,107639],{"__ignoreMap":122},[127,107640,107641,107643,107645,107647,107649,107651,107653],{"class":129,"line":130},[127,107642,3567],{"class":290},[127,107644,32156],{"class":147},[127,107646,26584],{"class":290},[127,107648,32983],{"class":154},[127,107650,681],{"class":147},[127,107652,107125],{"class":154},[127,107654,31326],{"class":147},[19,107656,107657,107658,107660,107661,107664],{},"循环 2000 步。这里没有用 ",[124,107659,1666],{},"，而是用 ",[124,107662,107663],{},"step","，因为后面要用当前步数计算时间。",[117,107666,107668],{"className":30918,"code":107667,"language":30920,"meta":122,"style":122},"t = step * model.opt.timestep\n",[124,107669,107670],{"__ignoreMap":122},[127,107671,107672,107675,107677,107679,107681],{"class":129,"line":130},[127,107673,107674],{"class":147},"t ",[127,107676,725],{"class":290},[127,107678,32156],{"class":147},[127,107680,1130],{"class":290},[127,107682,107141],{"class":147},[19,107684,107685],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[117,107687,107688],{"className":30918,"code":107336,"language":30920,"meta":122,"style":122},[124,107689,107690],{"__ignoreMap":122},[127,107691,107692,107694,107696,107698,107700,107702,107704,107706,107708,107710,107712,107714,107716,107718],{"class":129,"line":130},[127,107693,106400],{"class":147},[127,107695,867],{"class":154},[127,107697,4985],{"class":147},[127,107699,725],{"class":290},[127,107701,107155],{"class":154},[127,107703,7060],{"class":290},[127,107705,107160],{"class":147},[127,107707,105789],{"class":154},[127,107709,7060],{"class":290},[127,107711,107167],{"class":147},[127,107713,1130],{"class":290},[127,107715,62400],{"class":154},[127,107717,7060],{"class":290},[127,107719,107176],{"class":147},[19,107721,107722],{},"这行给电机输入一个正弦波。拆开看：",[632,107724,107725,107731,107737],{},[635,107726,107727,107730],{},[124,107728,107729],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[635,107732,107733,107736],{},[124,107734,107735],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[635,107738,107739,107742],{},[124,107740,107741],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107744,107745],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[117,107747,107749],{"className":30918,"code":107748,"language":30920,"meta":122,"style":122},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[124,107750,107751],{"__ignoreMap":122},[127,107752,107753,107755,107757,107759,107761,107763],{"class":129,"line":130},[127,107754,30955],{"class":154},[127,107756,681],{"class":147},[127,107758,107204],{"class":781},[127,107760,105459],{"class":147},[127,107762,968],{"class":154},[127,107764,31037],{"class":147},[19,107766,107767,107768,107770],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[124,107769,101599],{}," 只有一个数。",[14,107772,102845],{"id":102844},[19,107774,107775],{},"输出类似:",[117,107777,107780],{"className":107778,"code":107779,"language":5729,"meta":122},[5727],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[124,107781,107779],{"__ignoreMap":122},[19,107783,107784,107785,107787],{},"这里 ",[124,107786,106655],{}," 是电机输入。",[19,107789,107790,107793,107794,107797],{},[124,107791,107792],{},"joint qpos"," 是关节角度，单位通常是弧度。",[124,107795,107796],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107799,107800],{},"角度单位提示：",[117,107802,107805],{"className":107803,"code":107804,"language":5729,"meta":122},[5727],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[124,107806,107804],{"__ignoreMap":122},[19,107808,107809,107810,107812,107813,107815],{},"如果你看到 ",[124,107811,104559],{}," 是 ",[124,107814,35869],{},"，大约就是 28.6 度。",[14,107817,102877],{"id":102876},[632,107819,107820,107827,107830,107837,107840,107848,107856],{},[635,107821,102940,107822,102943,107824,28925],{},[124,107823,106840],{},[124,107825,107826],{},"gear=\"5\"",[635,107828,107829],{},"重新运行，观察关节运动是否更剧烈。",[635,107831,102940,107832,102943,107834,28925],{},[124,107833,106384],{},[124,107835,107836],{},"-0.2 0.2",[635,107838,107839],{},"重新运行，观察控制能力是否变弱。",[635,107841,107842,107843,107845,107846,28925],{},"去掉 actuator，确认 ",[124,107844,102687],{}," 变成 ",[124,107847,867],{},[635,107849,102940,107850,102943,107852,107855],{},[124,107851,106774],{},[124,107853,107854],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[635,107857,102940,107858,102943,107860,107863],{},[124,107859,106768],{},[124,107861,107862],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107865,102982],{"id":102981},[62,107867,107869],{"id":107868},"indexerror-index-0-is-out-of-bounds",[124,107870,107871],{},"IndexError: index 0 is out of bounds",[19,107873,107874,107875,107877],{},"原因是 ",[124,107876,106521],{},"，没有 actuator。",[62,107879,107880],{"id":107880},"关节几乎不动",[19,107882,107883],{},"可能原因:",[632,107885,107886,107891,107895,107901],{},[635,107887,107888,107890],{},[124,107889,107596],{}," 太小",[635,107892,107893,107890],{},[124,107894,106384],{},[635,107896,107897,107900],{},[124,107898,107899],{},"damping"," 太大",[635,107902,107903],{},"重力方向导致运动不明显",[62,107905,107906],{"id":107906},"模型编译失败",[19,107908,107909,107910,107912],{},"检查 actuator 引用的 ",[124,107911,106831],{}," 是否存在，joint 名称是否拼写一致。",[62,107914,107916,107918],{"id":107915},"datactrl0-写了但没有效果",[124,107917,106655],{}," 写了但没有效果",[19,107920,103104],{},[632,107922,107923,107928,107931,107936,107941],{},[635,107924,107925,107927],{},[124,107926,102687],{}," 是否大于 0。",[635,107929,107930],{},"motor 是否引用了正确 joint。",[635,107932,107933,107935],{},[124,107934,107596],{}," 是否太小。",[635,107937,107938,107940],{},[124,107939,106384],{}," 是否把输入限制得太小。",[635,107942,107943],{},"body 是否真的有可动 joint。",[62,107945,107946],{"id":107946},"控制输入超过范围会怎样",[19,107948,107949],{},"如果设置了：",[117,107951,107953],{"className":53602,"code":107952,"language":53604,"meta":122,"style":122},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[124,107954,107955],{"__ignoreMap":122},[127,107956,107957],{"class":129,"line":130},[127,107958,107952],{"class":147},[19,107960,107961],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[117,107963,107965],{"className":30918,"code":107964,"language":30920,"meta":122,"style":122},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[124,107966,107967,107987],{"__ignoreMap":122},[127,107968,107969,107972,107974,107977,107979,107981,107983,107985],{"class":129,"line":130},[127,107970,107971],{"class":147},"action ",[127,107973,725],{"class":290},[127,107975,107976],{"class":147}," np.clip(action, ",[127,107978,1207],{"class":290},[127,107980,105789],{"class":154},[127,107982,12977],{"class":147},[127,107984,105789],{"class":154},[127,107986,687],{"class":147},[127,107988,107989,107991,107993,107995,107997],{"class":129,"line":137},[127,107990,106400],{"class":147},[127,107992,867],{"class":154},[127,107994,4985],{"class":147},[127,107996,725],{"class":290},[127,107998,107999],{"class":147}," action\n",[14,108001,103136],{"id":103135},[19,108003,108004],{},"这一章建立了控制任务的基本形式：",[117,108006,108009],{"className":108007,"code":108008,"language":5729,"meta":122},[5727],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[124,108010,108008],{"__ignoreMap":122},[19,108012,108013],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[575,108015,108016],{},"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":122,"searchDepth":137,"depth":137,"links":108018},[108019,108020,108021,108026,108030,108031,108032,108040],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":108022},[108023,108024,108025],{"id":106662,"depth":151,"text":106663},{"id":106712,"depth":151,"text":106713},{"id":106778,"depth":151,"text":106779},{"id":101781,"depth":137,"text":101782,"children":108027},[108028,108029],{"id":102101,"depth":151,"text":102101},{"id":102237,"depth":151,"text":102237},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":108033},[108034,108035,108036,108037,108039],{"id":107868,"depth":151,"text":107871},{"id":107880,"depth":151,"text":107880},{"id":107906,"depth":151,"text":107906},{"id":107915,"depth":151,"text":108038},"data.ctrl[0] 写了但没有效果",{"id":107946,"depth":151,"text":107946},{"id":103135,"depth":137,"text":103136},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106350,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108047,"title":108048,"body":108049,"description":122,"extension":604,"meta":109958,"navigation":606,"path":109959,"seo":109960,"stem":109961,"__hash__":109962},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108050,"toc":109934},[108051,108054,108056,108059,108067,108070,108087,108090,108115,108118,108164,108166,108168,108223,108225,108244,108246,108289,108292,108309,108312,108328,108338,108345,108347,108350,108353,108387,108390,108438,108442,108445,108459,108468,108472,108475,108500,108503,108507,108520,108523,108529,108532,108547,108549,108552,108812,108814,108826,108829,109141,109143,109155,109157,109160,109175,109180,109183,109205,109208,109211,109245,109248,109252,109263,109266,109283,109286,109300,109307,109327,109334,109348,109351,109363,109378,109398,109401,109423,109426,109430,109445,109456,109471,109474,109504,109520,109549,109557,109581,109584,109602,109612,109624,109631,109640,109646,109655,109658,109660,109669,109672,109687,109689,109692,109703,109706,109717,109720,109738,109740,109757,109760,109788,109790,109794,109797,109827,109833,109836,109840,109848,109851,109853,109874,109877,109880,109896,109899,109915,109917,109920,109931],[10,108052,108048],{"id":108053},"_5viewer-可视化与-renderer-离屏渲染",[14,108055,101176],{"id":101175},[19,108057,108058],{},"本章掌握两类可视化方式:",[632,108060,108061,108064],{},[635,108062,108063],{},"交互式 viewer: 适合人工观察仿真",[635,108065,108066],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108068,108069],{},"使用官方接口:",[117,108071,108073],{"className":30918,"code":108072,"language":30920,"meta":122,"style":122},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[124,108074,108075,108082],{"__ignoreMap":122},[127,108076,108077,108079],{"class":129,"line":130},[127,108078,30932],{"class":290},[127,108080,108081],{"class":147}," mujoco.viewer\n",[127,108083,108084],{"class":129,"line":137},[127,108085,108086],{"class":147},"mujoco.viewer.launch_passive(model, data)\n",[19,108088,108089],{},"以及:",[117,108091,108093],{"className":30918,"code":108092,"language":30920,"meta":122,"style":122},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[124,108094,108095,108105],{"__ignoreMap":122},[127,108096,108097,108100,108102],{"class":129,"line":130},[127,108098,108099],{"class":147},"renderer ",[127,108101,725],{"class":290},[127,108103,108104],{"class":147}," mujoco.Renderer(model)\n",[127,108106,108107,108110,108112],{"class":129,"line":137},[127,108108,108109],{"class":147},"image ",[127,108111,725],{"class":290},[127,108113,108114],{"class":147}," renderer.render()\n",[19,108116,108117],{},"新手建议先理解二者区别：",[814,108119,108120,108136],{},[817,108121,108122],{},[820,108123,108124,108127,108130,108133],{},[823,108125,108126],{"align":24276},"工具",[823,108128,108129],{"align":24276},"用途",[823,108131,108132],{"align":24276},"是否打开窗口",[823,108134,108135],{"align":24276},"常见场景",[860,108137,108138,108151],{},[820,108139,108140,108143,108146,108148],{},[865,108141,108142],{"align":24276},"Viewer",[865,108144,108145],{"align":24276},"人眼实时观察仿真",[865,108147,105194],{"align":24276},[865,108149,108150],{"align":24276},"调试模型、看控制效果",[820,108152,108153,108156,108159,108161],{},[865,108154,108155],{"align":24276},"Renderer",[865,108157,108158],{"align":24276},"生成图像数组",[865,108160,105207],{"align":24276},[865,108162,108163],{"align":24276},"保存图片、训练视觉策略、服务器批量采集",[14,108165,101299],{"id":101298},[19,108167,101302],{},[117,108169,108171],{"className":24362,"code":108170,"language":24364,"meta":122,"style":122},"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",[124,108172,108173,108185,108195,108203,108211],{"__ignoreMap":122},[127,108174,108175,108177,108179,108181,108183],{"class":129,"line":130},[127,108176,25117],{"class":143},[127,108178,26856],{"class":781},[127,108180,24374],{"class":781},[127,108182,26941],{"class":154},[127,108184,25219],{"class":154},[127,108186,108187,108189,108191,108193],{"class":129,"line":137},[127,108188,101337],{"class":781},[127,108190,101340],{"class":781},[127,108192,101343],{"class":781},[127,108194,25219],{"class":154},[127,108196,108197,108199,108201],{"class":129,"line":151},[127,108198,101350],{"class":781},[127,108200,101353],{"class":781},[127,108202,25219],{"class":154},[127,108204,108205,108207,108209],{"class":129,"line":167},[127,108206,101360],{"class":781},[127,108208,101363],{"class":781},[127,108210,25219],{"class":154},[127,108212,108213,108215,108217,108219,108221],{"class":129,"line":415},[127,108214,101370],{"class":781},[127,108216,101373],{"class":781},[127,108218,101376],{"class":781},[127,108220,101379],{"class":781},[127,108222,103045],{"class":781},[19,108224,103348],{},[117,108226,108228],{"className":24362,"code":108227,"language":24364,"meta":122,"style":122},"pip install \"mujoco>=2.3\" numpy pillow\n",[124,108229,108230],{"__ignoreMap":122},[127,108231,108232,108234,108236,108238,108241],{"class":129,"line":130},[127,108233,24371],{"class":143},[127,108235,24374],{"class":781},[127,108237,101459],{"class":781},[127,108239,108240],{"class":781}," numpy",[127,108242,108243],{"class":781}," pillow\n",[19,108245,103365],{},[117,108247,108249],{"className":24362,"code":108248,"language":24364,"meta":122,"style":122},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[124,108250,108251,108268,108277],{"__ignoreMap":122},[127,108252,108253,108255,108257,108259,108262,108264,108266],{"class":129,"line":130},[127,108254,30870],{"class":143},[127,108256,29716],{"class":781},[127,108258,25656],{"class":154},[127,108260,108261],{"class":781}," mujoco-render",[127,108263,101504],{"class":781},[127,108265,101507],{"class":154},[127,108267,101510],{"class":154},[127,108269,108270,108272,108274],{"class":129,"line":137},[127,108271,30870],{"class":143},[127,108273,101517],{"class":781},[127,108275,108276],{"class":781}," mujoco-render\n",[127,108278,108279,108281,108283,108285,108287],{"class":129,"line":151},[127,108280,24371],{"class":143},[127,108282,24374],{"class":781},[127,108284,101459],{"class":781},[127,108286,108240],{"class":781},[127,108288,108243],{"class":781},[19,108290,108291],{},"离屏渲染后端:",[117,108293,108295],{"className":24362,"code":108294,"language":24364,"meta":122,"style":122},"export MUJOCO_GL=egl\n",[124,108296,108297],{"__ignoreMap":122},[127,108298,108299,108301,108304,108306],{"class":129,"line":130},[127,108300,25583],{"class":290},[127,108302,108303],{"class":147}," MUJOCO_GL",[127,108305,725],{"class":290},[127,108307,108308],{"class":147},"egl\n",[19,108310,108311],{},"或:",[117,108313,108315],{"className":24362,"code":108314,"language":24364,"meta":122,"style":122},"export MUJOCO_GL=osmesa\n",[124,108316,108317],{"__ignoreMap":122},[127,108318,108319,108321,108323,108325],{"class":129,"line":130},[127,108320,25583],{"class":290},[127,108322,108303],{"class":147},[127,108324,725],{"class":290},[127,108326,108327],{"class":147},"osmesa\n",[19,108329,108330,108331,108334,108335,28925],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[124,108332,108333],{},"egl"," 失败，再尝试 ",[124,108336,108337],{},"osmesa",[19,108339,108340,108341,108344],{},"如果你在本机桌面环境运行，通常先不要设置 ",[124,108342,108343],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108346,101574],{"id":101573},[19,108348,108349],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108351,108352],{},"典型 viewer 流程:",[117,108354,108356],{"className":30918,"code":108355,"language":30920,"meta":122,"style":122},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[124,108357,108358,108371,108378,108382],{"__ignoreMap":122},[127,108359,108360,108363,108366,108368],{"class":129,"line":130},[127,108361,108362],{"class":290},"with",[127,108364,108365],{"class":147}," mujoco.viewer.launch_passive(model, data) ",[127,108367,31923],{"class":290},[127,108369,108370],{"class":147}," viewer:\n",[127,108372,108373,108375],{"class":129,"line":137},[127,108374,2793],{"class":290},[127,108376,108377],{"class":147}," viewer.is_running():\n",[127,108379,108380],{"class":129,"line":151},[127,108381,102045],{"class":147},[127,108383,108384],{"class":129,"line":167},[127,108385,108386],{"class":147},"        viewer.sync()\n",[19,108388,108389],{},"典型 renderer 流程:",[117,108391,108393],{"className":30918,"code":108392,"language":30920,"meta":122,"style":122},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[124,108394,108395,108421,108425,108430],{"__ignoreMap":122},[127,108396,108397,108399,108401,108404,108406,108408,108410,108412,108414,108416,108419],{"class":129,"line":130},[127,108398,108099],{"class":147},[127,108400,725],{"class":290},[127,108402,108403],{"class":147}," mujoco.Renderer(model, ",[127,108405,25522],{"class":5758},[127,108407,725],{"class":290},[127,108409,42882],{"class":154},[127,108411,12977],{"class":147},[127,108413,25518],{"class":5758},[127,108415,725],{"class":290},[127,108417,108418],{"class":154},"640",[127,108420,687],{"class":147},[127,108422,108423],{"class":129,"line":137},[127,108424,105034],{"class":147},[127,108426,108427],{"class":129,"line":151},[127,108428,108429],{"class":147},"renderer.update_scene(data)\n",[127,108431,108432,108434,108436],{"class":129,"line":167},[127,108433,108109],{"class":147},[127,108435,725],{"class":290},[127,108437,108114],{"class":147},[62,108439,108441],{"id":108440},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108443,108444],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[117,108446,108448],{"className":30918,"code":108447,"language":30920,"meta":122,"style":122},"mujoco.mj_step(model, data)\nviewer.sync()\n",[124,108449,108450,108454],{"__ignoreMap":122},[127,108451,108452],{"class":129,"line":130},[127,108453,105034],{"class":147},[127,108455,108456],{"class":129,"line":137},[127,108457,108458],{"class":147},"viewer.sync()\n",[19,108460,108461,108463,108464,108467],{},[124,108462,101744],{}," 负责算物理，",[124,108465,108466],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[62,108469,108471],{"id":108470},"为什么要-sleep","为什么要 sleep",[19,108473,108474],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[117,108476,108478],{"className":30918,"code":108477,"language":30920,"meta":122,"style":122},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[124,108479,108480],{"__ignoreMap":122},[127,108481,108482,108485,108487,108490,108492,108495,108497],{"class":129,"line":130},[127,108483,108484],{"class":147},"sleep_time ",[127,108486,725],{"class":290},[127,108488,108489],{"class":147}," model.opt.timestep ",[127,108491,1207],{"class":290},[127,108493,108494],{"class":147}," (time.time() ",[127,108496,1207],{"class":290},[127,108498,108499],{"class":147}," step_start)\n",[19,108501,108502],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[62,108504,108506],{"id":108505},"renderer-输出是什么","renderer 输出是什么",[117,108508,108510],{"className":30918,"code":108509,"language":30920,"meta":122,"style":122},"image = renderer.render()\n",[124,108511,108512],{"__ignoreMap":122},[127,108513,108514,108516,108518],{"class":129,"line":130},[127,108515,108109],{"class":147},[127,108517,725],{"class":290},[127,108519,108114],{"class":147},[19,108521,108522],{},"得到的是 NumPy 数组，形状通常是：",[117,108524,108527],{"className":108525,"code":108526,"language":5729,"meta":122},[5727],"(height, width, 3)\n",[124,108528,108526],{"__ignoreMap":122},[19,108530,108531],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[117,108533,108535],{"className":30918,"code":108534,"language":30920,"meta":122,"style":122},"Image.fromarray(image).save(\"render_output.png\")\n",[124,108536,108537],{"__ignoreMap":122},[127,108538,108539,108542,108545],{"class":129,"line":130},[127,108540,108541],{"class":147},"Image.fromarray(image).save(",[127,108543,108544],{"class":781},"\"render_output.png\"",[127,108546,687],{"class":147},[14,108548,101782],{"id":101781},[19,108550,108551],{},"交互式 Viewer:",[117,108553,108555],{"className":30918,"code":108554,"language":30920,"meta":122,"style":122},"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",[124,108556,108557,108563,108567,108573,108579,108583,108587,108595,108600,108604,108608,108612,108617,108622,108626,108630,108634,108639,108643,108647,108651,108655,108659,108663,108675,108687,108695,108699,108709,108729,108739,108744,108749,108753,108770,108783,108788,108792,108796,108808],{"__ignoreMap":122},[127,108558,108559,108561],{"class":129,"line":130},[127,108560,30932],{"class":290},[127,108562,32369],{"class":147},[127,108564,108565],{"class":129,"line":137},[127,108566,2942],{"emptyLinePlaceholder":606},[127,108568,108569,108571],{"class":129,"line":151},[127,108570,30932],{"class":290},[127,108572,101830],{"class":147},[127,108574,108575,108577],{"class":129,"line":167},[127,108576,30932],{"class":290},[127,108578,108081],{"class":147},[127,108580,108581],{"class":129,"line":415},[127,108582,2942],{"emptyLinePlaceholder":606},[127,108584,108585],{"class":129,"line":421},[127,108586,2942],{"emptyLinePlaceholder":606},[127,108588,108589,108591,108593],{"class":129,"line":1766},[127,108590,101843],{"class":154},[127,108592,14106],{"class":290},[127,108594,101848],{"class":781},[127,108596,108597],{"class":129,"line":1856},[127,108598,108599],{"class":781},"\u003Cmujoco model=\"viewer_demo\">\n",[127,108601,108602],{"class":129,"line":1862},[127,108603,101858],{"class":781},[127,108605,108606],{"class":129,"line":1874},[127,108607,2942],{"emptyLinePlaceholder":606},[127,108609,108610],{"class":129,"line":2155},[127,108611,101867],{"class":781},[127,108613,108614],{"class":129,"line":2160},[127,108615,108616],{"class":781},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[127,108618,108619],{"class":129,"line":2166},[127,108620,108621],{"class":781},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[127,108623,108624],{"class":129,"line":2171},[127,108625,2942],{"emptyLinePlaceholder":606},[127,108627,108628],{"class":129,"line":2185},[127,108629,101881],{"class":781},[127,108631,108632],{"class":129,"line":2190},[127,108633,101886],{"class":781},[127,108635,108636],{"class":129,"line":2196},[127,108637,108638],{"class":781},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[127,108640,108641],{"class":129,"line":2217},[127,108642,101896],{"class":781},[127,108644,108645],{"class":129,"line":2222},[127,108646,101901],{"class":781},[127,108648,108649],{"class":129,"line":2236},[127,108650,101906],{"class":781},[127,108652,108653],{"class":129,"line":2241},[127,108654,96227],{"class":781},[127,108656,108657],{"class":129,"line":2270},[127,108658,2942],{"emptyLinePlaceholder":606},[127,108660,108661],{"class":129,"line":2275},[127,108662,2942],{"emptyLinePlaceholder":606},[127,108664,108665,108667,108669,108671,108673],{"class":129,"line":2292},[127,108666,32487],{"class":290},[127,108668,2515],{"class":143},[127,108670,101927],{"class":147},[127,108672,96215],{"class":154},[127,108674,4281],{"class":147},[127,108676,108677,108679,108681,108683,108685],{"class":129,"line":2297},[127,108678,101936],{"class":147},[127,108680,725],{"class":290},[127,108682,101941],{"class":147},[127,108684,101843],{"class":154},[127,108686,687],{"class":147},[127,108688,108689,108691,108693],{"class":129,"line":2302},[127,108690,101950],{"class":147},[127,108692,725],{"class":290},[127,108694,101955],{"class":147},[127,108696,108697],{"class":129,"line":2307},[127,108698,2942],{"emptyLinePlaceholder":606},[127,108700,108701,108703,108705,108707],{"class":129,"line":2321},[127,108702,34718],{"class":290},[127,108704,108365],{"class":147},[127,108706,31923],{"class":290},[127,108708,108370],{"class":147},[127,108710,108711,108714,108717,108719,108722,108724,108727],{"class":129,"line":2326},[127,108712,108713],{"class":290},"        while",[127,108715,108716],{"class":147}," viewer.is_running() ",[127,108718,31002],{"class":290},[127,108720,108721],{"class":147}," data.time ",[127,108723,1584],{"class":290},[127,108725,108726],{"class":154}," 5.0",[127,108728,4281],{"class":147},[127,108730,108731,108734,108736],{"class":129,"line":3119},[127,108732,108733],{"class":147},"            step_start ",[127,108735,725],{"class":290},[127,108737,108738],{"class":147}," time.time()\n",[127,108740,108741],{"class":129,"line":3133},[127,108742,108743],{"class":147},"            mujoco.mj_step(model, data)\n",[127,108745,108746],{"class":129,"line":3141},[127,108747,108748],{"class":147},"            viewer.sync()\n",[127,108750,108751],{"class":129,"line":3146},[127,108752,2942],{"emptyLinePlaceholder":606},[127,108754,108755,108758,108760,108762,108764,108766,108768],{"class":129,"line":3152},[127,108756,108757],{"class":147},"            sleep_time ",[127,108759,725],{"class":290},[127,108761,108489],{"class":147},[127,108763,1207],{"class":290},[127,108765,108494],{"class":147},[127,108767,1207],{"class":290},[127,108769,108499],{"class":147},[127,108771,108772,108774,108777,108779,108781],{"class":129,"line":3158},[127,108773,5184],{"class":290},[127,108775,108776],{"class":147}," sleep_time ",[127,108778,1634],{"class":290},[127,108780,4635],{"class":154},[127,108782,4281],{"class":147},[127,108784,108785],{"class":129,"line":3163},[127,108786,108787],{"class":147},"                time.sleep(sleep_time)\n",[127,108789,108790],{"class":129,"line":8490},[127,108791,2942],{"emptyLinePlaceholder":606},[127,108793,108794],{"class":129,"line":8514},[127,108795,2942],{"emptyLinePlaceholder":606},[127,108797,108798,108800,108802,108804,108806],{"class":129,"line":8519},[127,108799,2075],{"class":290},[127,108801,31760],{"class":154},[127,108803,102088],{"class":290},[127,108805,102091],{"class":781},[127,108807,4281],{"class":147},[127,108809,108810],{"class":129,"line":8525},[127,108811,102098],{"class":147},[19,108813,104099],{},[117,108815,108817],{"className":24362,"code":108816,"language":24364,"meta":122,"style":122},"touch ch5_viewer.py\n",[124,108818,108819],{"__ignoreMap":122},[127,108820,108821,108823],{"class":129,"line":130},[127,108822,101812],{"class":143},[127,108824,108825],{"class":781}," ch5_viewer.py\n",[19,108827,108828],{},"离屏 Renderer 保存图片:",[117,108830,108832],{"className":30918,"code":108831,"language":30920,"meta":122,"style":122},"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",[124,108833,108834,108846,108850,108856,108866,108870,108874,108882,108887,108891,108895,108899,108903,108908,108912,108916,108920,108924,108928,108932,108936,108940,108944,108948,108952,108964,108976,108984,109009,109013,109029,109033,109037,109052,109061,109065,109079,109084,109089,109093,109105,109117,109121,109125,109137],{"__ignoreMap":122},[127,108835,108836,108838,108841,108843],{"class":129,"line":130},[127,108837,31277],{"class":290},[127,108839,108840],{"class":147}," pathlib ",[127,108842,30932],{"class":290},[127,108844,108845],{"class":147}," Path\n",[127,108847,108848],{"class":129,"line":137},[127,108849,2942],{"emptyLinePlaceholder":606},[127,108851,108852,108854],{"class":129,"line":151},[127,108853,30932],{"class":290},[127,108855,101830],{"class":147},[127,108857,108858,108860,108862,108864],{"class":129,"line":167},[127,108859,31277],{"class":290},[127,108861,47803],{"class":154},[127,108863,47806],{"class":290},[127,108865,47809],{"class":147},[127,108867,108868],{"class":129,"line":415},[127,108869,2942],{"emptyLinePlaceholder":606},[127,108871,108872],{"class":129,"line":421},[127,108873,2942],{"emptyLinePlaceholder":606},[127,108875,108876,108878,108880],{"class":129,"line":1766},[127,108877,101843],{"class":154},[127,108879,14106],{"class":290},[127,108881,101848],{"class":781},[127,108883,108884],{"class":129,"line":1856},[127,108885,108886],{"class":781},"\u003Cmujoco model=\"renderer_demo\">\n",[127,108888,108889],{"class":129,"line":1862},[127,108890,101858],{"class":781},[127,108892,108893],{"class":129,"line":1874},[127,108894,2942],{"emptyLinePlaceholder":606},[127,108896,108897],{"class":129,"line":2155},[127,108898,101867],{"class":781},[127,108900,108901],{"class":129,"line":2160},[127,108902,108616],{"class":781},[127,108904,108905],{"class":129,"line":2166},[127,108906,108907],{"class":781},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[127,108909,108910],{"class":129,"line":2171},[127,108911,108621],{"class":781},[127,108913,108914],{"class":129,"line":2185},[127,108915,2942],{"emptyLinePlaceholder":606},[127,108917,108918],{"class":129,"line":2190},[127,108919,101881],{"class":781},[127,108921,108922],{"class":129,"line":2196},[127,108923,101886],{"class":781},[127,108925,108926],{"class":129,"line":2217},[127,108927,108638],{"class":781},[127,108929,108930],{"class":129,"line":2222},[127,108931,101896],{"class":781},[127,108933,108934],{"class":129,"line":2236},[127,108935,101901],{"class":781},[127,108937,108938],{"class":129,"line":2241},[127,108939,101906],{"class":781},[127,108941,108942],{"class":129,"line":2270},[127,108943,96227],{"class":781},[127,108945,108946],{"class":129,"line":2275},[127,108947,2942],{"emptyLinePlaceholder":606},[127,108949,108950],{"class":129,"line":2292},[127,108951,2942],{"emptyLinePlaceholder":606},[127,108953,108954,108956,108958,108960,108962],{"class":129,"line":2297},[127,108955,32487],{"class":290},[127,108957,2515],{"class":143},[127,108959,101927],{"class":147},[127,108961,96215],{"class":154},[127,108963,4281],{"class":147},[127,108965,108966,108968,108970,108972,108974],{"class":129,"line":2302},[127,108967,101936],{"class":147},[127,108969,725],{"class":290},[127,108971,101941],{"class":147},[127,108973,101843],{"class":154},[127,108975,687],{"class":147},[127,108977,108978,108980,108982],{"class":129,"line":2307},[127,108979,101950],{"class":147},[127,108981,725],{"class":290},[127,108983,101955],{"class":147},[127,108985,108986,108989,108991,108993,108995,108997,108999,109001,109003,109005,109007],{"class":129,"line":2321},[127,108987,108988],{"class":147},"    renderer ",[127,108990,725],{"class":290},[127,108992,108403],{"class":147},[127,108994,25522],{"class":5758},[127,108996,725],{"class":290},[127,108998,42882],{"class":154},[127,109000,12977],{"class":147},[127,109002,25518],{"class":5758},[127,109004,725],{"class":290},[127,109006,108418],{"class":154},[127,109008,687],{"class":147},[127,109010,109011],{"class":129,"line":2326},[127,109012,2942],{"emptyLinePlaceholder":606},[127,109014,109015,109017,109019,109021,109023,109025,109027],{"class":129,"line":3119},[127,109016,3743],{"class":290},[127,109018,102030],{"class":147},[127,109020,26584],{"class":290},[127,109022,32983],{"class":154},[127,109024,681],{"class":147},[127,109026,986],{"class":154},[127,109028,31326],{"class":147},[127,109030,109031],{"class":129,"line":3133},[127,109032,102045],{"class":147},[127,109034,109035],{"class":129,"line":3141},[127,109036,2942],{"emptyLinePlaceholder":606},[127,109038,109039,109042,109045,109047,109050],{"class":129,"line":3146},[127,109040,109041],{"class":147},"    renderer.update_scene(data, ",[127,109043,109044],{"class":5758},"camera",[127,109046,725],{"class":290},[127,109048,109049],{"class":781},"\"fixed_camera\"",[127,109051,687],{"class":147},[127,109053,109054,109057,109059],{"class":129,"line":3152},[127,109055,109056],{"class":147},"    image ",[127,109058,725],{"class":290},[127,109060,108114],{"class":147},[127,109062,109063],{"class":129,"line":3158},[127,109064,2942],{"emptyLinePlaceholder":606},[127,109066,109067,109070,109072,109075,109077],{"class":129,"line":3163},[127,109068,109069],{"class":147},"    output_path ",[127,109071,725],{"class":290},[127,109073,109074],{"class":147}," Path(",[127,109076,108544],{"class":781},[127,109078,687],{"class":147},[127,109080,109081],{"class":129,"line":8490},[127,109082,109083],{"class":147},"    Image.fromarray(image).save(output_path)\n",[127,109085,109086],{"class":129,"line":8514},[127,109087,109088],{"class":147},"    renderer.close()\n",[127,109090,109091],{"class":129,"line":8519},[127,109092,2942],{"emptyLinePlaceholder":606},[127,109094,109095,109097,109099,109102],{"class":129,"line":8525},[127,109096,31839],{"class":154},[127,109098,681],{"class":147},[127,109100,109101],{"class":781},"\"saved:\"",[127,109103,109104],{"class":147},", output_path.resolve())\n",[127,109106,109107,109109,109111,109114],{"class":129,"line":8552},[127,109108,31839],{"class":154},[127,109110,681],{"class":147},[127,109112,109113],{"class":781},"\"image shape:\"",[127,109115,109116],{"class":147},", image.shape)\n",[127,109118,109119],{"class":129,"line":8557},[127,109120,2942],{"emptyLinePlaceholder":606},[127,109122,109123],{"class":129,"line":8563},[127,109124,2942],{"emptyLinePlaceholder":606},[127,109126,109127,109129,109131,109133,109135],{"class":129,"line":8575},[127,109128,2075],{"class":290},[127,109130,31760],{"class":154},[127,109132,102088],{"class":290},[127,109134,102091],{"class":781},[127,109136,4281],{"class":147},[127,109138,109139],{"class":129,"line":8587},[127,109140,102098],{"class":147},[19,109142,104099],{},[117,109144,109146],{"className":24362,"code":109145,"language":24364,"meta":122,"style":122},"touch ch5_renderer.py\n",[124,109147,109148],{"__ignoreMap":122},[127,109149,109150,109152],{"class":129,"line":130},[127,109151,101812],{"class":143},[127,109153,109154],{"class":781}," ch5_renderer.py\n",[62,109156,102101],{"id":102101},[19,109158,109159],{},"viewer 上下文：",[117,109161,109163],{"className":30918,"code":109162,"language":30920,"meta":122,"style":122},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[124,109164,109165],{"__ignoreMap":122},[127,109166,109167,109169,109171,109173],{"class":129,"line":130},[127,109168,108362],{"class":290},[127,109170,108365],{"class":147},[127,109172,31923],{"class":290},[127,109174,108370],{"class":147},[19,109176,109177,109179],{},[124,109178,108362],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109181,109182],{},"窗口循环：",[117,109184,109186],{"className":30918,"code":109185,"language":30920,"meta":122,"style":122},"while viewer.is_running() and data.time \u003C 5.0:\n",[124,109187,109188],{"__ignoreMap":122},[127,109189,109190,109193,109195,109197,109199,109201,109203],{"class":129,"line":130},[127,109191,109192],{"class":290},"while",[127,109194,108716],{"class":147},[127,109196,31002],{"class":290},[127,109198,108721],{"class":147},[127,109200,1584],{"class":290},[127,109202,108726],{"class":154},[127,109204,4281],{"class":147},[19,109206,109207],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109209,109210],{},"固定相机：",[117,109212,109214],{"className":53602,"code":109213,"language":53604,"meta":122,"style":122},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[124,109215,109216],{"__ignoreMap":122},[127,109217,109218,109220,109222,109224,109226,109228,109230,109232,109235,109238,109240,109243],{"class":129,"line":130},[127,109219,1584],{"class":147},[127,109221,109044],{"class":140},[127,109223,15462],{"class":143},[127,109225,725],{"class":147},[127,109227,109049],{"class":781},[127,109229,101635],{"class":143},[127,109231,725],{"class":147},[127,109233,109234],{"class":781},"\"1.5 -2.0 1.2\"",[127,109236,109237],{"class":143}," xyaxes",[127,109239,725],{"class":147},[127,109241,109242],{"class":781},"\"1 0.75 0 0 0 1\"",[127,109244,101673],{"class":147},[19,109246,109247],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[62,109249,109251],{"id":109250},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[117,109253,109255],{"className":30918,"code":109254,"language":30920,"meta":122,"style":122},"import time\n",[124,109256,109257],{"__ignoreMap":122},[127,109258,109259,109261],{"class":129,"line":130},[127,109260,30932],{"class":290},[127,109262,32369],{"class":147},[19,109264,109265],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[117,109267,109269],{"className":30918,"code":109268,"language":30920,"meta":122,"style":122},"import mujoco\nimport mujoco.viewer\n",[124,109270,109271,109277],{"__ignoreMap":122},[127,109272,109273,109275],{"class":129,"line":130},[127,109274,30932],{"class":290},[127,109276,101830],{"class":147},[127,109278,109279,109281],{"class":129,"line":137},[127,109280,30932],{"class":290},[127,109282,108081],{"class":147},[19,109284,109285],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[117,109287,109288],{"className":30918,"code":109162,"language":30920,"meta":122,"style":122},[124,109289,109290],{"__ignoreMap":122},[127,109291,109292,109294,109296,109298],{"class":129,"line":130},[127,109293,108362],{"class":290},[127,109295,108365],{"class":147},[127,109297,31923],{"class":290},[127,109299,108370],{"class":147},[19,109301,109302,109303,109306],{},"打开一个 viewer 窗口。",[124,109304,109305],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[117,109308,109309],{"className":30918,"code":109185,"language":30920,"meta":122,"style":122},[124,109310,109311],{"__ignoreMap":122},[127,109312,109313,109315,109317,109319,109321,109323,109325],{"class":129,"line":130},[127,109314,109192],{"class":290},[127,109316,108716],{"class":147},[127,109318,31002],{"class":290},[127,109320,108721],{"class":147},[127,109322,1584],{"class":290},[127,109324,108726],{"class":154},[127,109326,4281],{"class":147},[19,109328,109329,109330,109333],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[124,109331,109332],{},"viewer.is_running()"," 会变成 false，循环结束。",[117,109335,109337],{"className":30918,"code":109336,"language":30920,"meta":122,"style":122},"step_start = time.time()\n",[124,109338,109339],{"__ignoreMap":122},[127,109340,109341,109344,109346],{"class":129,"line":130},[127,109342,109343],{"class":147},"step_start ",[127,109345,725],{"class":290},[127,109347,108738],{"class":147},[19,109349,109350],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[117,109352,109353],{"className":30918,"code":108447,"language":30920,"meta":122,"style":122},[124,109354,109355,109359],{"__ignoreMap":122},[127,109356,109357],{"class":129,"line":130},[127,109358,105034],{"class":147},[127,109360,109361],{"class":129,"line":137},[127,109362,108458],{"class":147},[19,109364,109365,109367,109368,109370,109371,109373,109374,109377],{},[124,109366,101744],{}," 推进物理仿真。",[124,109369,108466],{}," 把最新的 ",[124,109372,33941],{}," 同步到窗口里显示。没有 ",[124,109375,109376],{},"sync()","，窗口可能看不到最新状态。",[117,109379,109380],{"className":30918,"code":108477,"language":30920,"meta":122,"style":122},[124,109381,109382],{"__ignoreMap":122},[127,109383,109384,109386,109388,109390,109392,109394,109396],{"class":129,"line":130},[127,109385,108484],{"class":147},[127,109387,725],{"class":290},[127,109389,108489],{"class":147},[127,109391,1207],{"class":290},[127,109393,108494],{"class":147},[127,109395,1207],{"class":290},[127,109397,108499],{"class":147},[19,109399,109400],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[117,109402,109404],{"className":30918,"code":109403,"language":30920,"meta":122,"style":122},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[124,109405,109406,109418],{"__ignoreMap":122},[127,109407,109408,109410,109412,109414,109416],{"class":129,"line":130},[127,109409,2075],{"class":290},[127,109411,108776],{"class":147},[127,109413,1634],{"class":290},[127,109415,4635],{"class":154},[127,109417,4281],{"class":147},[127,109419,109420],{"class":129,"line":137},[127,109421,109422],{"class":147},"    time.sleep(sleep_time)\n",[19,109424,109425],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[62,109427,109429],{"id":109428},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[117,109431,109433],{"className":30918,"code":109432,"language":30920,"meta":122,"style":122},"from pathlib import Path\n",[124,109434,109435],{"__ignoreMap":122},[127,109436,109437,109439,109441,109443],{"class":129,"line":130},[127,109438,31277],{"class":290},[127,109440,108840],{"class":147},[127,109442,30932],{"class":290},[127,109444,108845],{"class":147},[19,109446,109447,109448,109451,109452,109455],{},"导入 ",[124,109449,109450],{},"Path","，用来处理文件路径。相比直接写字符串，",[124,109453,109454],{},"Path(\"render_output.png\")"," 更清晰。",[117,109457,109459],{"className":30918,"code":109458,"language":30920,"meta":122,"style":122},"from PIL import Image\n",[124,109460,109461],{"__ignoreMap":122},[127,109462,109463,109465,109467,109469],{"class":129,"line":130},[127,109464,31277],{"class":290},[127,109466,47803],{"class":154},[127,109468,47806],{"class":290},[127,109470,47809],{"class":147},[19,109472,109473],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[117,109475,109476],{"className":53602,"code":109213,"language":53604,"meta":122,"style":122},[124,109477,109478],{"__ignoreMap":122},[127,109479,109480,109482,109484,109486,109488,109490,109492,109494,109496,109498,109500,109502],{"class":129,"line":130},[127,109481,1584],{"class":147},[127,109483,109044],{"class":140},[127,109485,15462],{"class":143},[127,109487,725],{"class":147},[127,109489,109049],{"class":781},[127,109491,101635],{"class":143},[127,109493,725],{"class":147},[127,109495,109234],{"class":781},[127,109497,109237],{"class":143},[127,109499,725],{"class":147},[127,109501,109242],{"class":781},[127,109503,101673],{"class":147},[19,109505,109506,109507,109509,109510,109512,109513,109516,109517,109519],{},"定义一个相机。",[124,109508,80339],{}," 是相机名字。",[124,109511,104675],{}," 是相机在世界里的位置。",[124,109514,109515],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[124,109518,104675],{}," 来调视角。",[117,109521,109523],{"className":30918,"code":109522,"language":30920,"meta":122,"style":122},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[124,109524,109525],{"__ignoreMap":122},[127,109526,109527,109529,109531,109533,109535,109537,109539,109541,109543,109545,109547],{"class":129,"line":130},[127,109528,108099],{"class":147},[127,109530,725],{"class":290},[127,109532,108403],{"class":147},[127,109534,25522],{"class":5758},[127,109536,725],{"class":290},[127,109538,42882],{"class":154},[127,109540,12977],{"class":147},[127,109542,25518],{"class":5758},[127,109544,725],{"class":290},[127,109546,108418],{"class":154},[127,109548,687],{"class":147},[19,109550,109551,109552,101547,109554,109556],{},"创建离屏渲染器。",[124,109553,25522],{},[124,109555,25518],{}," 决定输出图片大小。",[117,109558,109559],{"className":30918,"code":102205,"language":30920,"meta":122,"style":122},[124,109560,109561,109577],{"__ignoreMap":122},[127,109562,109563,109565,109567,109569,109571,109573,109575],{"class":129,"line":130},[127,109564,3567],{"class":290},[127,109566,102030],{"class":147},[127,109568,26584],{"class":290},[127,109570,32983],{"class":154},[127,109572,681],{"class":147},[127,109574,986],{"class":154},[127,109576,31326],{"class":147},[127,109578,109579],{"class":129,"line":137},[127,109580,102228],{"class":147},[19,109582,109583],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[117,109585,109587],{"className":30918,"code":109586,"language":30920,"meta":122,"style":122},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[124,109588,109589],{"__ignoreMap":122},[127,109590,109591,109594,109596,109598,109600],{"class":129,"line":130},[127,109592,109593],{"class":147},"renderer.update_scene(data, ",[127,109595,109044],{"class":5758},[127,109597,725],{"class":290},[127,109599,109049],{"class":781},[127,109601,687],{"class":147},[19,109603,109604,109605,109607,109608,109611],{},"告诉 renderer：用当前 ",[124,109606,33941],{}," 的状态更新画面，并使用名为 ",[124,109609,109610],{},"fixed_camera"," 的相机视角。",[117,109613,109614],{"className":30918,"code":108509,"language":30920,"meta":122,"style":122},[124,109615,109616],{"__ignoreMap":122},[127,109617,109618,109620,109622],{"class":129,"line":130},[127,109619,108109],{"class":147},[127,109621,725],{"class":290},[127,109623,108114],{"class":147},[19,109625,109626,109627,109630],{},"真正渲染出图像。",[124,109628,109629],{},"image"," 是一个 NumPy 数组，不是文件。",[117,109632,109634],{"className":30918,"code":109633,"language":30920,"meta":122,"style":122},"Image.fromarray(image).save(output_path)\n",[124,109635,109636],{"__ignoreMap":122},[127,109637,109638],{"class":129,"line":130},[127,109639,109633],{"class":147},[19,109641,109642,109643,28925],{},"把数组转换成图片，并保存到 ",[124,109644,109645],{},"render_output.png",[117,109647,109649],{"className":30918,"code":109648,"language":30920,"meta":122,"style":122},"renderer.close()\n",[124,109650,109651],{"__ignoreMap":122},[127,109652,109653],{"class":129,"line":130},[127,109654,109648],{"class":147},[19,109656,109657],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109659,102845],{"id":102844},[19,109661,109662,109663,109665,109666,28925],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[124,109664,109645],{},"，并输出图像数组形状，例如 ",[124,109667,109668],{},"(480, 640, 3)",[19,109670,109671],{},"如果图片里看不到方块，先检查：",[632,109673,109674,109677,109680],{},[635,109675,109676],{},"方块是否掉到相机视野外。",[635,109678,109679],{},"camera 位置是否合理。",[635,109681,109682,109683,109686],{},"是否在 ",[124,109684,109685],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109688,102877],{"id":102876},[19,109690,109691],{},"运行 viewer:",[117,109693,109695],{"className":24362,"code":109694,"language":24364,"meta":122,"style":122},"python ch5_viewer.py\n",[124,109696,109697],{"__ignoreMap":122},[127,109698,109699,109701],{"class":129,"line":130},[127,109700,30920],{"class":143},[127,109702,108825],{"class":781},[19,109704,109705],{},"运行 renderer:",[117,109707,109709],{"className":24362,"code":109708,"language":24364,"meta":122,"style":122},"python ch5_renderer.py\n",[124,109710,109711],{"__ignoreMap":122},[127,109712,109713,109715],{"class":129,"line":130},[127,109714,30920],{"class":143},[127,109716,109154],{"class":781},[19,109718,109719],{},"如果在服务器上运行:",[117,109721,109723],{"className":24362,"code":109722,"language":24364,"meta":122,"style":122},"MUJOCO_GL=egl python ch5_renderer.py\n",[124,109724,109725],{"__ignoreMap":122},[127,109726,109727,109729,109731,109733,109736],{"class":129,"line":130},[127,109728,108343],{"class":147},[127,109730,725],{"class":290},[127,109732,108333],{"class":781},[127,109734,109735],{"class":143}," python",[127,109737,109154],{"class":781},[19,109739,108311],{},[117,109741,109743],{"className":24362,"code":109742,"language":24364,"meta":122,"style":122},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[124,109744,109745],{"__ignoreMap":122},[127,109746,109747,109749,109751,109753,109755],{"class":129,"line":130},[127,109748,108343],{"class":147},[127,109750,725],{"class":290},[127,109752,108337],{"class":781},[127,109754,109735],{"class":143},[127,109756,109154],{"class":781},[19,109758,109759],{},"再做几个练习：",[632,109761,109762,109769,109772,109778],{},[635,109763,109764,109765,109768],{},"把 renderer 分辨率改成 ",[124,109766,109767],{},"height=240, width=320","，观察输出 shape。",[635,109770,109771],{},"把方块颜色改成蓝色，重新保存图片。",[635,109773,109774,109775,109777],{},"把相机 ",[124,109776,104675],{}," 改远一点，观察画面中物体是否变小。",[635,109779,109780,109781,102943,109784,109787],{},"把 viewer 示例中的 ",[124,109782,109783],{},"data.time \u003C 5.0",[124,109785,109786],{},"data.time \u003C 20.0","，观察更长时间。",[14,109789,102982],{"id":102981},[62,109791,109793],{"id":109792},"viewer-窗口打不开","viewer 窗口打不开",[19,109795,109796],{},"安装:",[117,109798,109800],{"className":24362,"code":109799,"language":24364,"meta":122,"style":122},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[124,109801,109802],{"__ignoreMap":122},[127,109803,109804,109806,109808,109810,109812,109814,109816,109818,109820,109822,109824],{"class":129,"line":130},[127,109805,25117],{"class":143},[127,109807,26856],{"class":781},[127,109809,24374],{"class":781},[127,109811,26941],{"class":154},[127,109813,103035],{"class":781},[127,109815,101363],{"class":781},[127,109817,103040],{"class":781},[127,109819,101376],{"class":781},[127,109821,101382],{"class":781},[127,109823,101373],{"class":781},[127,109825,109826],{"class":781}," libXinerama\n",[62,109828,109830],{"id":109829},"glfwerror",[124,109831,109832],{},"GLFWError",[19,109834,109835],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[62,109837,109839],{"id":109838},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109841,109842,109843,83068,109845,109847],{},"尝试 ",[124,109844,101566],{},[124,109846,101569],{},"。可能存在版本差异。",[62,109849,109850],{"id":109850},"保存图片是黑的",[19,109852,103104],{},[632,109854,109855,109858,109861,109871],{},[635,109856,109857],{},"XML 里是否有 light。",[635,109859,109860],{},"相机是否对着模型。",[635,109862,109863,109864,109867,109868,28925],{},"是否先 ",[124,109865,109866],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[124,109869,109870],{},"renderer.render()",[635,109872,109873],{},"物体是否已经掉出视野。",[62,109875,109876],{"id":109876},"远程服务器没有显示器",[19,109878,109879],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[117,109881,109882],{"className":24362,"code":109722,"language":24364,"meta":122,"style":122},[124,109883,109884],{"__ignoreMap":122},[127,109885,109886,109888,109890,109892,109894],{"class":129,"line":130},[127,109887,108343],{"class":147},[127,109889,725],{"class":290},[127,109891,108333],{"class":781},[127,109893,109735],{"class":143},[127,109895,109154],{"class":781},[19,109897,109898],{},"如果 EGL 不可用，再尝试：",[117,109900,109901],{"className":24362,"code":109742,"language":24364,"meta":122,"style":122},[124,109902,109903],{"__ignoreMap":122},[127,109904,109905,109907,109909,109911,109913],{"class":129,"line":130},[127,109906,108343],{"class":147},[127,109908,725],{"class":290},[127,109910,108337],{"class":781},[127,109912,109735],{"class":143},[127,109914,109154],{"class":781},[14,109916,103136],{"id":103135},[19,109918,109919],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[632,109921,109922,109925,109928],{},[635,109923,109924],{},"先用 viewer 看模型和控制是否正常。",[635,109926,109927],{},"再用 renderer 保存图片或构造视觉观测。",[635,109929,109930],{},"最后把状态、动作、图像、奖励组织成训练数据。",[575,109932,109933],{},"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":122,"searchDepth":137,"depth":137,"links":109935},[109936,109937,109938,109943,109948,109949,109950,109957],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":109939},[109940,109941,109942],{"id":108440,"depth":151,"text":108441},{"id":108470,"depth":151,"text":108471},{"id":108505,"depth":151,"text":108506},{"id":101781,"depth":137,"text":101782,"children":109944},[109945,109946,109947],{"id":102101,"depth":151,"text":102101},{"id":109250,"depth":151,"text":109251},{"id":109428,"depth":151,"text":109429},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":109951},[109952,109953,109954,109955,109956],{"id":109792,"depth":151,"text":109793},{"id":109829,"depth":151,"text":109832},{"id":109838,"depth":151,"text":109839},{"id":109850,"depth":151,"text":109850},{"id":109876,"depth":151,"text":109876},{"id":103135,"depth":137,"text":103136},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108048,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109964,"title":109965,"body":109966,"description":122,"extension":604,"meta":111877,"navigation":606,"path":111878,"seo":111879,"stem":111880,"__hash__":111881},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109967,"toc":111853},[109968,109971,109973,109976,109978,109997,110000,110006,110009,110011,110013,110037,110039,110053,110055,110096,110098,110109,110111,110114,110120,110123,110157,110160,110192,110195,110227,110231,110234,110274,110277,110283,110286,110292,110296,110299,110305,110308,110312,110315,110355,110357,110370,110373,110375,110957,110959,110971,110974,110985,110987,110990,111009,111021,111024,111045,111048,111051,111094,111097,111100,111120,111127,111129,111147,111162,111165,111171,111174,111180,111197,111204,111235,111246,111280,111291,111308,111317,111325,111330,111344,111347,111368,111374,111388,111393,111423,111433,111458,111466,111489,111492,111508,111511,111519,111525,111547,111560,111581,111590,111629,111640,111642,111645,111651,111654,111657,111663,111666,111686,111689,111691,111730,111732,111735,111743,111746,111749,111776,111779,111789,111795,111798,111804,111806,111812,111816,111819,111821,111824,111848,111851],[10,109969,109965],{"id":109970},"_6控制任务cartpole",[14,109972,101176],{"id":101175},[19,109974,109975],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109977,104860],{},[632,109979,109980,109983,109985,109988,109991,109994],{},[635,109981,109982],{},"slide joint",[635,109984,106713],{},[635,109986,109987],{},"cart force actuator",[635,109989,109990],{},"状态观测",[635,109992,109993],{},"简单控制循环",[635,109995,109996],{},"reward 设计雏形",[19,109998,109999],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[117,110001,110004],{"className":110002,"code":110003,"language":5729,"meta":122},[5727],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[124,110005,110003],{"__ignoreMap":122},[19,110007,110008],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110010,101299],{"id":101298},[19,110012,101302],{},[117,110014,110015],{"className":24362,"code":104917,"language":24364,"meta":122,"style":122},[124,110016,110017],{"__ignoreMap":122},[127,110018,110019,110021,110023,110025,110027,110029,110031,110033,110035],{"class":129,"line":130},[127,110020,25117],{"class":143},[127,110022,26856],{"class":781},[127,110024,24374],{"class":781},[127,110026,26941],{"class":154},[127,110028,104932],{"class":781},[127,110030,101327],{"class":781},[127,110032,103030],{"class":781},[127,110034,101343],{"class":781},[127,110036,104941],{"class":781},[19,110038,103348],{},[117,110040,110041],{"className":24362,"code":101448,"language":24364,"meta":122,"style":122},[124,110042,110043],{"__ignoreMap":122},[127,110044,110045,110047,110049,110051],{"class":129,"line":130},[127,110046,24371],{"class":143},[127,110048,24374],{"class":781},[127,110050,101459],{"class":781},[127,110052,101462],{"class":781},[19,110054,103365],{},[117,110056,110058],{"className":24362,"code":110057,"language":24364,"meta":122,"style":122},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[124,110059,110060,110077,110086],{"__ignoreMap":122},[127,110061,110062,110064,110066,110068,110071,110073,110075],{"class":129,"line":130},[127,110063,30870],{"class":143},[127,110065,29716],{"class":781},[127,110067,25656],{"class":154},[127,110069,110070],{"class":781}," mujoco-cartpole",[127,110072,101504],{"class":781},[127,110074,101507],{"class":154},[127,110076,101510],{"class":154},[127,110078,110079,110081,110083],{"class":129,"line":137},[127,110080,30870],{"class":143},[127,110082,101517],{"class":781},[127,110084,110085],{"class":781}," mujoco-cartpole\n",[127,110087,110088,110090,110092,110094],{"class":129,"line":151},[127,110089,24371],{"class":143},[127,110091,24374],{"class":781},[127,110093,101459],{"class":781},[127,110095,101462],{"class":781},[19,110097,101533],{},[632,110099,110100,110103,110106],{},[635,110101,110102],{},"本章不依赖 Gymnasium。",[635,110104,110105],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[635,110107,110108],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110110,101574],{"id":101573},[19,110112,110113],{},"Cartpole 的模型结构:",[117,110115,110118],{"className":110116,"code":110117,"language":5729,"meta":122},[5727],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[124,110119,110117],{"__ignoreMap":122},[19,110121,110122],{},"小车通过 slide joint 左右移动:",[117,110124,110126],{"className":53602,"code":110125,"language":53604,"meta":122,"style":122},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[124,110127,110128],{"__ignoreMap":122},[127,110129,110130,110132,110134,110136,110138,110141,110143,110145,110148,110150,110152,110155],{"class":129,"line":130},[127,110131,1584],{"class":147},[127,110133,103485],{"class":140},[127,110135,15462],{"class":143},[127,110137,725],{"class":147},[127,110139,110140],{"class":781},"\"cart_x\"",[127,110142,54359],{"class":143},[127,110144,725],{"class":147},[127,110146,110147],{"class":781},"\"slide\"",[127,110149,106557],{"class":143},[127,110151,725],{"class":147},[127,110153,110154],{"class":781},"\"1 0 0\"",[127,110156,101673],{"class":147},[19,110158,110159],{},"杆子通过 hinge joint 旋转:",[117,110161,110163],{"className":53602,"code":110162,"language":53604,"meta":122,"style":122},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[124,110164,110165],{"__ignoreMap":122},[127,110166,110167,110169,110171,110173,110175,110178,110180,110182,110184,110186,110188,110190],{"class":129,"line":130},[127,110168,1584],{"class":147},[127,110170,103485],{"class":140},[127,110172,15462],{"class":143},[127,110174,725],{"class":147},[127,110176,110177],{"class":781},"\"pole_hinge\"",[127,110179,54359],{"class":143},[127,110181,725],{"class":147},[127,110183,106548],{"class":781},[127,110185,106557],{"class":143},[127,110187,725],{"class":147},[127,110189,106562],{"class":781},[127,110191,101673],{"class":147},[19,110193,110194],{},"控制力作用在小车 slide joint 上:",[117,110196,110198],{"className":53602,"code":110197,"language":53604,"meta":122,"style":122},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[124,110199,110200],{"__ignoreMap":122},[127,110201,110202,110204,110206,110208,110210,110213,110215,110217,110219,110221,110223,110225],{"class":129,"line":130},[127,110203,1584],{"class":147},[127,110205,106603],{"class":140},[127,110207,15462],{"class":143},[127,110209,725],{"class":147},[127,110211,110212],{"class":781},"\"cart_motor\"",[127,110214,106613],{"class":143},[127,110216,725],{"class":147},[127,110218,110140],{"class":781},[127,110220,106620],{"class":143},[127,110222,725],{"class":147},[127,110224,54851],{"class":781},[127,110226,101673],{"class":147},[62,110228,110230],{"id":110229},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110232,110233],{},"这个简化模型有两个关节：",[814,110235,110236,110247],{},[817,110237,110238],{},[820,110239,110240,110242,110244],{},[823,110241,103288],{"align":24276},[823,110243,24277],{"align":24276},[823,110245,110246],{"align":24276},"对应状态",[860,110248,110249,110262],{},[820,110250,110251,110256,110259],{},[865,110252,110253],{"align":24276},[124,110254,110255],{},"cart_x",[865,110257,110258],{"align":24276},"slide",[865,110260,110261],{"align":24276},"小车 x 位置",[820,110263,110264,110269,110271],{},[865,110265,110266],{"align":24276},[124,110267,110268],{},"pole_hinge",[865,110270,106369],{"align":24276},[865,110272,110273],{"align":24276},"杆子角度",[19,110275,110276],{},"所以：",[117,110278,110281],{"className":110279,"code":110280,"language":5729,"meta":122},[5727],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[124,110282,110280],{"__ignoreMap":122},[19,110284,110285],{},"把它们拼起来就是观测：",[117,110287,110290],{"className":110288,"code":110289,"language":5729,"meta":122},[5727],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[124,110291,110289],{"__ignoreMap":122},[62,110293,110295],{"id":110294},"action-是什么","action 是什么",[19,110297,110298],{},"本章只有一个 actuator：",[117,110300,110303],{"className":110301,"code":110302,"language":5729,"meta":122},[5727],"data.ctrl[0] = action\n",[124,110304,110302],{"__ignoreMap":122},[19,110306,110307],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[62,110309,110311],{"id":110310},"reward-是什么","reward 是什么",[19,110313,110314],{},"奖励函数：",[117,110316,110318],{"className":30918,"code":110317,"language":30920,"meta":122,"style":122},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[124,110319,110320],{"__ignoreMap":122},[127,110321,110322,110324,110327,110329,110331,110333,110336,110338,110341,110343,110345,110347,110350,110352],{"class":129,"line":130},[127,110323,17587],{"class":290},[127,110325,110326],{"class":154}," float",[127,110328,681],{"class":147},[127,110330,102932],{"class":154},[127,110332,52806],{"class":290},[127,110334,110335],{"class":154}," 0.1",[127,110337,7060],{"class":290},[127,110339,110340],{"class":147}," cart_x ",[127,110342,1130],{"class":290},[127,110344,110340],{"class":147},[127,110346,1207],{"class":290},[127,110348,110349],{"class":147}," pole_angle ",[127,110351,1130],{"class":290},[127,110353,110354],{"class":147}," pole_angle)\n",[19,110356,106755],{},[632,110358,110359,110364,110367],{},[635,110360,110361,110362,28925],{},"基础奖励是 ",[124,110363,102932],{},[635,110365,110366],{},"小车离中心越远，扣分越多。",[635,110368,110369],{},"杆子角度越大，扣分越多。",[19,110371,110372],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110374,101782],{"id":101781},[117,110376,110378],{"className":30918,"code":110377,"language":30920,"meta":122,"style":122},"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",[124,110379,110380,110386,110396,110400,110404,110412,110417,110421,110425,110429,110434,110438,110443,110448,110453,110457,110462,110467,110472,110476,110480,110484,110488,110492,110497,110501,110505,110509,110513,110517,110527,110534,110538,110542,110556,110570,110583,110613,110617,110621,110633,110645,110653,110657,110670,110674,110678,110687,110691,110707,110717,110730,110743,110747,110770,110788,110792,110804,110808,110812,110822,110832,110836,110852,110893,110897,110917,110933,110937,110941,110953],{"__ignoreMap":122},[127,110381,110382,110384],{"class":129,"line":130},[127,110383,30932],{"class":290},[127,110385,101830],{"class":147},[127,110387,110388,110390,110392,110394],{"class":129,"line":137},[127,110389,30932],{"class":290},[127,110391,31920],{"class":147},[127,110393,31923],{"class":290},[127,110395,31926],{"class":147},[127,110397,110398],{"class":129,"line":151},[127,110399,2942],{"emptyLinePlaceholder":606},[127,110401,110402],{"class":129,"line":167},[127,110403,2942],{"emptyLinePlaceholder":606},[127,110405,110406,110408,110410],{"class":129,"line":415},[127,110407,101843],{"class":154},[127,110409,14106],{"class":290},[127,110411,101848],{"class":781},[127,110413,110414],{"class":129,"line":421},[127,110415,110416],{"class":781},"\u003Cmujoco model=\"cartpole\">\n",[127,110418,110419],{"class":129,"line":1766},[127,110420,101858],{"class":781},[127,110422,110423],{"class":129,"line":1856},[127,110424,2942],{"emptyLinePlaceholder":606},[127,110426,110427],{"class":129,"line":1862},[127,110428,101867],{"class":781},[127,110430,110431],{"class":129,"line":1874},[127,110432,110433],{"class":781},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[127,110435,110436],{"class":129,"line":2155},[127,110437,2942],{"emptyLinePlaceholder":606},[127,110439,110440],{"class":129,"line":2160},[127,110441,110442],{"class":781},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[127,110444,110445],{"class":129,"line":2166},[127,110446,110447],{"class":781},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[127,110449,110450],{"class":129,"line":2171},[127,110451,110452],{"class":781},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[127,110454,110455],{"class":129,"line":2185},[127,110456,2942],{"emptyLinePlaceholder":606},[127,110458,110459],{"class":129,"line":2190},[127,110460,110461],{"class":781},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[127,110463,110464],{"class":129,"line":2196},[127,110465,110466],{"class":781},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[127,110468,110469],{"class":129,"line":2217},[127,110470,110471],{"class":781},"        \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",[127,110473,110474],{"class":129,"line":2222},[127,110475,106967],{"class":781},[127,110477,110478],{"class":129,"line":2236},[127,110479,101896],{"class":781},[127,110481,110482],{"class":129,"line":2241},[127,110483,101901],{"class":781},[127,110485,110486],{"class":129,"line":2270},[127,110487,2942],{"emptyLinePlaceholder":606},[127,110489,110490],{"class":129,"line":2275},[127,110491,106984],{"class":781},[127,110493,110494],{"class":129,"line":2292},[127,110495,110496],{"class":781},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[127,110498,110499],{"class":129,"line":2297},[127,110500,106994],{"class":781},[127,110502,110503],{"class":129,"line":2302},[127,110504,101906],{"class":781},[127,110506,110507],{"class":129,"line":2307},[127,110508,96227],{"class":781},[127,110510,110511],{"class":129,"line":2321},[127,110512,2942],{"emptyLinePlaceholder":606},[127,110514,110515],{"class":129,"line":2326},[127,110516,2942],{"emptyLinePlaceholder":606},[127,110518,110519,110521,110524],{"class":129,"line":3119},[127,110520,32487],{"class":290},[127,110522,110523],{"class":143}," get_observation",[127,110525,110526],{"class":147},"(data: mujoco.MjData) -> np.ndarray:\n",[127,110528,110529,110531],{"class":129,"line":3133},[127,110530,4632],{"class":290},[127,110532,110533],{"class":147}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[127,110535,110536],{"class":129,"line":3141},[127,110537,2942],{"emptyLinePlaceholder":606},[127,110539,110540],{"class":129,"line":3146},[127,110541,2942],{"emptyLinePlaceholder":606},[127,110543,110544,110546,110549,110552,110554],{"class":129,"line":3152},[127,110545,32487],{"class":290},[127,110547,110548],{"class":143}," compute_reward",[127,110550,110551],{"class":147},"(obs: np.ndarray) -> ",[127,110553,719],{"class":154},[127,110555,4281],{"class":147},[127,110557,110558,110561,110563,110566,110568],{"class":129,"line":3158},[127,110559,110560],{"class":147},"    cart_x ",[127,110562,725],{"class":290},[127,110564,110565],{"class":147}," obs[",[127,110567,867],{"class":154},[127,110569,33786],{"class":147},[127,110571,110572,110575,110577,110579,110581],{"class":129,"line":3163},[127,110573,110574],{"class":147},"    pole_angle ",[127,110576,725],{"class":290},[127,110578,110565],{"class":147},[127,110580,893],{"class":154},[127,110582,33786],{"class":147},[127,110584,110585,110587,110589,110591,110593,110595,110597,110599,110601,110603,110605,110607,110609,110611],{"class":129,"line":8490},[127,110586,4632],{"class":290},[127,110588,110326],{"class":154},[127,110590,681],{"class":147},[127,110592,102932],{"class":154},[127,110594,52806],{"class":290},[127,110596,110335],{"class":154},[127,110598,7060],{"class":290},[127,110600,110340],{"class":147},[127,110602,1130],{"class":290},[127,110604,110340],{"class":147},[127,110606,1207],{"class":290},[127,110608,110349],{"class":147},[127,110610,1130],{"class":290},[127,110612,110354],{"class":147},[127,110614,110615],{"class":129,"line":8514},[127,110616,2942],{"emptyLinePlaceholder":606},[127,110618,110619],{"class":129,"line":8519},[127,110620,2942],{"emptyLinePlaceholder":606},[127,110622,110623,110625,110627,110629,110631],{"class":129,"line":8525},[127,110624,32487],{"class":290},[127,110626,2515],{"class":143},[127,110628,101927],{"class":147},[127,110630,96215],{"class":154},[127,110632,4281],{"class":147},[127,110634,110635,110637,110639,110641,110643],{"class":129,"line":8552},[127,110636,101936],{"class":147},[127,110638,725],{"class":290},[127,110640,101941],{"class":147},[127,110642,101843],{"class":154},[127,110644,687],{"class":147},[127,110646,110647,110649,110651],{"class":129,"line":8557},[127,110648,101950],{"class":147},[127,110650,725],{"class":290},[127,110652,101955],{"class":147},[127,110654,110655],{"class":129,"line":8563},[127,110656,2942],{"emptyLinePlaceholder":606},[127,110658,110659,110661,110663,110665,110667],{"class":129,"line":8575},[127,110660,105598],{"class":147},[127,110662,893],{"class":154},[127,110664,4985],{"class":147},[127,110666,725],{"class":290},[127,110668,110669],{"class":154}," 0.1\n",[127,110671,110672],{"class":129,"line":8587},[127,110673,105611],{"class":147},[127,110675,110676],{"class":129,"line":8599},[127,110677,2942],{"emptyLinePlaceholder":606},[127,110679,110680,110683,110685],{"class":129,"line":10258},[127,110681,110682],{"class":147},"    total_reward ",[127,110684,725],{"class":290},[127,110686,105290],{"class":154},[127,110688,110689],{"class":129,"line":10283},[127,110690,2942],{"emptyLinePlaceholder":606},[127,110692,110693,110695,110697,110699,110701,110703,110705],{"class":129,"line":10306},[127,110694,3743],{"class":290},[127,110696,32156],{"class":147},[127,110698,26584],{"class":290},[127,110700,32983],{"class":154},[127,110702,681],{"class":147},[127,110704,6952],{"class":154},[127,110706,31326],{"class":147},[127,110708,110709,110712,110714],{"class":129,"line":10330},[127,110710,110711],{"class":147},"        obs ",[127,110713,725],{"class":290},[127,110715,110716],{"class":147}," get_observation(data)\n",[127,110718,110719,110722,110724,110726,110728],{"class":129,"line":10335},[127,110720,110721],{"class":147},"        pole_angle ",[127,110723,725],{"class":290},[127,110725,110565],{"class":147},[127,110727,893],{"class":154},[127,110729,33786],{"class":147},[127,110731,110732,110735,110737,110739,110741],{"class":129,"line":10340},[127,110733,110734],{"class":147},"        pole_angular_velocity ",[127,110736,725],{"class":290},[127,110738,110565],{"class":147},[127,110740,749],{"class":154},[127,110742,33786],{"class":147},[127,110744,110745],{"class":129,"line":10345},[127,110746,2942],{"emptyLinePlaceholder":606},[127,110748,110749,110752,110754,110757,110759,110761,110763,110765,110767],{"class":129,"line":10354},[127,110750,110751],{"class":147},"        action ",[127,110753,725],{"class":290},[127,110755,110756],{"class":154}," 2.0",[127,110758,7060],{"class":290},[127,110760,110349],{"class":147},[127,110762,1156],{"class":290},[127,110764,62400],{"class":154},[127,110766,7060],{"class":290},[127,110768,110769],{"class":147}," pole_angular_velocity\n",[127,110771,110772,110774,110776,110778,110780,110782,110784,110786],{"class":129,"line":10359},[127,110773,110751],{"class":147},[127,110775,725],{"class":290},[127,110777,107976],{"class":147},[127,110779,1207],{"class":290},[127,110781,102932],{"class":154},[127,110783,12977],{"class":147},[127,110785,102932],{"class":154},[127,110787,687],{"class":147},[127,110789,110790],{"class":129,"line":10365},[127,110791,2942],{"emptyLinePlaceholder":606},[127,110793,110794,110796,110798,110800,110802],{"class":129,"line":10386},[127,110795,107146],{"class":147},[127,110797,867],{"class":154},[127,110799,4985],{"class":147},[127,110801,725],{"class":290},[127,110803,107999],{"class":147},[127,110805,110806],{"class":129,"line":10392},[127,110807,102045],{"class":147},[127,110809,110810],{"class":129,"line":10406},[127,110811,2942],{"emptyLinePlaceholder":606},[127,110813,110814,110817,110819],{"class":129,"line":10412},[127,110815,110816],{"class":147},"        reward ",[127,110818,725],{"class":290},[127,110820,110821],{"class":147}," compute_reward(get_observation(data))\n",[127,110823,110824,110827,110829],{"class":129,"line":10439},[127,110825,110826],{"class":147},"        total_reward ",[127,110828,10019],{"class":290},[127,110830,110831],{"class":147}," reward\n",[127,110833,110834],{"class":129,"line":10448},[127,110835,2942],{"emptyLinePlaceholder":606},[127,110837,110838,110840,110842,110844,110846,110848,110850],{"class":129,"line":10454},[127,110839,3039],{"class":290},[127,110841,32156],{"class":147},[127,110843,1003],{"class":290},[127,110845,6296],{"class":154},[127,110847,102088],{"class":290},[127,110849,4635],{"class":154},[127,110851,4281],{"class":147},[127,110853,110854,110856,110858,110861,110864,110867,110870,110872,110875,110878,110880,110882,110884,110886,110889,110891],{"class":129,"line":10462},[127,110855,35190],{"class":154},[127,110857,681],{"class":147},[127,110859,110860],{"class":781},"\"step:\"",[127,110862,110863],{"class":147},", step, ",[127,110865,110866],{"class":781},"\"obs:\"",[127,110868,110869],{"class":147},", np.round(obs, ",[127,110871,749],{"class":154},[127,110873,110874],{"class":147},"), ",[127,110876,110877],{"class":781},"\"action:\"",[127,110879,12977],{"class":147},[127,110881,32558],{"class":154},[127,110883,681],{"class":147},[127,110885,719],{"class":154},[127,110887,110888],{"class":147},"(action), ",[127,110890,749],{"class":154},[127,110892,31037],{"class":147},[127,110894,110895],{"class":129,"line":10467},[127,110896,2942],{"emptyLinePlaceholder":606},[127,110898,110899,110901,110903,110906,110908,110910,110913,110915],{"class":129,"line":17145},[127,110900,31839],{"class":154},[127,110902,681],{"class":147},[127,110904,110905],{"class":781},"\"total_reward:\"",[127,110907,12977],{"class":147},[127,110909,32558],{"class":154},[127,110911,110912],{"class":147},"(total_reward, ",[127,110914,749],{"class":154},[127,110916,31037],{"class":147},[127,110918,110919,110921,110923,110926,110929,110931],{"class":129,"line":17151},[127,110920,31839],{"class":154},[127,110922,681],{"class":147},[127,110924,110925],{"class":781},"\"final obs:\"",[127,110927,110928],{"class":147},", np.round(get_observation(data), ",[127,110930,749],{"class":154},[127,110932,31037],{"class":147},[127,110934,110935],{"class":129,"line":17174},[127,110936,2942],{"emptyLinePlaceholder":606},[127,110938,110939],{"class":129,"line":17180},[127,110940,2942],{"emptyLinePlaceholder":606},[127,110942,110943,110945,110947,110949,110951],{"class":129,"line":17203},[127,110944,2075],{"class":290},[127,110946,31760],{"class":154},[127,110948,102088],{"class":290},[127,110950,102091],{"class":781},[127,110952,4281],{"class":147},[127,110954,110955],{"class":129,"line":17217},[127,110956,102098],{"class":147},[19,110958,104099],{},[117,110960,110962],{"className":24362,"code":110961,"language":24364,"meta":122,"style":122},"touch ch6_cartpole.py\n",[124,110963,110964],{"__ignoreMap":122},[127,110965,110966,110968],{"class":129,"line":130},[127,110967,101812],{"class":143},[127,110969,110970],{"class":781}," ch6_cartpole.py\n",[19,110972,110973],{},"运行：",[117,110975,110977],{"className":24362,"code":110976,"language":24364,"meta":122,"style":122},"python ch6_cartpole.py\n",[124,110978,110979],{"__ignoreMap":122},[127,110980,110981,110983],{"class":129,"line":130},[127,110982,30920],{"class":143},[127,110984,110970],{"class":781},[62,110986,102101],{"id":102101},[19,110988,110989],{},"构造观测：",[117,110991,110993],{"className":30918,"code":110992,"language":30920,"meta":122,"style":122},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[124,110994,110995,111003],{"__ignoreMap":122},[127,110996,110997,110999,111001],{"class":129,"line":130},[127,110998,32487],{"class":290},[127,111000,110523],{"class":143},[127,111002,110526],{"class":147},[127,111004,111005,111007],{"class":129,"line":137},[127,111006,4632],{"class":290},[127,111008,110533],{"class":147},[19,111010,111011,111014,111015,111017,111018,111020],{},[124,111012,111013],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[124,111016,104559],{}," 2 维，",[124,111019,104889],{}," 2 维，所以 obs 是 4 维。",[19,111022,111023],{},"设置初始角度：",[117,111025,111027],{"className":30918,"code":111026,"language":30920,"meta":122,"style":122},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[124,111028,111029,111041],{"__ignoreMap":122},[127,111030,111031,111033,111035,111037,111039],{"class":129,"line":130},[127,111032,105228],{"class":147},[127,111034,893],{"class":154},[127,111036,4985],{"class":147},[127,111038,725],{"class":290},[127,111040,110669],{"class":154},[127,111042,111043],{"class":129,"line":137},[127,111044,105072],{"class":147},[19,111046,111047],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111049,111050],{},"简单反馈控制：",[117,111052,111054],{"className":30918,"code":111053,"language":30920,"meta":122,"style":122},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[124,111055,111056,111076],{"__ignoreMap":122},[127,111057,111058,111060,111062,111064,111066,111068,111070,111072,111074],{"class":129,"line":130},[127,111059,107971],{"class":147},[127,111061,725],{"class":290},[127,111063,110756],{"class":154},[127,111065,7060],{"class":290},[127,111067,110349],{"class":147},[127,111069,1156],{"class":290},[127,111071,62400],{"class":154},[127,111073,7060],{"class":290},[127,111075,110769],{"class":147},[127,111077,111078,111080,111082,111084,111086,111088,111090,111092],{"class":129,"line":137},[127,111079,107971],{"class":147},[127,111081,725],{"class":290},[127,111083,107976],{"class":147},[127,111085,1207],{"class":290},[127,111087,102932],{"class":154},[127,111089,12977],{"class":147},[127,111091,102932],{"class":154},[127,111093,687],{"class":147},[19,111095,111096],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111098,111099],{},"限制动作：",[117,111101,111103],{"className":30918,"code":111102,"language":30920,"meta":122,"style":122},"np.clip(action, -1.0, 1.0)\n",[124,111104,111105],{"__ignoreMap":122},[127,111106,111107,111110,111112,111114,111116,111118],{"class":129,"line":130},[127,111108,111109],{"class":147},"np.clip(action, ",[127,111111,1207],{"class":290},[127,111113,102932],{"class":154},[127,111115,12977],{"class":147},[127,111117,102932],{"class":154},[127,111119,687],{"class":147},[19,111121,111122,111123,111126],{},"因为 XML 里 ",[124,111124,111125],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[62,111128,102237],{"id":102237},[117,111130,111131],{"className":30918,"code":110992,"language":30920,"meta":122,"style":122},[124,111132,111133,111141],{"__ignoreMap":122},[127,111134,111135,111137,111139],{"class":129,"line":130},[127,111136,32487],{"class":290},[127,111138,110523],{"class":143},[127,111140,110526],{"class":147},[127,111142,111143,111145],{"class":129,"line":137},[127,111144,4632],{"class":290},[127,111146,110533],{"class":147},[19,111148,111149,111150,111153,111154,111157,111158,111161],{},"这段定义了一个函数，用来获取当前观测。",[124,111151,111152],{},"data.qpos.copy()"," 是位置数组副本，",[124,111155,111156],{},"data.qvel.copy()"," 是速度数组副本。",[124,111159,111160],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111163,111164],{},"在本章模型里：",[117,111166,111169],{"className":111167,"code":111168,"language":5729,"meta":122},[5727],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[124,111170,111168],{"__ignoreMap":122},[19,111172,111173],{},"所以返回的 obs 是：",[117,111175,111178],{"className":111176,"code":111177,"language":5729,"meta":122},[5727],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[124,111179,111177],{"__ignoreMap":122},[117,111181,111183],{"className":30918,"code":111182,"language":30920,"meta":122,"style":122},"def compute_reward(obs: np.ndarray) -> float:\n",[124,111184,111185],{"__ignoreMap":122},[127,111186,111187,111189,111191,111193,111195],{"class":129,"line":130},[127,111188,32487],{"class":290},[127,111190,110548],{"class":143},[127,111192,110551],{"class":147},[127,111194,719],{"class":154},[127,111196,4281],{"class":147},[19,111198,111199,111200,111203],{},"这行定义奖励函数。输入是观测 ",[124,111201,111202],{},"obs","，输出是一个浮点数奖励。",[117,111205,111207],{"className":30918,"code":111206,"language":30920,"meta":122,"style":122},"cart_x = obs[0]\npole_angle = obs[1]\n",[124,111208,111209,111222],{"__ignoreMap":122},[127,111210,111211,111214,111216,111218,111220],{"class":129,"line":130},[127,111212,111213],{"class":147},"cart_x ",[127,111215,725],{"class":290},[127,111217,110565],{"class":147},[127,111219,867],{"class":154},[127,111221,33786],{"class":147},[127,111223,111224,111227,111229,111231,111233],{"class":129,"line":137},[127,111225,111226],{"class":147},"pole_angle ",[127,111228,725],{"class":290},[127,111230,110565],{"class":147},[127,111232,893],{"class":154},[127,111234,33786],{"class":147},[19,111236,111237,111238,111241,111242,111245],{},"数组索引从 0 开始。",[124,111239,111240],{},"obs[0]"," 是第一个元素，也就是小车位置。",[124,111243,111244],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[117,111247,111248],{"className":30918,"code":110317,"language":30920,"meta":122,"style":122},[124,111249,111250],{"__ignoreMap":122},[127,111251,111252,111254,111256,111258,111260,111262,111264,111266,111268,111270,111272,111274,111276,111278],{"class":129,"line":130},[127,111253,17587],{"class":290},[127,111255,110326],{"class":154},[127,111257,681],{"class":147},[127,111259,102932],{"class":154},[127,111261,52806],{"class":290},[127,111263,110335],{"class":154},[127,111265,7060],{"class":290},[127,111267,110340],{"class":147},[127,111269,1130],{"class":290},[127,111271,110340],{"class":147},[127,111273,1207],{"class":290},[127,111275,110349],{"class":147},[127,111277,1130],{"class":290},[127,111279,110354],{"class":147},[19,111281,111282,111283,111286,111287,111290],{},"这行计算奖励。",[124,111284,111285],{},"cart_x * cart_x"," 是小车位置的平方，",[124,111288,111289],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[117,111292,111294],{"className":30918,"code":111293,"language":30920,"meta":122,"style":122},"data.qpos[1] = 0.1\n",[124,111295,111296],{"__ignoreMap":122},[127,111297,111298,111300,111302,111304,111306],{"class":129,"line":130},[127,111299,105228],{"class":147},[127,111301,893],{"class":154},[127,111303,4985],{"class":147},[127,111305,725],{"class":290},[127,111307,110669],{"class":154},[19,111309,111310,111311,111313,111314,111316],{},"手动设置杆子的初始角度。因为 ",[124,111312,105985],{}," 是小车位置，",[124,111315,105988],{}," 是杆子角度，所以这里改的是杆子。",[117,111318,111319],{"className":30918,"code":105072,"language":30920,"meta":122,"style":122},[124,111320,111321],{"__ignoreMap":122},[127,111322,111323],{"class":129,"line":130},[127,111324,105072],{"class":147},[19,111326,106031,111327,111329],{},[124,111328,104559],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[117,111331,111333],{"className":30918,"code":111332,"language":30920,"meta":122,"style":122},"total_reward = 0.0\n",[124,111334,111335],{"__ignoreMap":122},[127,111336,111337,111340,111342],{"class":129,"line":130},[127,111338,111339],{"class":147},"total_reward ",[127,111341,725],{"class":290},[127,111343,105290],{"class":154},[19,111345,111346],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[117,111348,111350],{"className":30918,"code":111349,"language":30920,"meta":122,"style":122},"for step in range(1000):\n",[124,111351,111352],{"__ignoreMap":122},[127,111353,111354,111356,111358,111360,111362,111364,111366],{"class":129,"line":130},[127,111355,3567],{"class":290},[127,111357,32156],{"class":147},[127,111359,26584],{"class":290},[127,111361,32983],{"class":154},[127,111363,681],{"class":147},[127,111365,6952],{"class":154},[127,111367,31326],{"class":147},[19,111369,111370,111371,111373],{},"循环 1000 步。",[124,111372,107663],{}," 是当前步数，从 0 到 999。",[117,111375,111377],{"className":30918,"code":111376,"language":30920,"meta":122,"style":122},"obs = get_observation(data)\n",[124,111378,111379],{"__ignoreMap":122},[127,111380,111381,111384,111386],{"class":129,"line":130},[127,111382,111383],{"class":147},"obs ",[127,111385,725],{"class":290},[127,111387,110716],{"class":147},[19,111389,111390,111391,28925],{},"读取当前状态，保存到 ",[124,111392,111202],{},[117,111394,111396],{"className":30918,"code":111395,"language":30920,"meta":122,"style":122},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[124,111397,111398,111410],{"__ignoreMap":122},[127,111399,111400,111402,111404,111406,111408],{"class":129,"line":130},[127,111401,111226],{"class":147},[127,111403,725],{"class":290},[127,111405,110565],{"class":147},[127,111407,893],{"class":154},[127,111409,33786],{"class":147},[127,111411,111412,111415,111417,111419,111421],{"class":129,"line":137},[127,111413,111414],{"class":147},"pole_angular_velocity ",[127,111416,725],{"class":290},[127,111418,110565],{"class":147},[127,111420,749],{"class":154},[127,111422,33786],{"class":147},[19,111424,111425,111426,111429,111430,28925],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[124,111427,111428],{},"obs[3]","？因为 obs 的顺序是 ",[124,111431,111432],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[117,111434,111436],{"className":30918,"code":111435,"language":30920,"meta":122,"style":122},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[124,111437,111438],{"__ignoreMap":122},[127,111439,111440,111442,111444,111446,111448,111450,111452,111454,111456],{"class":129,"line":130},[127,111441,107971],{"class":147},[127,111443,725],{"class":290},[127,111445,110756],{"class":154},[127,111447,7060],{"class":290},[127,111449,110349],{"class":147},[127,111451,1156],{"class":290},[127,111453,62400],{"class":154},[127,111455,7060],{"class":290},[127,111457,110769],{"class":147},[19,111459,111460,111461,101547,111463,111465],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[124,111462,105789],{},[124,111464,35869],{}," 是人为设置的系数，不是固定公式。",[117,111467,111469],{"className":30918,"code":111468,"language":30920,"meta":122,"style":122},"action = np.clip(action, -1.0, 1.0)\n",[124,111470,111471],{"__ignoreMap":122},[127,111472,111473,111475,111477,111479,111481,111483,111485,111487],{"class":129,"line":130},[127,111474,107971],{"class":147},[127,111476,725],{"class":290},[127,111478,107976],{"class":147},[127,111480,1207],{"class":290},[127,111482,102932],{"class":154},[127,111484,12977],{"class":147},[127,111486,102932],{"class":154},[127,111488,687],{"class":147},[19,111490,111491],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[117,111493,111494],{"className":30918,"code":110302,"language":30920,"meta":122,"style":122},[124,111495,111496],{"__ignoreMap":122},[127,111497,111498,111500,111502,111504,111506],{"class":129,"line":130},[127,111499,106400],{"class":147},[127,111501,867],{"class":154},[127,111503,4985],{"class":147},[127,111505,725],{"class":290},[127,111507,107999],{"class":147},[19,111509,111510],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[117,111512,111513],{"className":30918,"code":105034,"language":30920,"meta":122,"style":122},[124,111514,111515],{"__ignoreMap":122},[127,111516,111517],{"class":129,"line":130},[127,111518,105034],{"class":147},[19,111520,111521,111522,111524],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[124,111523,106655],{}," 计算小车和杆子的下一刻状态。",[117,111526,111528],{"className":30918,"code":111527,"language":30920,"meta":122,"style":122},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[124,111529,111530,111539],{"__ignoreMap":122},[127,111531,111532,111535,111537],{"class":129,"line":130},[127,111533,111534],{"class":147},"reward ",[127,111536,725],{"class":290},[127,111538,110821],{"class":147},[127,111540,111541,111543,111545],{"class":129,"line":137},[127,111542,111339],{"class":147},[127,111544,10019],{"class":290},[127,111546,110831],{"class":147},[19,111548,111549,111550,111552,111553,111556,111557,28925],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[124,111551,10019],{}," 是简写，",[124,111554,111555],{},"total_reward += reward"," 等价于 ",[124,111558,111559],{},"total_reward = total_reward + reward",[117,111561,111563],{"className":30918,"code":111562,"language":30920,"meta":122,"style":122},"if step % 100 == 0:\n",[124,111564,111565],{"__ignoreMap":122},[127,111566,111567,111569,111571,111573,111575,111577,111579],{"class":129,"line":130},[127,111568,2075],{"class":290},[127,111570,32156],{"class":147},[127,111572,1003],{"class":290},[127,111574,6296],{"class":154},[127,111576,102088],{"class":290},[127,111578,4635],{"class":154},[127,111580,4281],{"class":147},[19,111582,111583,111585,111586,111589],{},[124,111584,1003],{}," 是取余数。",[124,111587,111588],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[117,111591,111593],{"className":30918,"code":111592,"language":30920,"meta":122,"style":122},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[124,111594,111595],{"__ignoreMap":122},[127,111596,111597,111599,111601,111603,111605,111607,111609,111611,111613,111615,111617,111619,111621,111623,111625,111627],{"class":129,"line":130},[127,111598,30955],{"class":154},[127,111600,681],{"class":147},[127,111602,110860],{"class":781},[127,111604,110863],{"class":147},[127,111606,110866],{"class":781},[127,111608,110869],{"class":147},[127,111610,749],{"class":154},[127,111612,110874],{"class":147},[127,111614,110877],{"class":781},[127,111616,12977],{"class":147},[127,111618,32558],{"class":154},[127,111620,681],{"class":147},[127,111622,719],{"class":154},[127,111624,110888],{"class":147},[127,111626,749],{"class":154},[127,111628,31037],{"class":147},[19,111630,111631,111632,111635,111636,111639],{},"打印当前步数、观测和动作。",[124,111633,111634],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[124,111637,111638],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111641,102845],{"id":102844},[19,111643,111644],{},"观测向量:",[117,111646,111649],{"className":111647,"code":111648,"language":5729,"meta":122},[5727],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[124,111650,111648],{"__ignoreMap":122},[19,111652,111653],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111655,111656],{},"每隔 100 步会打印一次：",[117,111658,111661],{"className":111659,"code":111660,"language":5729,"meta":122},[5727],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[124,111662,111660],{"__ignoreMap":122},[19,111664,111665],{},"重点观察：",[632,111667,111668,111674,111679],{},[635,111669,111670,111673],{},[124,111671,111672],{},"pole_angle"," 是否越来越大。",[635,111675,111676,111678],{},[124,111677,110255],{}," 是否跑得太远。",[635,111680,111681,111682,83068,111684,28925],{},"action 是否经常被 clip 到 ",[124,111683,104444],{},[124,111685,893],{},[19,111687,111688],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111690,102877],{"id":102876},[632,111692,111693,111699,111702,111708,111718,111724,111727],{},[635,111694,111695,111696,28925],{},"把初始角度改为 ",[124,111697,111698],{},"data.qpos[1] = 0.3",[635,111700,111701],{},"重新运行，观察控制是否变差。",[635,111703,111704,111705,111707],{},"把 actuator ",[124,111706,107596],{}," 改小。",[635,111709,111710,111711,111714,111715,28925],{},"打印 ",[124,111712,111713],{},"model.nq, model.nv, model.nu","，应为 ",[124,111716,111717],{},"2 2 1",[635,111719,111720,111721,111723],{},"把 reward 里的 ",[124,111722,111289],{}," 系数改大，观察总奖励变化。",[635,111725,111726],{},"把控制器改成反号，观察杆子是否更容易倒。",[635,111728,111729],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111731,102982],{"id":102981},[62,111733,111734],{"id":111734},"杆子方向和预期不一致",[19,111736,102925,111737,111739,111740,111742],{},[124,111738,106768],{}," 和 capsule 的 ",[124,111741,103705],{},"，必要时用 viewer 可视化确认。",[62,111744,111745],{"id":111745},"控制器越控越倒",[19,111747,111748],{},"说明反馈符号可能反了，尝试:",[117,111750,111752],{"className":30918,"code":111751,"language":30920,"meta":122,"style":122},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[124,111753,111754],{"__ignoreMap":122},[127,111755,111756,111758,111760,111762,111764,111766,111768,111770,111772,111774],{"class":129,"line":130},[127,111757,107971],{"class":147},[127,111759,725],{"class":290},[127,111761,52806],{"class":290},[127,111763,105789],{"class":154},[127,111765,7060],{"class":290},[127,111767,110349],{"class":147},[127,111769,1207],{"class":290},[127,111771,62400],{"class":154},[127,111773,7060],{"class":290},[127,111775,110769],{"class":147},[62,111777,111778],{"id":111778},"小车飞走",[19,111780,111781,111782,111784,111785,111788],{},"降低 ",[124,111783,107596],{}," 或缩小 ",[124,111786,111787],{},"action"," 的 clip 范围。",[62,111790,111792,111794],{"id":111791},"obs3-为什么是杆子角速度",[124,111793,111428],{}," 为什么是杆子角速度",[19,111796,111797],{},"因为这个模型里：",[117,111799,111802],{"className":111800,"code":111801,"language":5729,"meta":122},[5727],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[124,111803,111801],{"__ignoreMap":122},[19,111805,110276],{},[117,111807,111810],{"className":111808,"code":111809,"language":5729,"meta":122},[5727],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[124,111811,111809],{"__ignoreMap":122},[62,111813,111815],{"id":111814},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111817,111818],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111820,103136],{"id":103135},[19,111822,111823],{},"一个控制任务通常包含：",[632,111825,111826,111829,111837,111842,111845],{},[635,111827,111828],{},"模型：Cartpole 的 body、joint、actuator。",[635,111830,111831,111832,888,111834,111836],{},"观测：从 ",[124,111833,104559],{},[124,111835,104889],{}," 里取状态。",[635,111838,111839,111840,28925],{},"动作：写入 ",[124,111841,101605],{},[635,111843,111844],{},"奖励：根据任务目标打分。",[635,111846,111847],{},"循环：obs -> action -> step -> reward。",[19,111849,111850],{},"这就是后面 Gymnasium 环境的基本骨架。",[575,111852,104815],{},{"title":122,"searchDepth":137,"depth":137,"links":111854},[111855,111856,111857,111862,111866,111867,111868,111876],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":111858},[111859,111860,111861],{"id":110229,"depth":151,"text":110230},{"id":110294,"depth":151,"text":110295},{"id":110310,"depth":151,"text":110311},{"id":101781,"depth":137,"text":101782,"children":111863},[111864,111865],{"id":102101,"depth":151,"text":102101},{"id":102237,"depth":151,"text":102237},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":111869},[111870,111871,111872,111873,111875],{"id":111734,"depth":151,"text":111734},{"id":111745,"depth":151,"text":111745},{"id":111778,"depth":151,"text":111778},{"id":111791,"depth":151,"text":111874},"obs[3] 为什么是杆子角速度",{"id":111814,"depth":151,"text":111815},{"id":103135,"depth":137,"text":103136},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109965,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111883,"title":111884,"body":111885,"description":122,"extension":604,"meta":113899,"navigation":606,"path":113900,"seo":113901,"stem":113902,"__hash__":113903},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111886,"toc":113875},[111887,111890,111892,111895,111897,111914,111917,111920,111926,111929,111931,111933,111957,111959,111973,111975,112016,112018,112036,112038,112041,112047,112050,112078,112082,112088,112113,112116,112147,112154,112157,112160,112166,112169,112175,112178,112184,112188,112191,112216,112219,112221,112981,112983,112995,112997,113008,113010,113013,113030,113033,113035,113046,113049,113051,113097,113100,113113,113116,113198,113201,113203,113219,113229,113242,113245,113284,113294,113305,113315,113328,113331,113360,113363,113373,113376,113382,113399,113410,113412,113418,113435,113446,113467,113470,113482,113485,113506,113509,113517,113525,113542,113545,113614,113621,113629,113632,113645,113652,113654,113657,113663,113666,113669,113675,113681,113683,113723,113725,113731,113740,113743,113745,113765,113768,113771,113777,113781,113783,113810,113813,113816,113843,113849,113852,113855,113857,113860,113863,113869,113872],[10,111888,111884],{"id":111889},"_7控制任务reacher-机械臂到达目标",[14,111891,101176],{"id":101175},[19,111893,111894],{},"本章搭建一个二维两关节 reacher 任务。",[19,111896,104860],{},[632,111898,111899,111902,111905,111908,111911],{},[635,111900,111901],{},"两个 hinge joint",[635,111903,111904],{},"两个 motor actuator",[635,111906,111907],{},"site 作为末端点和目标点",[635,111909,111910],{},"根据末端和目标距离设计 reward",[635,111912,111913],{},"构造机械臂任务的基本形式",[19,111915,111916],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111918,111919],{},"Reacher 任务可以理解为：",[117,111921,111924],{"className":111922,"code":111923,"language":5729,"meta":122},[5727],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[124,111925,111923],{"__ignoreMap":122},[19,111927,111928],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111930,101299],{"id":101298},[19,111932,101302],{},[117,111934,111935],{"className":24362,"code":104917,"language":24364,"meta":122,"style":122},[124,111936,111937],{"__ignoreMap":122},[127,111938,111939,111941,111943,111945,111947,111949,111951,111953,111955],{"class":129,"line":130},[127,111940,25117],{"class":143},[127,111942,26856],{"class":781},[127,111944,24374],{"class":781},[127,111946,26941],{"class":154},[127,111948,104932],{"class":781},[127,111950,101327],{"class":781},[127,111952,103030],{"class":781},[127,111954,101343],{"class":781},[127,111956,104941],{"class":781},[19,111958,103348],{},[117,111960,111961],{"className":24362,"code":101448,"language":24364,"meta":122,"style":122},[124,111962,111963],{"__ignoreMap":122},[127,111964,111965,111967,111969,111971],{"class":129,"line":130},[127,111966,24371],{"class":143},[127,111968,24374],{"class":781},[127,111970,101459],{"class":781},[127,111972,101462],{"class":781},[19,111974,103365],{},[117,111976,111978],{"className":24362,"code":111977,"language":24364,"meta":122,"style":122},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[124,111979,111980,111997,112006],{"__ignoreMap":122},[127,111981,111982,111984,111986,111988,111991,111993,111995],{"class":129,"line":130},[127,111983,30870],{"class":143},[127,111985,29716],{"class":781},[127,111987,25656],{"class":154},[127,111989,111990],{"class":781}," mujoco-reacher",[127,111992,101504],{"class":781},[127,111994,101507],{"class":154},[127,111996,101510],{"class":154},[127,111998,111999,112001,112003],{"class":129,"line":137},[127,112000,30870],{"class":143},[127,112002,101517],{"class":781},[127,112004,112005],{"class":781}," mujoco-reacher\n",[127,112007,112008,112010,112012,112014],{"class":129,"line":151},[127,112009,24371],{"class":143},[127,112011,24374],{"class":781},[127,112013,101459],{"class":781},[127,112015,101462],{"class":781},[19,112017,101533],{},[632,112019,112020,112023,112026],{},[635,112021,112022],{},"本章使用低维状态，不使用图像输入。",[635,112024,112025],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[635,112027,112028,112029,888,112031,888,112033,112035],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[124,112030,104559],{},[124,112032,104889],{},[124,112034,104209],{}," 的方法一致。",[14,112037,101574],{"id":101573},[19,112039,112040],{},"Reacher 任务核心:",[117,112042,112045],{"className":112043,"code":112044,"language":5729,"meta":122},[5727],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[124,112046,112044],{"__ignoreMap":122},[19,112048,112049],{},"读取 site 世界坐标:",[117,112051,112053],{"className":30918,"code":112052,"language":30920,"meta":122,"style":122},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[124,112054,112055,112068],{"__ignoreMap":122},[127,112056,112057,112059,112061,112063,112066],{"class":129,"line":130},[127,112058,104163],{"class":147},[127,112060,725],{"class":290},[127,112062,103934],{"class":147},[127,112064,112065],{"class":781},"\"tip\"",[127,112067,687],{"class":147},[127,112069,112070,112073,112075],{"class":129,"line":137},[127,112071,112072],{"class":147},"tip_pos ",[127,112074,725],{"class":290},[127,112076,112077],{"class":147}," data.site_xpos[site_id]\n",[62,112079,112081],{"id":112080},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112083,112084,112085,112087],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[124,112086,104559],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[117,112089,112091],{"className":30918,"code":112090,"language":30920,"meta":122,"style":122},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[124,112092,112093,112103],{"__ignoreMap":122},[127,112094,112095,112098,112100],{"class":129,"line":130},[127,112096,112097],{"class":147},"tip ",[127,112099,725],{"class":290},[127,112101,112102],{"class":147}," data.site_xpos[tip_site_id]\n",[127,112104,112105,112108,112110],{"class":129,"line":137},[127,112106,112107],{"class":147},"target ",[127,112109,725],{"class":290},[127,112111,112112],{"class":147}," data.site_xpos[target_site_id]\n",[19,112114,112115],{},"这样 reward 就很容易写：",[117,112117,112119],{"className":30918,"code":112118,"language":30920,"meta":122,"style":122},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[124,112120,112121,112136],{"__ignoreMap":122},[127,112122,112123,112126,112128,112131,112133],{"class":129,"line":130},[127,112124,112125],{"class":147},"dist ",[127,112127,725],{"class":290},[127,112129,112130],{"class":147}," np.linalg.norm(tip ",[127,112132,1207],{"class":290},[127,112134,112135],{"class":147}," target)\n",[127,112137,112138,112140,112142,112144],{"class":129,"line":137},[127,112139,111534],{"class":147},[127,112141,725],{"class":290},[127,112143,52806],{"class":290},[127,112145,112146],{"class":147},"dist\n",[19,112148,112149,112150,112153],{},"距离越小，",[124,112151,112152],{},"-dist"," 越接近 0，奖励越高。",[62,112155,112156],{"id":112156},"两关节机械臂的状态",[19,112158,112159],{},"这个模型有两个 hinge joint：",[117,112161,112164],{"className":112162,"code":112163,"language":5729,"meta":122},[5727],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[124,112165,112163],{"__ignoreMap":122},[19,112167,112168],{},"再加上末端和目标位置：",[117,112170,112173],{"className":112171,"code":112172,"language":5729,"meta":122},[5727],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[124,112174,112172],{"__ignoreMap":122},[19,112176,112177],{},"总维度：",[117,112179,112182],{"className":112180,"code":112181,"language":5729,"meta":122},[5727],"2 + 2 + 3 + 3 = 10\n",[124,112183,112181],{"__ignoreMap":122},[62,112185,112187],{"id":112186},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112189,112190],{},"本章把重力设为：",[117,112192,112194],{"className":53602,"code":112193,"language":53604,"meta":122,"style":122},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[124,112195,112196],{"__ignoreMap":122},[127,112197,112198,112200,112202,112204,112206,112208,112210,112212,112214],{"class":129,"line":130},[127,112199,1584],{"class":147},[127,112201,69699],{"class":140},[127,112203,101723],{"class":143},[127,112205,725],{"class":147},[127,112207,101728],{"class":781},[127,112209,101731],{"class":143},[127,112211,725],{"class":147},[127,112213,104300],{"class":781},[127,112215,101673],{"class":147},[19,112217,112218],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112220,101782],{"id":101781},[117,112222,112224],{"className":30918,"code":112223,"language":30920,"meta":122,"style":122},"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",[124,112225,112226,112232,112242,112246,112250,112258,112263,112268,112272,112276,112281,112286,112290,112295,112300,112305,112309,112314,112319,112324,112329,112333,112337,112341,112345,112349,112354,112359,112363,112367,112371,112375,112379,112394,112403,112415,112438,112445,112449,112453,112463,112477,112491,112498,112502,112506,112520,112532,112544,112557,112572,112589,112593,112597,112609,112621,112629,112637,112641,112657,112662,112675,112688,112703,112707,112742,112774,112778,112782,112791,112795,112811,112821,112832,112848,112864,112880,112896,112900,112918,112938,112957,112961,112965,112977],{"__ignoreMap":122},[127,112227,112228,112230],{"class":129,"line":130},[127,112229,30932],{"class":290},[127,112231,101830],{"class":147},[127,112233,112234,112236,112238,112240],{"class":129,"line":137},[127,112235,30932],{"class":290},[127,112237,31920],{"class":147},[127,112239,31923],{"class":290},[127,112241,31926],{"class":147},[127,112243,112244],{"class":129,"line":151},[127,112245,2942],{"emptyLinePlaceholder":606},[127,112247,112248],{"class":129,"line":167},[127,112249,2942],{"emptyLinePlaceholder":606},[127,112251,112252,112254,112256],{"class":129,"line":415},[127,112253,101843],{"class":154},[127,112255,14106],{"class":290},[127,112257,101848],{"class":781},[127,112259,112260],{"class":129,"line":421},[127,112261,112262],{"class":781},"\u003Cmujoco model=\"two_link_reacher\">\n",[127,112264,112265],{"class":129,"line":1766},[127,112266,112267],{"class":781},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[127,112269,112270],{"class":129,"line":1856},[127,112271,2942],{"emptyLinePlaceholder":606},[127,112273,112274],{"class":129,"line":1862},[127,112275,101867],{"class":781},[127,112277,112278],{"class":129,"line":1874},[127,112279,112280],{"class":781},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[127,112282,112283],{"class":129,"line":2155},[127,112284,112285],{"class":781},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[127,112287,112288],{"class":129,"line":2160},[127,112289,2942],{"emptyLinePlaceholder":606},[127,112291,112292],{"class":129,"line":2166},[127,112293,112294],{"class":781},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[127,112296,112297],{"class":129,"line":2171},[127,112298,112299],{"class":781},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[127,112301,112302],{"class":129,"line":2185},[127,112303,112304],{"class":781},"      \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",[127,112306,112307],{"class":129,"line":2190},[127,112308,2942],{"emptyLinePlaceholder":606},[127,112310,112311],{"class":129,"line":2196},[127,112312,112313],{"class":781},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[127,112315,112316],{"class":129,"line":2217},[127,112317,112318],{"class":781},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[127,112320,112321],{"class":129,"line":2222},[127,112322,112323],{"class":781},"        \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",[127,112325,112326],{"class":129,"line":2236},[127,112327,112328],{"class":781},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[127,112330,112331],{"class":129,"line":2241},[127,112332,106967],{"class":781},[127,112334,112335],{"class":129,"line":2270},[127,112336,101896],{"class":781},[127,112338,112339],{"class":129,"line":2275},[127,112340,101901],{"class":781},[127,112342,112343],{"class":129,"line":2292},[127,112344,2942],{"emptyLinePlaceholder":606},[127,112346,112347],{"class":129,"line":2297},[127,112348,106984],{"class":781},[127,112350,112351],{"class":129,"line":2302},[127,112352,112353],{"class":781},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[127,112355,112356],{"class":129,"line":2307},[127,112357,112358],{"class":781},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[127,112360,112361],{"class":129,"line":2321},[127,112362,106994],{"class":781},[127,112364,112365],{"class":129,"line":2326},[127,112366,101906],{"class":781},[127,112368,112369],{"class":129,"line":3119},[127,112370,96227],{"class":781},[127,112372,112373],{"class":129,"line":3133},[127,112374,2942],{"emptyLinePlaceholder":606},[127,112376,112377],{"class":129,"line":3141},[127,112378,2942],{"emptyLinePlaceholder":606},[127,112380,112381,112383,112386,112389,112391],{"class":129,"line":3146},[127,112382,32487],{"class":290},[127,112384,112385],{"class":143}," site_position",[127,112387,112388],{"class":147},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[127,112390,1844],{"class":154},[127,112392,112393],{"class":147},") -> np.ndarray:\n",[127,112395,112396,112398,112400],{"class":129,"line":3152},[127,112397,103929],{"class":147},[127,112399,725],{"class":290},[127,112401,112402],{"class":147}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[127,112404,112405,112407,112409,112411,112413],{"class":129,"line":3158},[127,112406,3643],{"class":290},[127,112408,103978],{"class":147},[127,112410,1584],{"class":290},[127,112412,4635],{"class":154},[127,112414,4281],{"class":147},[127,112416,112417,112419,112421,112423,112425,112428,112430,112432,112434,112436],{"class":129,"line":3163},[127,112418,103961],{"class":290},[127,112420,103964],{"class":154},[127,112422,681],{"class":147},[127,112424,731],{"class":290},[127,112426,112427],{"class":781},"\"site not found: ",[127,112429,1570],{"class":154},[127,112431,80339],{"class":147},[127,112433,1620],{"class":154},[127,112435,926],{"class":781},[127,112437,687],{"class":147},[127,112439,112440,112442],{"class":129,"line":8490},[127,112441,4632],{"class":290},[127,112443,112444],{"class":147}," data.site_xpos[site_id].copy()\n",[127,112446,112447],{"class":129,"line":8514},[127,112448,2942],{"emptyLinePlaceholder":606},[127,112450,112451],{"class":129,"line":8519},[127,112452,2942],{"emptyLinePlaceholder":606},[127,112454,112455,112457,112460],{"class":129,"line":8525},[127,112456,32487],{"class":290},[127,112458,112459],{"class":143}," get_obs",[127,112461,112462],{"class":147},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[127,112464,112465,112468,112470,112473,112475],{"class":129,"line":8552},[127,112466,112467],{"class":147},"    tip ",[127,112469,725],{"class":290},[127,112471,112472],{"class":147}," site_position(model, data, ",[127,112474,112065],{"class":781},[127,112476,687],{"class":147},[127,112478,112479,112482,112484,112486,112489],{"class":129,"line":8557},[127,112480,112481],{"class":147},"    target ",[127,112483,725],{"class":290},[127,112485,112472],{"class":147},[127,112487,112488],{"class":781},"\"target\"",[127,112490,687],{"class":147},[127,112492,112493,112495],{"class":129,"line":8563},[127,112494,4632],{"class":290},[127,112496,112497],{"class":147}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[127,112499,112500],{"class":129,"line":8575},[127,112501,2942],{"emptyLinePlaceholder":606},[127,112503,112504],{"class":129,"line":8587},[127,112505,2942],{"emptyLinePlaceholder":606},[127,112507,112508,112510,112513,112516,112518],{"class":129,"line":8599},[127,112509,32487],{"class":290},[127,112511,112512],{"class":143}," reward",[127,112514,112515],{"class":147},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[127,112517,719],{"class":154},[127,112519,4281],{"class":147},[127,112521,112522,112524,112526,112528,112530],{"class":129,"line":10258},[127,112523,112467],{"class":147},[127,112525,725],{"class":290},[127,112527,112472],{"class":147},[127,112529,112065],{"class":781},[127,112531,687],{"class":147},[127,112533,112534,112536,112538,112540,112542],{"class":129,"line":10283},[127,112535,112481],{"class":147},[127,112537,725],{"class":290},[127,112539,112472],{"class":147},[127,112541,112488],{"class":781},[127,112543,687],{"class":147},[127,112545,112546,112549,112551,112553,112555],{"class":129,"line":10306},[127,112547,112548],{"class":147},"    dist ",[127,112550,725],{"class":290},[127,112552,112130],{"class":147},[127,112554,1207],{"class":290},[127,112556,112135],{"class":147},[127,112558,112559,112562,112564,112567,112569],{"class":129,"line":10330},[127,112560,112561],{"class":147},"    control_cost ",[127,112563,725],{"class":290},[127,112565,112566],{"class":154}," 0.01",[127,112568,7060],{"class":290},[127,112570,112571],{"class":147}," np.sum(np.square(data.ctrl))\n",[127,112573,112574,112576,112578,112580,112582,112584,112586],{"class":129,"line":10335},[127,112575,4632],{"class":290},[127,112577,110326],{"class":154},[127,112579,681],{"class":147},[127,112581,1207],{"class":290},[127,112583,112125],{"class":147},[127,112585,1207],{"class":290},[127,112587,112588],{"class":147}," control_cost)\n",[127,112590,112591],{"class":129,"line":10340},[127,112592,2942],{"emptyLinePlaceholder":606},[127,112594,112595],{"class":129,"line":10345},[127,112596,2942],{"emptyLinePlaceholder":606},[127,112598,112599,112601,112603,112605,112607],{"class":129,"line":10354},[127,112600,32487],{"class":290},[127,112602,2515],{"class":143},[127,112604,101927],{"class":147},[127,112606,96215],{"class":154},[127,112608,4281],{"class":147},[127,112610,112611,112613,112615,112617,112619],{"class":129,"line":10359},[127,112612,101936],{"class":147},[127,112614,725],{"class":290},[127,112616,101941],{"class":147},[127,112618,101843],{"class":154},[127,112620,687],{"class":147},[127,112622,112623,112625,112627],{"class":129,"line":10365},[127,112624,101950],{"class":147},[127,112626,725],{"class":290},[127,112628,101955],{"class":147},[127,112630,112631,112633,112635],{"class":129,"line":10386},[127,112632,110682],{"class":147},[127,112634,725],{"class":290},[127,112636,105290],{"class":154},[127,112638,112639],{"class":129,"line":10392},[127,112640,2942],{"emptyLinePlaceholder":606},[127,112642,112643,112645,112647,112649,112651,112653,112655],{"class":129,"line":10406},[127,112644,3743],{"class":290},[127,112646,32156],{"class":147},[127,112648,26584],{"class":290},[127,112650,32983],{"class":154},[127,112652,681],{"class":147},[127,112654,65607],{"class":154},[127,112656,31326],{"class":147},[127,112658,112659],{"class":129,"line":10412},[127,112660,112661],{"class":147},"        mujoco.mj_forward(model, data)\n",[127,112663,112664,112667,112669,112671,112673],{"class":129,"line":10439},[127,112665,112666],{"class":147},"        tip ",[127,112668,725],{"class":290},[127,112670,112472],{"class":147},[127,112672,112065],{"class":781},[127,112674,687],{"class":147},[127,112676,112677,112680,112682,112684,112686],{"class":129,"line":10448},[127,112678,112679],{"class":147},"        target ",[127,112681,725],{"class":290},[127,112683,112472],{"class":147},[127,112685,112488],{"class":781},[127,112687,687],{"class":147},[127,112689,112690,112693,112695,112698,112700],{"class":129,"line":10454},[127,112691,112692],{"class":147},"        error ",[127,112694,725],{"class":290},[127,112696,112697],{"class":147}," target ",[127,112699,1207],{"class":290},[127,112701,112702],{"class":147}," tip\n",[127,112704,112705],{"class":129,"line":10462},[127,112706,2942],{"emptyLinePlaceholder":606},[127,112708,112709,112711,112713,112715,112717,112720,112722,112724,112727,112729,112732,112734,112736,112738,112740],{"class":129,"line":10467},[127,112710,107146],{"class":147},[127,112712,867],{"class":154},[127,112714,4985],{"class":147},[127,112716,725],{"class":290},[127,112718,112719],{"class":147}," np.clip(",[127,112721,105789],{"class":154},[127,112723,7060],{"class":290},[127,112725,112726],{"class":147}," error[",[127,112728,530],{"class":154},[127,112730,112731],{"class":147},"], ",[127,112733,1207],{"class":290},[127,112735,102932],{"class":154},[127,112737,12977],{"class":147},[127,112739,102932],{"class":154},[127,112741,687],{"class":147},[127,112743,112744,112746,112748,112750,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770,112772],{"class":129,"line":17145},[127,112745,107146],{"class":147},[127,112747,893],{"class":154},[127,112749,4985],{"class":147},[127,112751,725],{"class":290},[127,112753,112719],{"class":147},[127,112755,105789],{"class":154},[127,112757,7060],{"class":290},[127,112759,112726],{"class":147},[127,112761,867],{"class":154},[127,112763,112731],{"class":147},[127,112765,1207],{"class":290},[127,112767,102932],{"class":154},[127,112769,12977],{"class":147},[127,112771,102932],{"class":154},[127,112773,687],{"class":147},[127,112775,112776],{"class":129,"line":17151},[127,112777,2942],{"emptyLinePlaceholder":606},[127,112779,112780],{"class":129,"line":17174},[127,112781,102045],{"class":147},[127,112783,112784,112786,112788],{"class":129,"line":17180},[127,112785,110826],{"class":147},[127,112787,10019],{"class":290},[127,112789,112790],{"class":147}," reward(model, data)\n",[127,112792,112793],{"class":129,"line":17203},[127,112794,2942],{"emptyLinePlaceholder":606},[127,112796,112797,112799,112801,112803,112805,112807,112809],{"class":129,"line":17217},[127,112798,3039],{"class":290},[127,112800,32156],{"class":147},[127,112802,1003],{"class":290},[127,112804,6296],{"class":154},[127,112806,102088],{"class":290},[127,112808,4635],{"class":154},[127,112810,4281],{"class":147},[127,112812,112813,112816,112818],{"class":129,"line":17237},[127,112814,112815],{"class":147},"            obs ",[127,112817,725],{"class":290},[127,112819,112820],{"class":147}," get_obs(model, data)\n",[127,112822,112823,112825,112827,112829],{"class":129,"line":17243},[127,112824,35190],{"class":154},[127,112826,681],{"class":147},[127,112828,110860],{"class":781},[127,112830,112831],{"class":147},", step)\n",[127,112833,112834,112836,112838,112841,112844,112846],{"class":129,"line":17254},[127,112835,35190],{"class":154},[127,112837,681],{"class":147},[127,112839,112840],{"class":781},"\"  tip:\"",[127,112842,112843],{"class":147},", np.round(tip, ",[127,112845,749],{"class":154},[127,112847,31037],{"class":147},[127,112849,112850,112852,112854,112857,112860,112862],{"class":129,"line":17277},[127,112851,35190],{"class":154},[127,112853,681],{"class":147},[127,112855,112856],{"class":781},"\"  target:\"",[127,112858,112859],{"class":147},", np.round(target, ",[127,112861,749],{"class":154},[127,112863,31037],{"class":147},[127,112865,112866,112868,112870,112873,112876,112878],{"class":129,"line":17299},[127,112867,35190],{"class":154},[127,112869,681],{"class":147},[127,112871,112872],{"class":781},"\"  ctrl:\"",[127,112874,112875],{"class":147},", np.round(data.ctrl.copy(), ",[127,112877,749],{"class":154},[127,112879,31037],{"class":147},[127,112881,112882,112884,112886,112889,112892,112894],{"class":129,"line":17304},[127,112883,35190],{"class":154},[127,112885,681],{"class":147},[127,112887,112888],{"class":781},"\"  obs_dim:\"",[127,112890,112891],{"class":147},", obs.shape[",[127,112893,867],{"class":154},[127,112895,5199],{"class":147},[127,112897,112898],{"class":129,"line":17310},[127,112899,2942],{"emptyLinePlaceholder":606},[127,112901,112902,112904,112906,112908,112910,112912,112914,112916],{"class":129,"line":17324},[127,112903,31839],{"class":154},[127,112905,681],{"class":147},[127,112907,110905],{"class":781},[127,112909,12977],{"class":147},[127,112911,32558],{"class":154},[127,112913,110912],{"class":147},[127,112915,749],{"class":154},[127,112917,31037],{"class":147},[127,112919,112920,112922,112924,112927,112930,112932,112934,112936],{"class":129,"line":17337},[127,112921,31839],{"class":154},[127,112923,681],{"class":147},[127,112925,112926],{"class":781},"\"final tip:\"",[127,112928,112929],{"class":147},", np.round(site_position(model, data, ",[127,112931,112065],{"class":781},[127,112933,110874],{"class":147},[127,112935,749],{"class":154},[127,112937,31037],{"class":147},[127,112939,112940,112942,112944,112947,112949,112951,112953,112955],{"class":129,"line":17342},[127,112941,31839],{"class":154},[127,112943,681],{"class":147},[127,112945,112946],{"class":781},"\"target:\"",[127,112948,112929],{"class":147},[127,112950,112488],{"class":781},[127,112952,110874],{"class":147},[127,112954,749],{"class":154},[127,112956,31037],{"class":147},[127,112958,112959],{"class":129,"line":17356},[127,112960,2942],{"emptyLinePlaceholder":606},[127,112962,112963],{"class":129,"line":17361},[127,112964,2942],{"emptyLinePlaceholder":606},[127,112966,112967,112969,112971,112973,112975],{"class":129,"line":17367},[127,112968,2075],{"class":290},[127,112970,31760],{"class":154},[127,112972,102088],{"class":290},[127,112974,102091],{"class":781},[127,112976,4281],{"class":147},[127,112978,112979],{"class":129,"line":17372},[127,112980,102098],{"class":147},[19,112982,104099],{},[117,112984,112986],{"className":24362,"code":112985,"language":24364,"meta":122,"style":122},"touch ch7_reacher.py\n",[124,112987,112988],{"__ignoreMap":122},[127,112989,112990,112992],{"class":129,"line":130},[127,112991,101812],{"class":143},[127,112993,112994],{"class":781}," ch7_reacher.py\n",[19,112996,110973],{},[117,112998,113000],{"className":24362,"code":112999,"language":24364,"meta":122,"style":122},"python ch7_reacher.py\n",[124,113001,113002],{"__ignoreMap":122},[127,113003,113004,113006],{"class":129,"line":130},[127,113005,30920],{"class":143},[127,113007,112994],{"class":781},[62,113009,102101],{"id":102101},[19,113011,113012],{},"读取 site 坐标：",[117,113014,113016],{"className":30918,"code":113015,"language":30920,"meta":122,"style":122},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[124,113017,113018],{"__ignoreMap":122},[127,113019,113020,113022,113024,113026,113028],{"class":129,"line":130},[127,113021,32487],{"class":290},[127,113023,112385],{"class":143},[127,113025,112388],{"class":147},[127,113027,1844],{"class":154},[127,113029,112393],{"class":147},[19,113031,113032],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113034,110989],{},[117,113036,113038],{"className":30918,"code":113037,"language":30920,"meta":122,"style":122},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[124,113039,113040],{"__ignoreMap":122},[127,113041,113042,113044],{"class":129,"line":130},[127,113043,17587],{"class":290},[127,113045,112497],{"class":147},[19,113047,113048],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113050,110314],{},[117,113052,113054],{"className":30918,"code":113053,"language":30920,"meta":122,"style":122},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[124,113055,113056,113068,113081],{"__ignoreMap":122},[127,113057,113058,113060,113062,113064,113066],{"class":129,"line":130},[127,113059,112125],{"class":147},[127,113061,725],{"class":290},[127,113063,112130],{"class":147},[127,113065,1207],{"class":290},[127,113067,112135],{"class":147},[127,113069,113070,113073,113075,113077,113079],{"class":129,"line":137},[127,113071,113072],{"class":147},"control_cost ",[127,113074,725],{"class":290},[127,113076,112566],{"class":154},[127,113078,7060],{"class":290},[127,113080,112571],{"class":147},[127,113082,113083,113085,113087,113089,113091,113093,113095],{"class":129,"line":151},[127,113084,17587],{"class":290},[127,113086,110326],{"class":154},[127,113088,681],{"class":147},[127,113090,1207],{"class":290},[127,113092,112125],{"class":147},[127,113094,1207],{"class":290},[127,113096,112588],{"class":147},[19,113098,113099],{},"奖励由两部分组成：",[632,113101,113102,113107],{},[635,113103,113104,113106],{},[124,113105,112152],{},"：末端离目标越远，奖励越低。",[635,113108,113109,113112],{},[124,113110,113111],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113114,113115],{},"简单控制器：",[117,113117,113119],{"className":30918,"code":113118,"language":30920,"meta":122,"style":122},"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",[124,113120,113121,113134,113166],{"__ignoreMap":122},[127,113122,113123,113126,113128,113130,113132],{"class":129,"line":130},[127,113124,113125],{"class":147},"error ",[127,113127,725],{"class":290},[127,113129,112697],{"class":147},[127,113131,1207],{"class":290},[127,113133,112702],{"class":147},[127,113135,113136,113138,113140,113142,113144,113146,113148,113150,113152,113154,113156,113158,113160,113162,113164],{"class":129,"line":137},[127,113137,106400],{"class":147},[127,113139,867],{"class":154},[127,113141,4985],{"class":147},[127,113143,725],{"class":290},[127,113145,112719],{"class":147},[127,113147,105789],{"class":154},[127,113149,7060],{"class":290},[127,113151,112726],{"class":147},[127,113153,530],{"class":154},[127,113155,112731],{"class":147},[127,113157,1207],{"class":290},[127,113159,102932],{"class":154},[127,113161,12977],{"class":147},[127,113163,102932],{"class":154},[127,113165,687],{"class":147},[127,113167,113168,113170,113172,113174,113176,113178,113180,113182,113184,113186,113188,113190,113192,113194,113196],{"class":129,"line":151},[127,113169,106400],{"class":147},[127,113171,893],{"class":154},[127,113173,4985],{"class":147},[127,113175,725],{"class":290},[127,113177,112719],{"class":147},[127,113179,105789],{"class":154},[127,113181,7060],{"class":290},[127,113183,112726],{"class":147},[127,113185,867],{"class":154},[127,113187,112731],{"class":147},[127,113189,1207],{"class":290},[127,113191,102932],{"class":154},[127,113193,12977],{"class":147},[127,113195,102932],{"class":154},[127,113197,687],{"class":147},[19,113199,113200],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[62,113202,102237],{"id":102237},[117,113204,113205],{"className":30918,"code":113015,"language":30920,"meta":122,"style":122},[124,113206,113207],{"__ignoreMap":122},[127,113208,113209,113211,113213,113215,113217],{"class":129,"line":130},[127,113210,32487],{"class":290},[127,113212,112385],{"class":143},[127,113214,112388],{"class":147},[127,113216,1844],{"class":154},[127,113218,112393],{"class":147},[19,113220,113221,113222,113224,113225,83068,113227,28925],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[124,113223,80339],{}," 是 site 的名字，比如 ",[124,113226,112065],{},[124,113228,112488],{},[117,113230,113232],{"className":30918,"code":113231,"language":30920,"meta":122,"style":122},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[124,113233,113234],{"__ignoreMap":122},[127,113235,113236,113238,113240],{"class":129,"line":130},[127,113237,104163],{"class":147},[127,113239,725],{"class":290},[127,113241,112402],{"class":147},[19,113243,113244],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[117,113246,113248],{"className":30918,"code":113247,"language":30920,"meta":122,"style":122},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[124,113249,113250,113262],{"__ignoreMap":122},[127,113251,113252,113254,113256,113258,113260],{"class":129,"line":130},[127,113253,2075],{"class":290},[127,113255,103978],{"class":147},[127,113257,1584],{"class":290},[127,113259,4635],{"class":154},[127,113261,4281],{"class":147},[127,113263,113264,113266,113268,113270,113272,113274,113276,113278,113280,113282],{"class":129,"line":137},[127,113265,104424],{"class":290},[127,113267,103964],{"class":154},[127,113269,681],{"class":147},[127,113271,731],{"class":290},[127,113273,112427],{"class":781},[127,113275,1570],{"class":154},[127,113277,80339],{"class":147},[127,113279,1620],{"class":154},[127,113281,926],{"class":781},[127,113283,687],{"class":147},[19,113285,113286,113287,113290,113291,113293],{},"如果 site 没找到，就主动报错。",[124,113288,113289],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[124,113292,80339],{}," 的值放进字符串里。",[117,113295,113297],{"className":30918,"code":113296,"language":30920,"meta":122,"style":122},"return data.site_xpos[site_id].copy()\n",[124,113298,113299],{"__ignoreMap":122},[127,113300,113301,113303],{"class":129,"line":130},[127,113302,17587],{"class":290},[127,113304,112444],{"class":147},[19,113306,113307,113308,113310,113311,113314],{},"返回这个 site 的世界坐标。",[124,113309,104209],{}," 里的每一行都是一个 site 的 ",[124,113312,113313],{},"(x, y, z)"," 坐标。",[117,113316,113318],{"className":30918,"code":113317,"language":30920,"meta":122,"style":122},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[124,113319,113320],{"__ignoreMap":122},[127,113321,113322,113324,113326],{"class":129,"line":130},[127,113323,32487],{"class":290},[127,113325,112459],{"class":143},[127,113327,112462],{"class":147},[19,113329,113330],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[117,113332,113334],{"className":30918,"code":113333,"language":30920,"meta":122,"style":122},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[124,113335,113336,113348],{"__ignoreMap":122},[127,113337,113338,113340,113342,113344,113346],{"class":129,"line":130},[127,113339,112097],{"class":147},[127,113341,725],{"class":290},[127,113343,112472],{"class":147},[127,113345,112065],{"class":781},[127,113347,687],{"class":147},[127,113349,113350,113352,113354,113356,113358],{"class":129,"line":137},[127,113351,112107],{"class":147},[127,113353,725],{"class":290},[127,113355,112472],{"class":147},[127,113357,112488],{"class":781},[127,113359,687],{"class":147},[19,113361,113362],{},"分别读取末端点和目标点的世界坐标。",[117,113364,113365],{"className":30918,"code":113037,"language":30920,"meta":122,"style":122},[124,113366,113367],{"__ignoreMap":122},[127,113368,113369,113371],{"class":129,"line":130},[127,113370,17587],{"class":290},[127,113372,112497],{"class":147},[19,113374,113375],{},"把四部分拼成一个观测数组：",[117,113377,113380],{"className":113378,"code":113379,"language":5729,"meta":122},[5727],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[124,113381,113379],{"__ignoreMap":122},[117,113383,113385],{"className":30918,"code":113384,"language":30920,"meta":122,"style":122},"dist = np.linalg.norm(tip - target)\n",[124,113386,113387],{"__ignoreMap":122},[127,113388,113389,113391,113393,113395,113397],{"class":129,"line":130},[127,113390,112125],{"class":147},[127,113392,725],{"class":290},[127,113394,112130],{"class":147},[127,113396,1207],{"class":290},[127,113398,112135],{"class":147},[19,113400,113401,113402,113405,113406,113409],{},"计算 tip 到 target 的距离。",[124,113403,113404],{},"tip - target"," 得到一个三维向量，",[124,113407,113408],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113411,15175],{},[117,113413,113416],{"className":113414,"code":113415,"language":5729,"meta":122},[5727],"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",[124,113417,113415],{"__ignoreMap":122},[117,113419,113421],{"className":30918,"code":113420,"language":30920,"meta":122,"style":122},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[124,113422,113423],{"__ignoreMap":122},[127,113424,113425,113427,113429,113431,113433],{"class":129,"line":130},[127,113426,113072],{"class":147},[127,113428,725],{"class":290},[127,113430,112566],{"class":154},[127,113432,7060],{"class":290},[127,113434,112571],{"class":147},[19,113436,113437,113438,113441,113442,113445],{},"计算动作惩罚。",[124,113439,113440],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[124,113443,113444],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[117,113447,113449],{"className":30918,"code":113448,"language":30920,"meta":122,"style":122},"return float(-dist - control_cost)\n",[124,113450,113451],{"__ignoreMap":122},[127,113452,113453,113455,113457,113459,113461,113463,113465],{"class":129,"line":130},[127,113454,17587],{"class":290},[127,113456,110326],{"class":154},[127,113458,681],{"class":147},[127,113460,1207],{"class":290},[127,113462,112125],{"class":147},[127,113464,1207],{"class":290},[127,113466,112588],{"class":147},[19,113468,113469],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[117,113471,113472],{"className":30918,"code":111332,"language":30920,"meta":122,"style":122},[124,113473,113474],{"__ignoreMap":122},[127,113475,113476,113478,113480],{"class":129,"line":130},[127,113477,111339],{"class":147},[127,113479,725],{"class":290},[127,113481,105290],{"class":154},[19,113483,113484],{},"累计奖励变量，记录整个运行过程的总分。",[117,113486,113488],{"className":30918,"code":113487,"language":30920,"meta":122,"style":122},"for step in range(500):\n",[124,113489,113490],{"__ignoreMap":122},[127,113491,113492,113494,113496,113498,113500,113502,113504],{"class":129,"line":130},[127,113493,3567],{"class":290},[127,113495,32156],{"class":147},[127,113497,26584],{"class":290},[127,113499,32983],{"class":154},[127,113501,681],{"class":147},[127,113503,65607],{"class":154},[127,113505,31326],{"class":147},[19,113507,113508],{},"运行 500 个控制步。",[117,113510,113511],{"className":30918,"code":105072,"language":30920,"meta":122,"style":122},[124,113512,113513],{"__ignoreMap":122},[127,113514,113515],{"class":129,"line":130},[127,113516,105072],{"class":147},[19,113518,113519,113520,101547,113522,113524],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[124,113521,103760],{},[124,113523,103763],{}," 是当前状态下的坐标。",[117,113526,113528],{"className":30918,"code":113527,"language":30920,"meta":122,"style":122},"error = target - tip\n",[124,113529,113530],{"__ignoreMap":122},[127,113531,113532,113534,113536,113538,113540],{"class":129,"line":130},[127,113533,113125],{"class":147},[127,113535,725],{"class":290},[127,113537,112697],{"class":147},[127,113539,1207],{"class":290},[127,113541,112702],{"class":147},[19,113543,113544],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[117,113546,113548],{"className":30918,"code":113547,"language":30920,"meta":122,"style":122},"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",[124,113549,113550,113582],{"__ignoreMap":122},[127,113551,113552,113554,113556,113558,113560,113562,113564,113566,113568,113570,113572,113574,113576,113578,113580],{"class":129,"line":130},[127,113553,106400],{"class":147},[127,113555,867],{"class":154},[127,113557,4985],{"class":147},[127,113559,725],{"class":290},[127,113561,112719],{"class":147},[127,113563,105789],{"class":154},[127,113565,7060],{"class":290},[127,113567,112726],{"class":147},[127,113569,530],{"class":154},[127,113571,112731],{"class":147},[127,113573,1207],{"class":290},[127,113575,102932],{"class":154},[127,113577,12977],{"class":147},[127,113579,102932],{"class":154},[127,113581,687],{"class":147},[127,113583,113584,113586,113588,113590,113592,113594,113596,113598,113600,113602,113604,113606,113608,113610,113612],{"class":129,"line":137},[127,113585,106400],{"class":147},[127,113587,893],{"class":154},[127,113589,4985],{"class":147},[127,113591,725],{"class":290},[127,113593,112719],{"class":147},[127,113595,105789],{"class":154},[127,113597,7060],{"class":290},[127,113599,112726],{"class":147},[127,113601,867],{"class":154},[127,113603,112731],{"class":147},[127,113605,1207],{"class":290},[127,113607,102932],{"class":154},[127,113609,12977],{"class":147},[127,113611,102932],{"class":154},[127,113613,687],{"class":147},[19,113615,113616,113617,113620],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[124,113618,113619],{},"error -> ctrl -> step"," 的流程。",[117,113622,113623],{"className":30918,"code":105034,"language":30920,"meta":122,"style":122},[124,113624,113625],{"__ignoreMap":122},[127,113626,113627],{"class":129,"line":130},[127,113628,105034],{"class":147},[19,113630,113631],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[117,113633,113635],{"className":30918,"code":113634,"language":30920,"meta":122,"style":122},"obs = get_obs(model, data)\n",[124,113636,113637],{"__ignoreMap":122},[127,113638,113639,113641,113643],{"class":129,"line":130},[127,113640,111383],{"class":147},[127,113642,725],{"class":290},[127,113644,112820],{"class":147},[19,113646,113647,113648,113651],{},"读取最新观测。后面打印 ",[124,113649,113650],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113653,102845],{"id":102844},[19,113655,113656],{},"观测维度为:",[117,113658,113661],{"className":113659,"code":113660,"language":5729,"meta":122},[5727],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[124,113662,113660],{"__ignoreMap":122},[19,113664,113665],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113667,113668],{},"程序每 100 步打印：",[117,113670,113673],{"className":113671,"code":113672,"language":5729,"meta":122},[5727],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[124,113674,113672],{"__ignoreMap":122},[19,113676,113677,113678,113680],{},"如果控制有效，你应该看到最终 ",[124,113679,103760],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113682,102877],{"id":102876},[632,113684,113685,113688,113691,113697,113703,113710,113720],{},[635,113686,113687],{},"修改目标点位置。",[635,113689,113690],{},"重新运行，观察最终 tip 是否变化。",[635,113692,113693,113694,113696],{},"把 gravity 改成 ",[124,113695,103118],{},"，观察控制是否变差。",[635,113698,111710,113699,111714,113701,28925],{},[124,113700,102687],{},[124,113702,530],{},[635,113704,102940,113705,102943,113707,113709],{},[124,113706,111125],{},[124,113708,107836],{},"，观察机械臂是否更难移动。",[635,113711,102940,113712,83059,113714,102943,113716,113719],{},[124,113713,103763],{},[124,113715,104675],{},[124,113717,113718],{},"0.2 0 0.6","，观察 reward 和 final tip。",[635,113721,113722],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113724,102982],{"id":102981},[62,113726,113728],{"id":113727},"site-not-found",[124,113729,113730],{},"site not found",[19,113732,113733,113734,101547,113737,28925],{},"检查 XML 中是否有 ",[124,113735,113736],{},"site name=\"tip\"",[124,113738,113739],{},"site name=\"target\"",[62,113741,113742],{"id":113742},"机械臂完全不动",[19,113744,103052],{},[632,113746,113747,113752,113755,113760],{},[635,113748,113749,113751],{},[124,113750,102687],{}," 是否为 2",[635,113753,113754],{},"actuator 是否引用正确 joint",[635,113756,113757,113759],{},[124,113758,101605],{}," 是否被赋值",[635,113761,113762,113763],{},"是否执行了 ",[124,113764,101214],{},[62,113766,113767],{"id":113767},"控制效果不好",[19,113769,113770],{},"正常。本章重点不是控制器最优，而是任务结构:",[117,113772,113775],{"className":113773,"code":113774,"language":5729,"meta":122},[5727],"obs → action → mj_step → reward → next_obs\n",[124,113776,113774],{"__ignoreMap":122},[62,113778,113780],{"id":113779},"tip-坐标不变化","tip 坐标不变化",[19,113782,103104],{},[632,113784,113785,113790,113798,113807],{},[635,113786,113787,113788,28925],{},"是否每步调用了 ",[124,113789,101214],{},[635,113791,113792,113793,101547,113795,28925],{},"是否写入了 ",[124,113794,106655],{},[124,113796,113797],{},"data.ctrl[1]",[635,113799,113800,113801,888,113804,28925],{},"actuator 是否正确引用 ",[124,113802,113803],{},"joint1",[124,113805,113806],{},"joint2",[635,113808,113809],{},"控制输入是否太小。",[62,113811,113812],{"id":113812},"目标点不会动",[19,113814,113815],{},"本章的 target 是固定 site：",[117,113817,113819],{"className":53602,"code":113818,"language":53604,"meta":122,"style":122},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[124,113820,113821],{"__ignoreMap":122},[127,113822,113823,113825,113827,113829,113831,113833,113835,113837,113840],{"class":129,"line":130},[127,113824,1584],{"class":147},[127,113826,103739],{"class":140},[127,113828,15462],{"class":143},[127,113830,725],{"class":147},[127,113832,112488],{"class":781},[127,113834,101635],{"class":143},[127,113836,725],{"class":147},[127,113838,113839],{"class":781},"\"0.5 0 0.4\"",[127,113841,113842],{"class":147}," ...\u002F>\n",[19,113844,113845,113846,113848],{},"它直接挂在 ",[124,113847,102370],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[62,113850,113851],{"id":113851},"机械臂不像真实机械臂",[19,113853,113854],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113856,103136],{"id":103135},[19,113858,113859],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113861,113862],{},"核心公式：",[117,113864,113867],{"className":113865,"code":113866,"language":5729,"meta":122},[5727],"distance = ||tip - target||\nreward = -distance - action_cost\n",[124,113868,113866],{"__ignoreMap":122},[19,113870,113871],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[575,113873,113874],{},"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":122,"searchDepth":137,"depth":137,"links":113876},[113877,113878,113879,113884,113888,113889,113890,113898],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":113880},[113881,113882,113883],{"id":112080,"depth":151,"text":112081},{"id":112156,"depth":151,"text":112156},{"id":112186,"depth":151,"text":112187},{"id":101781,"depth":137,"text":101782,"children":113885},[113886,113887],{"id":102101,"depth":151,"text":102101},{"id":102237,"depth":151,"text":102237},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":113891},[113892,113893,113894,113895,113896,113897],{"id":113727,"depth":151,"text":113730},{"id":113742,"depth":151,"text":113742},{"id":113767,"depth":151,"text":113767},{"id":113779,"depth":151,"text":113780},{"id":113812,"depth":151,"text":113812},{"id":113851,"depth":151,"text":113851},{"id":103135,"depth":137,"text":103136},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111884,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113905,"title":113906,"body":113907,"description":122,"extension":604,"meta":117369,"navigation":606,"path":117370,"seo":117371,"stem":117372,"__hash__":117373},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113908,"toc":117340},[113909,113912,113914,113917,113920,113945,113948,113954,113957,113963,113965,113967,113991,113993,114011,114013,114056,114058,114085,114087,114090,114142,114145,114151,114160,114163,114201,114204,114243,114246,114254,114261,114264,114270,114272,114326,114333,114378,114381,114385,114401,114411,114413,115674,115676,115688,115690,115701,115703,115706,115727,115730,115733,115766,115772,115775,115808,115811,115814,115855,115860,115874,115877,115890,115895,115918,115920,115935,115945,115960,115967,115987,116002,116020,116023,116040,116048,116064,116070,116102,116115,116147,116157,116192,116206,116252,116266,116308,116319,116332,116338,116371,116374,116401,116411,116451,116461,116478,116485,116503,116506,116547,116560,116575,116578,116601,116604,116616,116619,116638,116643,116664,116667,116682,116685,116719,116731,116746,116749,116774,116777,116796,116799,116831,116834,116858,116864,116894,116901,116914,116917,116919,116921,116927,116930,116933,116945,116948,116950,117004,117006,117010,117016,117025,117028,117035,117037,117060,117063,117067,117069,117087,117093,117095,117128,117131,117137,117141,117144,117164,117169,117173,117180,117200,117205,117209,117212,117232,117235,117321,117325,117328,117334,117337],[10,113910,113906],{"id":113911},"_8gymnasium-风格强化学习接口基础",[14,113913,101176],{"id":101175},[19,113915,113916],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113918,113919],{},"你将实现:",[117,113921,113923],{"className":30918,"code":113922,"language":30920,"meta":122,"style":122},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[124,113924,113925,113935],{"__ignoreMap":122},[127,113926,113927,113930,113932],{"class":129,"line":130},[127,113928,113929],{"class":147},"obs, info ",[127,113931,725],{"class":290},[127,113933,113934],{"class":147}," env.reset()\n",[127,113936,113937,113940,113942],{"class":129,"line":137},[127,113938,113939],{"class":147},"obs, reward, terminated, truncated, info ",[127,113941,725],{"class":290},[127,113943,113944],{"class":147}," env.step(action)\n",[19,113946,113947],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113949,113950,113951,113953],{},"前面章节的代码都是“脚本式”的：在 ",[124,113952,102824],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113955,113956],{},"可以先记住 Gymnasium 环境的核心交互：",[117,113958,113961],{"className":113959,"code":113960,"language":5729,"meta":122},[5727],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[124,113962,113960],{"__ignoreMap":122},[14,113964,101299],{"id":101298},[19,113966,101302],{},[117,113968,113969],{"className":24362,"code":104917,"language":24364,"meta":122,"style":122},[124,113970,113971],{"__ignoreMap":122},[127,113972,113973,113975,113977,113979,113981,113983,113985,113987,113989],{"class":129,"line":130},[127,113974,25117],{"class":143},[127,113976,26856],{"class":781},[127,113978,24374],{"class":781},[127,113980,26941],{"class":154},[127,113982,104932],{"class":781},[127,113984,101327],{"class":781},[127,113986,103030],{"class":781},[127,113988,101343],{"class":781},[127,113990,104941],{"class":781},[19,113992,103348],{},[117,113994,113996],{"className":24362,"code":113995,"language":24364,"meta":122,"style":122},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[124,113997,113998],{"__ignoreMap":122},[127,113999,114000,114002,114004,114006,114008],{"class":129,"line":130},[127,114001,24371],{"class":143},[127,114003,24374],{"class":781},[127,114005,101459],{"class":781},[127,114007,108240],{"class":781},[127,114009,114010],{"class":781}," gymnasium\n",[19,114012,103365],{},[117,114014,114016],{"className":24362,"code":114015,"language":24364,"meta":122,"style":122},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[124,114017,114018,114035,114044],{"__ignoreMap":122},[127,114019,114020,114022,114024,114026,114029,114031,114033],{"class":129,"line":130},[127,114021,30870],{"class":143},[127,114023,29716],{"class":781},[127,114025,25656],{"class":154},[127,114027,114028],{"class":781}," mujoco-gym-api",[127,114030,101504],{"class":781},[127,114032,101507],{"class":154},[127,114034,101510],{"class":154},[127,114036,114037,114039,114041],{"class":129,"line":137},[127,114038,30870],{"class":143},[127,114040,101517],{"class":781},[127,114042,114043],{"class":781}," mujoco-gym-api\n",[127,114045,114046,114048,114050,114052,114054],{"class":129,"line":151},[127,114047,24371],{"class":143},[127,114049,24374],{"class":781},[127,114051,101459],{"class":781},[127,114053,108240],{"class":781},[127,114055,114010],{"class":781},[19,114057,101533],{},[632,114059,114060,114070,114073,114079],{},[635,114061,114062,114063,114066,114067,28925],{},"本章使用 ",[124,114064,114065],{},"gymnasium","，不是旧版 ",[124,114068,114069],{},"gym",[635,114071,114072],{},"Gymnasium API 与旧 Gym API 有差异。",[635,114074,114075,114076,28925],{},"旧 Gym 常见返回值是 4 个: ",[124,114077,114078],{},"obs, reward, done, info",[635,114080,114081,114082,28925],{},"Gymnasium 返回值是 5 个: ",[124,114083,114084],{},"obs, reward, terminated, truncated, info",[14,114086,101574],{"id":101573},[19,114088,114089],{},"强化学习环境接口包含:",[814,114091,114092,114101],{},[817,114093,114094],{},[820,114095,114096,114099],{},[823,114097,114098],{"align":24276},"方法",[823,114100,103225],{"align":24276},[860,114102,114103,114113,114123,114133],{},[820,114104,114105,114110],{},[865,114106,114107],{"align":24276},[124,114108,114109],{},"reset()",[865,114111,114112],{"align":24276},"重置环境",[820,114114,114115,114120],{},[865,114116,114117],{"align":24276},[124,114118,114119],{},"step(action)",[865,114121,114122],{"align":24276},"执行动作",[820,114124,114125,114130],{},[865,114126,114127],{"align":24276},[124,114128,114129],{},"observation_space",[865,114131,114132],{"align":24276},"观测空间",[820,114134,114135,114140],{},[865,114136,114137],{"align":24276},[124,114138,114139],{},"action_space",[865,114141,24194],{"align":24276},[19,114143,114144],{},"一个最小环境需要完成:",[117,114146,114149],{"className":114147,"code":114148,"language":5729,"meta":122},[5727],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[124,114150,114148],{"__ignoreMap":122},[62,114152,114154,101547,114157,105167],{"id":114153},"terminated-和-truncated-的区别",[124,114155,114156],{},"terminated",[124,114158,114159],{},"truncated",[19,114161,114162],{},"Gymnasium 把“结束”拆成两个概念：",[814,114164,114165,114175],{},[817,114166,114167],{},[820,114168,114169,114171,114173],{},[823,114170,105103],{"align":24276},[823,114172,101229],{"align":24276},[823,114174,21728],{"align":24276},[860,114176,114177,114189],{},[820,114178,114179,114183,114186],{},[865,114180,114181],{"align":24276},[124,114182,114156],{},[865,114184,114185],{"align":24276},"任务自然结束",[865,114187,114188],{"align":24276},"机械臂到达目标、机器人摔倒",[820,114190,114191,114195,114198],{},[865,114192,114193],{"align":24276},[124,114194,114159],{},[865,114196,114197],{"align":24276},"因外部限制截断",[865,114199,114200],{"align":24276},"达到最大步数、时间限制",[19,114202,114203],{},"本章中：",[117,114205,114207],{"className":30918,"code":114206,"language":30920,"meta":122,"style":122},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[124,114208,114209,114224],{"__ignoreMap":122},[127,114210,114211,114214,114216,114219,114221],{"class":129,"line":130},[127,114212,114213],{"class":147},"terminated ",[127,114215,725],{"class":290},[127,114217,114218],{"class":147}," dist ",[127,114220,1584],{"class":290},[127,114222,114223],{"class":154}," 0.05\n",[127,114225,114226,114229,114231,114233,114236,114238,114240],{"class":129,"line":137},[127,114227,114228],{"class":147},"truncated ",[127,114230,725],{"class":290},[127,114232,39413],{"class":154},[127,114234,114235],{"class":147},".steps ",[127,114237,2253],{"class":290},[127,114239,39413],{"class":154},[127,114241,114242],{"class":147},".max_steps\n",[19,114244,114245],{},"也就是：",[632,114247,114248,114251],{},[635,114249,114250],{},"末端距离目标小于 0.05，任务成功结束。",[635,114252,114253],{},"步数超过上限，episode 被截断。",[62,114255,114257,101547,114259],{"id":114256},"observation_space-和-action_space",[124,114258,114129],{},[124,114260,114139],{},[19,114262,114263],{},"这两个对象告诉算法：",[117,114265,114268],{"className":114266,"code":114267,"language":5729,"meta":122},[5727],"观测长什么样\n动作允许多大\n",[124,114269,114267],{"__ignoreMap":122},[19,114271,15175],{},[117,114273,114275],{"className":30918,"code":114274,"language":30920,"meta":122,"style":122},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[124,114276,114277],{"__ignoreMap":122},[127,114278,114279,114281,114284,114286,114289,114292,114295,114297,114299,114302,114304,114306,114308,114310,114312,114314,114316,114319,114321,114323],{"class":129,"line":130},[127,114280,31363],{"class":154},[127,114282,114283],{"class":147},".action_space ",[127,114285,725],{"class":290},[127,114287,114288],{"class":147}," spaces.Box(",[127,114290,114291],{"class":5758},"low",[127,114293,114294],{"class":290},"=-",[127,114296,102932],{"class":154},[127,114298,12977],{"class":147},[127,114300,114301],{"class":5758},"high",[127,114303,725],{"class":290},[127,114305,102932],{"class":154},[127,114307,12977],{"class":147},[127,114309,96492],{"class":5758},[127,114311,725],{"class":290},[127,114313,681],{"class":147},[127,114315,530],{"class":154},[127,114317,114318],{"class":147},",), ",[127,114320,94029],{"class":5758},[127,114322,725],{"class":290},[127,114324,114325],{"class":147},"np.float32)\n",[19,114327,114328,114329,114332],{},"表示动作是 2 维数组，每个值都在 ",[124,114330,114331],{},"[-1, 1]"," 范围内。",[117,114334,114336],{"className":30918,"code":114335,"language":30920,"meta":122,"style":122},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[124,114337,114338],{"__ignoreMap":122},[127,114339,114340,114342,114345,114347,114349,114351,114353,114356,114358,114360,114362,114364,114366,114368,114370,114372,114374,114376],{"class":129,"line":130},[127,114341,31363],{"class":154},[127,114343,114344],{"class":147},".observation_space ",[127,114346,725],{"class":290},[127,114348,114288],{"class":147},[127,114350,114291],{"class":5758},[127,114352,114294],{"class":290},[127,114354,114355],{"class":147},"np.inf, ",[127,114357,114301],{"class":5758},[127,114359,725],{"class":290},[127,114361,114355],{"class":147},[127,114363,96492],{"class":5758},[127,114365,725],{"class":290},[127,114367,681],{"class":147},[127,114369,1121],{"class":154},[127,114371,114318],{"class":147},[127,114373,94029],{"class":5758},[127,114375,725],{"class":290},[127,114377,114325],{"class":147},[19,114379,114380],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[62,114382,114384],{"id":114383},"frame_skip-是什么","frame_skip 是什么",[117,114386,114388],{"className":30918,"code":114387,"language":30920,"meta":122,"style":122},"self.frame_skip = 5\n",[124,114389,114390],{"__ignoreMap":122},[127,114391,114392,114394,114397,114399],{"class":129,"line":130},[127,114393,31363],{"class":154},[127,114395,114396],{"class":147},".frame_skip ",[127,114398,725],{"class":290},[127,114400,54962],{"class":154},[19,114402,114403,114404,114407,114408,114410],{},"表示外部调用一次 ",[124,114405,114406],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[124,114409,101744],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114412,101782],{"id":101781},[117,114414,114416],{"className":30918,"code":114415,"language":30920,"meta":122,"style":122},"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",[124,114417,114418,114430,114436,114446,114457,114461,114465,114473,114478,114482,114486,114490,114494,114498,114502,114506,114511,114515,114519,114523,114528,114532,114536,114540,114544,114548,114552,114556,114560,114564,114568,114572,114576,114580,114598,114613,114617,114630,114640,114655,114672,114676,114697,114716,114741,114755,114759,114769,114781,114791,114795,114837,114875,114879,114889,114905,114920,114939,114946,114950,114963,114978,114993,115006,115025,115041,115045,115086,115101,115116,115120,115159,115170,115183,115187,115197,115206,115210,115220,115235,115253,115257,115268,115285,115298,115302,115312,115316,115327,115338,115342,115356,115370,115386,115390,115403,115420,115435,115442,115446,115450,115462,115472,115490,115502,115514,115518,115526,115542,115551,115560,115568,115610,115623,115628,115632,115650,115654,115658,115670],{"__ignoreMap":122},[127,114419,114420,114422,114425,114427],{"class":129,"line":130},[127,114421,30932],{"class":290},[127,114423,114424],{"class":147}," gymnasium ",[127,114426,31923],{"class":290},[127,114428,114429],{"class":147}," gym\n",[127,114431,114432,114434],{"class":129,"line":137},[127,114433,30932],{"class":290},[127,114435,101830],{"class":147},[127,114437,114438,114440,114442,114444],{"class":129,"line":151},[127,114439,30932],{"class":290},[127,114441,31920],{"class":147},[127,114443,31923],{"class":290},[127,114445,31926],{"class":147},[127,114447,114448,114450,114452,114454],{"class":129,"line":167},[127,114449,31277],{"class":290},[127,114451,114424],{"class":147},[127,114453,30932],{"class":290},[127,114455,114456],{"class":147}," spaces\n",[127,114458,114459],{"class":129,"line":415},[127,114460,2942],{"emptyLinePlaceholder":606},[127,114462,114463],{"class":129,"line":421},[127,114464,2942],{"emptyLinePlaceholder":606},[127,114466,114467,114469,114471],{"class":129,"line":1766},[127,114468,101843],{"class":154},[127,114470,14106],{"class":290},[127,114472,101848],{"class":781},[127,114474,114475],{"class":129,"line":1856},[127,114476,114477],{"class":781},"\u003Cmujoco model=\"gym_reacher\">\n",[127,114479,114480],{"class":129,"line":1862},[127,114481,112267],{"class":781},[127,114483,114484],{"class":129,"line":1874},[127,114485,2942],{"emptyLinePlaceholder":606},[127,114487,114488],{"class":129,"line":2155},[127,114489,101867],{"class":781},[127,114491,114492],{"class":129,"line":2160},[127,114493,112285],{"class":781},[127,114495,114496],{"class":129,"line":2166},[127,114497,2942],{"emptyLinePlaceholder":606},[127,114499,114500],{"class":129,"line":2171},[127,114501,112294],{"class":781},[127,114503,114504],{"class":129,"line":2185},[127,114505,112299],{"class":781},[127,114507,114508],{"class":129,"line":2190},[127,114509,114510],{"class":781},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[127,114512,114513],{"class":129,"line":2196},[127,114514,2942],{"emptyLinePlaceholder":606},[127,114516,114517],{"class":129,"line":2217},[127,114518,112313],{"class":781},[127,114520,114521],{"class":129,"line":2222},[127,114522,112318],{"class":781},[127,114524,114525],{"class":129,"line":2236},[127,114526,114527],{"class":781},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[127,114529,114530],{"class":129,"line":2241},[127,114531,112328],{"class":781},[127,114533,114534],{"class":129,"line":2270},[127,114535,106967],{"class":781},[127,114537,114538],{"class":129,"line":2275},[127,114539,101896],{"class":781},[127,114541,114542],{"class":129,"line":2292},[127,114543,101901],{"class":781},[127,114545,114546],{"class":129,"line":2297},[127,114547,2942],{"emptyLinePlaceholder":606},[127,114549,114550],{"class":129,"line":2302},[127,114551,106984],{"class":781},[127,114553,114554],{"class":129,"line":2307},[127,114555,112353],{"class":781},[127,114557,114558],{"class":129,"line":2321},[127,114559,112358],{"class":781},[127,114561,114562],{"class":129,"line":2326},[127,114563,106994],{"class":781},[127,114565,114566],{"class":129,"line":3119},[127,114567,101906],{"class":781},[127,114569,114570],{"class":129,"line":3133},[127,114571,96227],{"class":781},[127,114573,114574],{"class":129,"line":3141},[127,114575,2942],{"emptyLinePlaceholder":606},[127,114577,114578],{"class":129,"line":3146},[127,114579,2942],{"emptyLinePlaceholder":606},[127,114581,114582,114584,114587,114589,114591,114593,114596],{"class":129,"line":3152},[127,114583,15236],{"class":290},[127,114585,114586],{"class":143}," ReacherEnv",[127,114588,681],{"class":147},[127,114590,114069],{"class":143},[127,114592,1233],{"class":147},[127,114594,114595],{"class":143},"Env",[127,114597,31326],{"class":147},[127,114599,114600,114603,114605,114607,114610],{"class":129,"line":3158},[127,114601,114602],{"class":147},"    metadata ",[127,114604,725],{"class":290},[127,114606,4990],{"class":147},[127,114608,114609],{"class":781},"\"render_modes\"",[127,114611,114612],{"class":147},": []}\n",[127,114614,114615],{"class":129,"line":3163},[127,114616,2942],{"emptyLinePlaceholder":606},[127,114618,114619,114621,114623,114626,114628],{"class":129,"line":8490},[127,114620,31341],{"class":290},[127,114622,31344],{"class":154},[127,114624,114625],{"class":147},"(self) -> ",[127,114627,96215],{"class":154},[127,114629,4281],{"class":147},[127,114631,114632,114634,114636,114638],{"class":129,"line":8514},[127,114633,31357],{"class":154},[127,114635,17802],{"class":147},[127,114637,31369],{"class":154},[127,114639,2518],{"class":147},[127,114641,114642,114644,114647,114649,114651,114653],{"class":129,"line":8519},[127,114643,31385],{"class":154},[127,114645,114646],{"class":147},".model ",[127,114648,725],{"class":290},[127,114650,101941],{"class":147},[127,114652,101843],{"class":154},[127,114654,687],{"class":147},[127,114656,114657,114659,114662,114664,114667,114669],{"class":129,"line":8525},[127,114658,31385],{"class":154},[127,114660,114661],{"class":147},".data ",[127,114663,725],{"class":290},[127,114665,114666],{"class":147}," mujoco.MjData(",[127,114668,31363],{"class":154},[127,114670,114671],{"class":147},".model)\n",[127,114673,114674],{"class":129,"line":8552},[127,114675,2942],{"emptyLinePlaceholder":606},[127,114677,114678,114680,114683,114685,114688,114690,114693,114695],{"class":129,"line":8557},[127,114679,31385],{"class":154},[127,114681,114682],{"class":147},".tip_site_id ",[127,114684,725],{"class":290},[127,114686,114687],{"class":147}," mujoco.mj_name2id(",[127,114689,31363],{"class":154},[127,114691,114692],{"class":147},".model, mujoco.mjtObj.mjOBJ_SITE, ",[127,114694,112065],{"class":781},[127,114696,687],{"class":147},[127,114698,114699,114701,114704,114706,114708,114710,114712,114714],{"class":129,"line":8563},[127,114700,31385],{"class":154},[127,114702,114703],{"class":147},".target_site_id ",[127,114705,725],{"class":290},[127,114707,114687],{"class":147},[127,114709,31363],{"class":154},[127,114711,114692],{"class":147},[127,114713,112488],{"class":781},[127,114715,687],{"class":147},[127,114717,114718,114720,114722,114724,114726,114728,114731,114733,114735,114737,114739],{"class":129,"line":8575},[127,114719,3039],{"class":290},[127,114721,39413],{"class":154},[127,114723,114682],{"class":147},[127,114725,1584],{"class":290},[127,114727,4635],{"class":154},[127,114729,114730],{"class":290}," or",[127,114732,39413],{"class":154},[127,114734,114703],{"class":147},[127,114736,1584],{"class":290},[127,114738,4635],{"class":154},[127,114740,4281],{"class":147},[127,114742,114743,114746,114748,114750,114753],{"class":129,"line":8587},[127,114744,114745],{"class":290},"            raise",[127,114747,103964],{"class":154},[127,114749,681],{"class":147},[127,114751,114752],{"class":781},"\"required sites not found\"",[127,114754,687],{"class":147},[127,114756,114757],{"class":129,"line":8599},[127,114758,2942],{"emptyLinePlaceholder":606},[127,114760,114761,114763,114765,114767],{"class":129,"line":10258},[127,114762,31385],{"class":154},[127,114764,114396],{"class":147},[127,114766,725],{"class":290},[127,114768,54962],{"class":154},[127,114770,114771,114773,114776,114778],{"class":129,"line":10283},[127,114772,31385],{"class":154},[127,114774,114775],{"class":147},".max_steps ",[127,114777,725],{"class":290},[127,114779,114780],{"class":154}," 200\n",[127,114782,114783,114785,114787,114789],{"class":129,"line":10306},[127,114784,31385],{"class":154},[127,114786,114235],{"class":147},[127,114788,725],{"class":290},[127,114790,47873],{"class":154},[127,114792,114793],{"class":129,"line":10330},[127,114794,2942],{"emptyLinePlaceholder":606},[127,114796,114797,114799,114801,114803,114805,114807,114809,114811,114813,114815,114817,114819,114821,114823,114825,114827,114829,114831,114833,114835],{"class":129,"line":10335},[127,114798,31385],{"class":154},[127,114800,114283],{"class":147},[127,114802,725],{"class":290},[127,114804,114288],{"class":147},[127,114806,114291],{"class":5758},[127,114808,114294],{"class":290},[127,114810,102932],{"class":154},[127,114812,12977],{"class":147},[127,114814,114301],{"class":5758},[127,114816,725],{"class":290},[127,114818,102932],{"class":154},[127,114820,12977],{"class":147},[127,114822,96492],{"class":5758},[127,114824,725],{"class":290},[127,114826,681],{"class":147},[127,114828,530],{"class":154},[127,114830,114318],{"class":147},[127,114832,94029],{"class":5758},[127,114834,725],{"class":290},[127,114836,114325],{"class":147},[127,114838,114839,114841,114843,114845,114847,114849,114851,114853,114855,114857,114859,114861,114863,114865,114867,114869,114871,114873],{"class":129,"line":10340},[127,114840,31385],{"class":154},[127,114842,114344],{"class":147},[127,114844,725],{"class":290},[127,114846,114288],{"class":147},[127,114848,114291],{"class":5758},[127,114850,114294],{"class":290},[127,114852,114355],{"class":147},[127,114854,114301],{"class":5758},[127,114856,725],{"class":290},[127,114858,114355],{"class":147},[127,114860,96492],{"class":5758},[127,114862,725],{"class":290},[127,114864,681],{"class":147},[127,114866,1121],{"class":154},[127,114868,114318],{"class":147},[127,114870,94029],{"class":5758},[127,114872,725],{"class":290},[127,114874,114325],{"class":147},[127,114876,114877],{"class":129,"line":10345},[127,114878,2942],{"emptyLinePlaceholder":606},[127,114880,114881,114883,114886],{"class":129,"line":10354},[127,114882,31341],{"class":290},[127,114884,114885],{"class":143}," _get_obs",[127,114887,114888],{"class":147},"(self) -> np.ndarray:\n",[127,114890,114891,114893,114895,114897,114900,114902],{"class":129,"line":10359},[127,114892,112666],{"class":147},[127,114894,725],{"class":290},[127,114896,39413],{"class":154},[127,114898,114899],{"class":147},".data.site_xpos[",[127,114901,31363],{"class":154},[127,114903,114904],{"class":147},".tip_site_id].copy()\n",[127,114906,114907,114909,114911,114913,114915,114917],{"class":129,"line":10365},[127,114908,112679],{"class":147},[127,114910,725],{"class":290},[127,114912,39413],{"class":154},[127,114914,114899],{"class":147},[127,114916,31363],{"class":154},[127,114918,114919],{"class":147},".target_site_id].copy()\n",[127,114921,114922,114924,114926,114929,114931,114934,114936],{"class":129,"line":10386},[127,114923,110711],{"class":147},[127,114925,725],{"class":290},[127,114927,114928],{"class":147}," np.concatenate([",[127,114930,31363],{"class":154},[127,114932,114933],{"class":147},".data.qpos.copy(), ",[127,114935,31363],{"class":154},[127,114937,114938],{"class":147},".data.qvel.copy(), tip, target])\n",[127,114940,114941,114943],{"class":129,"line":10392},[127,114942,15294],{"class":290},[127,114944,114945],{"class":147}," obs.astype(np.float32)\n",[127,114947,114948],{"class":129,"line":10406},[127,114949,2942],{"emptyLinePlaceholder":606},[127,114951,114952,114954,114957,114959,114961],{"class":129,"line":10412},[127,114953,31341],{"class":290},[127,114955,114956],{"class":143}," _get_reward",[127,114958,114625],{"class":147},[127,114960,719],{"class":154},[127,114962,4281],{"class":147},[127,114964,114965,114967,114969,114971,114973,114975],{"class":129,"line":10439},[127,114966,112666],{"class":147},[127,114968,725],{"class":290},[127,114970,39413],{"class":154},[127,114972,114899],{"class":147},[127,114974,31363],{"class":154},[127,114976,114977],{"class":147},".tip_site_id]\n",[127,114979,114980,114982,114984,114986,114988,114990],{"class":129,"line":10448},[127,114981,112679],{"class":147},[127,114983,725],{"class":290},[127,114985,39413],{"class":154},[127,114987,114899],{"class":147},[127,114989,31363],{"class":154},[127,114991,114992],{"class":147},".target_site_id]\n",[127,114994,114995,114998,115000,115002,115004],{"class":129,"line":10454},[127,114996,114997],{"class":147},"        dist ",[127,114999,725],{"class":290},[127,115001,112130],{"class":147},[127,115003,1207],{"class":290},[127,115005,112135],{"class":147},[127,115007,115008,115011,115013,115015,115017,115020,115022],{"class":129,"line":10462},[127,115009,115010],{"class":147},"        control_cost ",[127,115012,725],{"class":290},[127,115014,112566],{"class":154},[127,115016,7060],{"class":290},[127,115018,115019],{"class":147}," np.sum(np.square(",[127,115021,31363],{"class":154},[127,115023,115024],{"class":147},".data.ctrl))\n",[127,115026,115027,115029,115031,115033,115035,115037,115039],{"class":129,"line":10467},[127,115028,15294],{"class":290},[127,115030,110326],{"class":154},[127,115032,681],{"class":147},[127,115034,1207],{"class":290},[127,115036,112125],{"class":147},[127,115038,1207],{"class":290},[127,115040,112588],{"class":147},[127,115042,115043],{"class":129,"line":17145},[127,115044,2942],{"emptyLinePlaceholder":606},[127,115046,115047,115049,115052,115055,115057,115060,115062,115064,115066,115068,115070,115073,115076,115078,115080,115082,115084],{"class":129,"line":17151},[127,115048,31341],{"class":290},[127,115050,115051],{"class":143}," reset",[127,115053,115054],{"class":147},"(self, ",[127,115056,1130],{"class":290},[127,115058,115059],{"class":147},", seed: ",[127,115061,684],{"class":154},[127,115063,25650],{"class":290},[127,115065,39473],{"class":154},[127,115067,14106],{"class":290},[127,115069,39473],{"class":154},[127,115071,115072],{"class":147},", options: ",[127,115074,115075],{"class":154},"dict",[127,115077,25650],{"class":290},[127,115079,39473],{"class":154},[127,115081,14106],{"class":290},[127,115083,39473],{"class":154},[127,115085,31326],{"class":147},[127,115087,115088,115090,115093,115096,115098],{"class":129,"line":17174},[127,115089,31357],{"class":154},[127,115091,115092],{"class":147},"().reset(",[127,115094,115095],{"class":5758},"seed",[127,115097,725],{"class":290},[127,115099,115100],{"class":147},"seed)\n",[127,115102,115103,115106,115108,115111,115113],{"class":129,"line":17180},[127,115104,115105],{"class":147},"        mujoco.mj_resetData(",[127,115107,31363],{"class":154},[127,115109,115110],{"class":147},".model, ",[127,115112,31363],{"class":154},[127,115114,115115],{"class":147},".data)\n",[127,115117,115118],{"class":129,"line":17203},[127,115119,2942],{"emptyLinePlaceholder":606},[127,115121,115122,115124,115127,115129,115131,115134,115136,115138,115140,115142,115144,115146,115148,115150,115152,115154,115156],{"class":129,"line":17217},[127,115123,31385],{"class":154},[127,115125,115126],{"class":147},".data.qpos[:] ",[127,115128,725],{"class":290},[127,115130,39413],{"class":154},[127,115132,115133],{"class":147},".np_random.uniform(",[127,115135,114291],{"class":5758},[127,115137,114294],{"class":290},[127,115139,86739],{"class":154},[127,115141,12977],{"class":147},[127,115143,114301],{"class":5758},[127,115145,725],{"class":290},[127,115147,86739],{"class":154},[127,115149,12977],{"class":147},[127,115151,32036],{"class":5758},[127,115153,725],{"class":290},[127,115155,31363],{"class":154},[127,115157,115158],{"class":147},".model.nq)\n",[127,115160,115161,115163,115166,115168],{"class":129,"line":17237},[127,115162,31385],{"class":154},[127,115164,115165],{"class":147},".data.qvel[:] ",[127,115167,725],{"class":290},[127,115169,105290],{"class":154},[127,115171,115172,115175,115177,115179,115181],{"class":129,"line":17243},[127,115173,115174],{"class":147},"        mujoco.mj_forward(",[127,115176,31363],{"class":154},[127,115178,115110],{"class":147},[127,115180,31363],{"class":154},[127,115182,115115],{"class":147},[127,115184,115185],{"class":129,"line":17254},[127,115186,2942],{"emptyLinePlaceholder":606},[127,115188,115189,115191,115193,115195],{"class":129,"line":17277},[127,115190,31385],{"class":154},[127,115192,114235],{"class":147},[127,115194,725],{"class":290},[127,115196,47873],{"class":154},[127,115198,115199,115201,115203],{"class":129,"line":17299},[127,115200,15294],{"class":290},[127,115202,39413],{"class":154},[127,115204,115205],{"class":147},"._get_obs(), {}\n",[127,115207,115208],{"class":129,"line":17304},[127,115209,2942],{"emptyLinePlaceholder":606},[127,115211,115212,115214,115217],{"class":129,"line":17310},[127,115213,31341],{"class":290},[127,115215,115216],{"class":143}," step",[127,115218,115219],{"class":147},"(self, action):\n",[127,115221,115222,115224,115226,115229,115231,115233],{"class":129,"line":17324},[127,115223,110751],{"class":147},[127,115225,725],{"class":290},[127,115227,115228],{"class":147}," np.asarray(action, ",[127,115230,94029],{"class":5758},[127,115232,725],{"class":290},[127,115234,114325],{"class":147},[127,115236,115237,115239,115241,115243,115245,115248,115250],{"class":129,"line":17337},[127,115238,110751],{"class":147},[127,115240,725],{"class":290},[127,115242,107976],{"class":147},[127,115244,31363],{"class":154},[127,115246,115247],{"class":147},".action_space.low, ",[127,115249,31363],{"class":154},[127,115251,115252],{"class":147},".action_space.high)\n",[127,115254,115255],{"class":129,"line":17342},[127,115256,2942],{"emptyLinePlaceholder":606},[127,115258,115259,115261,115264,115266],{"class":129,"line":17356},[127,115260,31385],{"class":154},[127,115262,115263],{"class":147},".data.ctrl[:] ",[127,115265,725],{"class":290},[127,115267,107999],{"class":147},[127,115269,115270,115272,115274,115276,115278,115280,115282],{"class":129,"line":17361},[127,115271,3945],{"class":290},[127,115273,102030],{"class":147},[127,115275,26584],{"class":290},[127,115277,32983],{"class":154},[127,115279,681],{"class":147},[127,115281,31363],{"class":154},[127,115283,115284],{"class":147},".frame_skip):\n",[127,115286,115287,115290,115292,115294,115296],{"class":129,"line":17367},[127,115288,115289],{"class":147},"            mujoco.mj_step(",[127,115291,31363],{"class":154},[127,115293,115110],{"class":147},[127,115295,31363],{"class":154},[127,115297,115115],{"class":147},[127,115299,115300],{"class":129,"line":17372},[127,115301,2942],{"emptyLinePlaceholder":606},[127,115303,115304,115306,115308,115310],{"class":129,"line":17386},[127,115305,31385],{"class":154},[127,115307,114235],{"class":147},[127,115309,10019],{"class":290},[127,115311,56233],{"class":154},[127,115313,115314],{"class":129,"line":17391},[127,115315,2942],{"emptyLinePlaceholder":606},[127,115317,115318,115320,115322,115324],{"class":129,"line":17396},[127,115319,110711],{"class":147},[127,115321,725],{"class":290},[127,115323,39413],{"class":154},[127,115325,115326],{"class":147},"._get_obs()\n",[127,115328,115329,115331,115333,115335],{"class":129,"line":17410},[127,115330,110816],{"class":147},[127,115332,725],{"class":290},[127,115334,39413],{"class":154},[127,115336,115337],{"class":147},"._get_reward()\n",[127,115339,115340],{"class":129,"line":17422},[127,115341,2942],{"emptyLinePlaceholder":606},[127,115343,115344,115346,115348,115350,115352,115354],{"class":129,"line":17427},[127,115345,112666],{"class":147},[127,115347,725],{"class":290},[127,115349,39413],{"class":154},[127,115351,114899],{"class":147},[127,115353,31363],{"class":154},[127,115355,114977],{"class":147},[127,115357,115358,115360,115362,115364,115366,115368],{"class":129,"line":17440},[127,115359,112679],{"class":147},[127,115361,725],{"class":290},[127,115363,39413],{"class":154},[127,115365,114899],{"class":147},[127,115367,31363],{"class":154},[127,115369,114992],{"class":147},[127,115371,115372,115374,115376,115378,115381,115383],{"class":129,"line":17445},[127,115373,114997],{"class":147},[127,115375,725],{"class":290},[127,115377,110326],{"class":154},[127,115379,115380],{"class":147},"(np.linalg.norm(tip ",[127,115382,1207],{"class":290},[127,115384,115385],{"class":147}," target))\n",[127,115387,115388],{"class":129,"line":17450},[127,115389,2942],{"emptyLinePlaceholder":606},[127,115391,115392,115395,115397,115399,115401],{"class":129,"line":17455},[127,115393,115394],{"class":147},"        terminated ",[127,115396,725],{"class":290},[127,115398,114218],{"class":147},[127,115400,1584],{"class":290},[127,115402,114223],{"class":154},[127,115404,115405,115408,115410,115412,115414,115416,115418],{"class":129,"line":17468},[127,115406,115407],{"class":147},"        truncated ",[127,115409,725],{"class":290},[127,115411,39413],{"class":154},[127,115413,114235],{"class":147},[127,115415,2253],{"class":290},[127,115417,39413],{"class":154},[127,115419,114242],{"class":147},[127,115421,115422,115425,115427,115429,115432],{"class":129,"line":17473},[127,115423,115424],{"class":147},"        info ",[127,115426,725],{"class":290},[127,115428,4990],{"class":147},[127,115430,115431],{"class":781},"\"distance\"",[127,115433,115434],{"class":147},": dist}\n",[127,115436,115437,115439],{"class":129,"line":33173},[127,115438,15294],{"class":290},[127,115440,115441],{"class":147}," obs, reward, terminated, truncated, info\n",[127,115443,115444],{"class":129,"line":33179},[127,115445,2942],{"emptyLinePlaceholder":606},[127,115447,115448],{"class":129,"line":33185},[127,115449,2942],{"emptyLinePlaceholder":606},[127,115451,115452,115454,115456,115458,115460],{"class":129,"line":33191},[127,115453,32487],{"class":290},[127,115455,2515],{"class":143},[127,115457,101927],{"class":147},[127,115459,96215],{"class":154},[127,115461,4281],{"class":147},[127,115463,115464,115467,115469],{"class":129,"line":33197},[127,115465,115466],{"class":147},"    env ",[127,115468,725],{"class":290},[127,115470,115471],{"class":147}," ReacherEnv()\n",[127,115473,115474,115477,115479,115482,115484,115486,115488],{"class":129,"line":33208},[127,115475,115476],{"class":147},"    obs, info ",[127,115478,725],{"class":290},[127,115480,115481],{"class":147}," env.reset(",[127,115483,115095],{"class":5758},[127,115485,725],{"class":290},[127,115487,867],{"class":154},[127,115489,687],{"class":147},[127,115491,115492,115494,115496,115499],{"class":129,"line":33214},[127,115493,31839],{"class":154},[127,115495,681],{"class":147},[127,115497,115498],{"class":781},"\"initial obs shape:\"",[127,115500,115501],{"class":147},", obs.shape)\n",[127,115503,115504,115506,115508,115511],{"class":129,"line":33234},[127,115505,31839],{"class":154},[127,115507,681],{"class":147},[127,115509,115510],{"class":781},"\"initial info:\"",[127,115512,115513],{"class":147},", info)\n",[127,115515,115516],{"class":129,"line":33240},[127,115517,2942],{"emptyLinePlaceholder":606},[127,115519,115520,115522,115524],{"class":129,"line":33251},[127,115521,110682],{"class":147},[127,115523,725],{"class":290},[127,115525,105290],{"class":154},[127,115527,115528,115530,115532,115534,115536,115538,115540],{"class":129,"line":33257},[127,115529,3743],{"class":290},[127,115531,32156],{"class":147},[127,115533,26584],{"class":290},[127,115535,32983],{"class":154},[127,115537,681],{"class":147},[127,115539,1374],{"class":154},[127,115541,31326],{"class":147},[127,115543,115544,115546,115548],{"class":129,"line":33263},[127,115545,110751],{"class":147},[127,115547,725],{"class":290},[127,115549,115550],{"class":147}," env.action_space.sample()\n",[127,115552,115553,115556,115558],{"class":129,"line":33269},[127,115554,115555],{"class":147},"        obs, reward, terminated, truncated, info ",[127,115557,725],{"class":290},[127,115559,113944],{"class":147},[127,115561,115562,115564,115566],{"class":129,"line":33275},[127,115563,110826],{"class":147},[127,115565,10019],{"class":290},[127,115567,110831],{"class":147},[127,115569,115570,115572,115574,115576,115578,115581,115583,115585,115588,115590,115592,115595,115597,115599,115602,115604,115606,115608],{"class":129,"line":33281},[127,115571,32991],{"class":154},[127,115573,681],{"class":147},[127,115575,110860],{"class":781},[127,115577,110863],{"class":147},[127,115579,115580],{"class":781},"\"reward:\"",[127,115582,12977],{"class":147},[127,115584,32558],{"class":154},[127,115586,115587],{"class":147},"(reward, ",[127,115589,749],{"class":154},[127,115591,110874],{"class":147},[127,115593,115594],{"class":781},"\"distance:\"",[127,115596,12977],{"class":147},[127,115598,32558],{"class":154},[127,115600,115601],{"class":147},"(info[",[127,115603,115431],{"class":781},[127,115605,112731],{"class":147},[127,115607,749],{"class":154},[127,115609,31037],{"class":147},[127,115611,115612,115614,115617,115620],{"class":129,"line":33287},[127,115613,3039],{"class":290},[127,115615,115616],{"class":147}," terminated ",[127,115618,115619],{"class":290},"or",[127,115621,115622],{"class":147}," truncated:\n",[127,115624,115625],{"class":129,"line":33293},[127,115626,115627],{"class":290},"            break\n",[127,115629,115630],{"class":129,"line":33313},[127,115631,2942],{"emptyLinePlaceholder":606},[127,115633,115634,115636,115638,115640,115642,115644,115646,115648],{"class":129,"line":33319},[127,115635,31839],{"class":154},[127,115637,681],{"class":147},[127,115639,110905],{"class":781},[127,115641,12977],{"class":147},[127,115643,32558],{"class":154},[127,115645,110912],{"class":147},[127,115647,749],{"class":154},[127,115649,31037],{"class":147},[127,115651,115652],{"class":129,"line":33335},[127,115653,2942],{"emptyLinePlaceholder":606},[127,115655,115656],{"class":129,"line":33341},[127,115657,2942],{"emptyLinePlaceholder":606},[127,115659,115660,115662,115664,115666,115668],{"class":129,"line":33355},[127,115661,2075],{"class":290},[127,115663,31760],{"class":154},[127,115665,102088],{"class":290},[127,115667,102091],{"class":781},[127,115669,4281],{"class":147},[127,115671,115672],{"class":129,"line":33361},[127,115673,102098],{"class":147},[19,115675,104099],{},[117,115677,115679],{"className":24362,"code":115678,"language":24364,"meta":122,"style":122},"touch ch8_gym_env.py\n",[124,115680,115681],{"__ignoreMap":122},[127,115682,115683,115685],{"class":129,"line":130},[127,115684,101812],{"class":143},[127,115686,115687],{"class":781}," ch8_gym_env.py\n",[19,115689,110973],{},[117,115691,115693],{"className":24362,"code":115692,"language":24364,"meta":122,"style":122},"python ch8_gym_env.py\n",[124,115694,115695],{"__ignoreMap":122},[127,115696,115697,115699],{"class":129,"line":130},[127,115698,30920],{"class":143},[127,115700,115687],{"class":781},[62,115702,102101],{"id":102101},[19,115704,115705],{},"继承 Gymnasium 环境：",[117,115707,115709],{"className":30918,"code":115708,"language":30920,"meta":122,"style":122},"class ReacherEnv(gym.Env):\n",[124,115710,115711],{"__ignoreMap":122},[127,115712,115713,115715,115717,115719,115721,115723,115725],{"class":129,"line":130},[127,115714,15236],{"class":290},[127,115716,114586],{"class":143},[127,115718,681],{"class":147},[127,115720,114069],{"class":143},[127,115722,1233],{"class":147},[127,115724,114595],{"class":143},[127,115726,31326],{"class":147},[19,115728,115729],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115731,115732],{},"初始化模型：",[117,115734,115736],{"className":30918,"code":115735,"language":30920,"meta":122,"style":122},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[124,115737,115738,115752],{"__ignoreMap":122},[127,115739,115740,115742,115744,115746,115748,115750],{"class":129,"line":130},[127,115741,31363],{"class":154},[127,115743,114646],{"class":147},[127,115745,725],{"class":290},[127,115747,101941],{"class":147},[127,115749,101843],{"class":154},[127,115751,687],{"class":147},[127,115753,115754,115756,115758,115760,115762,115764],{"class":129,"line":137},[127,115755,31363],{"class":154},[127,115757,114661],{"class":147},[127,115759,725],{"class":290},[127,115761,114666],{"class":147},[127,115763,31363],{"class":154},[127,115765,114671],{"class":147},[19,115767,115768,115769,115771],{},"这和前面章节一样，只是现在放到了类的 ",[124,115770,31369],{}," 里。",[19,115773,115774],{},"缓存 site ID：",[117,115776,115778],{"className":30918,"code":115777,"language":30920,"meta":122,"style":122},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[124,115779,115780,115794],{"__ignoreMap":122},[127,115781,115782,115784,115786,115788,115790,115792],{"class":129,"line":130},[127,115783,31363],{"class":154},[127,115785,114682],{"class":147},[127,115787,725],{"class":290},[127,115789,114687],{"class":147},[127,115791,90083],{"class":154},[127,115793,687],{"class":147},[127,115795,115796,115798,115800,115802,115804,115806],{"class":129,"line":137},[127,115797,31363],{"class":154},[127,115799,114703],{"class":147},[127,115801,725],{"class":290},[127,115803,114687],{"class":147},[127,115805,90083],{"class":154},[127,115807,687],{"class":147},[19,115809,115810],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115812,115813],{},"reset：",[117,115815,115817],{"className":30918,"code":115816,"language":30920,"meta":122,"style":122},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[124,115818,115819],{"__ignoreMap":122},[127,115820,115821,115823,115825,115827,115829,115831,115833,115835,115837,115839,115841,115843,115845,115847,115849,115851,115853],{"class":129,"line":130},[127,115822,32487],{"class":290},[127,115824,115051],{"class":143},[127,115826,115054],{"class":147},[127,115828,1130],{"class":290},[127,115830,115059],{"class":147},[127,115832,684],{"class":154},[127,115834,25650],{"class":290},[127,115836,39473],{"class":154},[127,115838,14106],{"class":290},[127,115840,39473],{"class":154},[127,115842,115072],{"class":147},[127,115844,115075],{"class":154},[127,115846,25650],{"class":290},[127,115848,39473],{"class":154},[127,115850,14106],{"class":290},[127,115852,39473],{"class":154},[127,115854,31326],{"class":147},[19,115856,115857,115859],{},[124,115858,70589],{}," 做四件事：",[632,115861,115862,115865,115868,115871],{},[635,115863,115864],{},"设置随机种子。",[635,115866,115867],{},"重置 MuJoCo data。",[635,115869,115870],{},"随机初始化关节角。",[635,115872,115873],{},"返回初始观测和 info。",[19,115875,115876],{},"step：",[117,115878,115880],{"className":30918,"code":115879,"language":30920,"meta":122,"style":122},"def step(self, action):\n",[124,115881,115882],{"__ignoreMap":122},[127,115883,115884,115886,115888],{"class":129,"line":130},[127,115885,32487],{"class":290},[127,115887,115216],{"class":143},[127,115889,115219],{"class":147},[19,115891,115892,115894],{},[124,115893,107663],{}," 做六件事：",[632,115896,115897,115900,115906,115909,115912,115915],{},[635,115898,115899],{},"检查并裁剪 action。",[635,115901,115902,115903,28925],{},"写入 ",[124,115904,115905],{},"self.data.ctrl",[635,115907,115908],{},"连续推进若干个 MuJoCo 物理步。",[635,115910,115911],{},"计算新观测。",[635,115913,115914],{},"计算奖励和结束条件。",[635,115916,115917],{},"返回 Gymnasium 标准五元组。",[62,115919,102237],{"id":102237},[117,115921,115923],{"className":30918,"code":115922,"language":30920,"meta":122,"style":122},"import gymnasium as gym\n",[124,115924,115925],{"__ignoreMap":122},[127,115926,115927,115929,115931,115933],{"class":129,"line":130},[127,115928,30932],{"class":290},[127,115930,114424],{"class":147},[127,115932,31923],{"class":290},[127,115934,114429],{"class":147},[19,115936,115937,115938,115940,115941,115944],{},"导入 Gymnasium，并起别名 ",[124,115939,114069],{},"。后面写 ",[124,115942,115943],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[117,115946,115948],{"className":30918,"code":115947,"language":30920,"meta":122,"style":122},"from gymnasium import spaces\n",[124,115949,115950],{"__ignoreMap":122},[127,115951,115952,115954,115956,115958],{"class":129,"line":130},[127,115953,31277],{"class":290},[127,115955,114424],{"class":147},[127,115957,30932],{"class":290},[127,115959,114456],{"class":147},[19,115961,115962,115963,115966],{},"导入空间定义工具。",[124,115964,115965],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[117,115968,115969],{"className":30918,"code":115708,"language":30920,"meta":122,"style":122},[124,115970,115971],{"__ignoreMap":122},[127,115972,115973,115975,115977,115979,115981,115983,115985],{"class":129,"line":130},[127,115974,15236],{"class":290},[127,115976,114586],{"class":143},[127,115978,681],{"class":147},[127,115980,114069],{"class":143},[127,115982,1233],{"class":147},[127,115984,114595],{"class":143},[127,115986,31326],{"class":147},[19,115988,115989,115990,115993,115994,115996,115997,101547,115999,116001],{},"定义一个类，名字叫 ",[124,115991,115992],{},"ReacherEnv","。括号里的 ",[124,115995,115943],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[124,115998,70589],{},[124,116000,107663],{}," 这两个核心方法。",[117,116003,116005],{"className":30918,"code":116004,"language":30920,"meta":122,"style":122},"metadata = {\"render_modes\": []}\n",[124,116006,116007],{"__ignoreMap":122},[127,116008,116009,116012,116014,116016,116018],{"class":129,"line":130},[127,116010,116011],{"class":147},"metadata ",[127,116013,725],{"class":290},[127,116015,4990],{"class":147},[127,116017,114609],{"class":781},[127,116019,114612],{"class":147},[19,116021,116022],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[117,116024,116026],{"className":30918,"code":116025,"language":30920,"meta":122,"style":122},"def __init__(self) -> None:\n",[124,116027,116028],{"__ignoreMap":122},[127,116029,116030,116032,116034,116036,116038],{"class":129,"line":130},[127,116031,32487],{"class":290},[127,116033,31344],{"class":154},[127,116035,114625],{"class":147},[127,116037,96215],{"class":154},[127,116039,4281],{"class":147},[19,116041,116042,116044,116045,28925],{},[124,116043,31369],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[124,116046,116047],{},"env = ReacherEnv()",[117,116049,116051],{"className":30918,"code":116050,"language":30920,"meta":122,"style":122},"super().__init__()\n",[124,116052,116053],{"__ignoreMap":122},[127,116054,116055,116058,116060,116062],{"class":129,"line":130},[127,116056,116057],{"class":154},"super",[127,116059,17802],{"class":147},[127,116061,31369],{"class":154},[127,116063,2518],{"class":147},[19,116065,116066,116067,116069],{},"调用父类 ",[124,116068,115943],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[117,116071,116072],{"className":30918,"code":115735,"language":30920,"meta":122,"style":122},[124,116073,116074,116088],{"__ignoreMap":122},[127,116075,116076,116078,116080,116082,116084,116086],{"class":129,"line":130},[127,116077,31363],{"class":154},[127,116079,114646],{"class":147},[127,116081,725],{"class":290},[127,116083,101941],{"class":147},[127,116085,101843],{"class":154},[127,116087,687],{"class":147},[127,116089,116090,116092,116094,116096,116098,116100],{"class":129,"line":137},[127,116091,31363],{"class":154},[127,116093,114661],{"class":147},[127,116095,725],{"class":290},[127,116097,114666],{"class":147},[127,116099,31363],{"class":154},[127,116101,114671],{"class":147},[19,116103,116104,116105,116107,116108,101547,116111,116114],{},"把 MuJoCo 模型和状态保存到 ",[124,116106,31363],{}," 上。",[124,116109,116110],{},"self.model",[124,116112,116113],{},"self.data"," 表示这个环境对象自己的模型和状态。",[117,116116,116117],{"className":30918,"code":115777,"language":30920,"meta":122,"style":122},[124,116118,116119,116133],{"__ignoreMap":122},[127,116120,116121,116123,116125,116127,116129,116131],{"class":129,"line":130},[127,116122,31363],{"class":154},[127,116124,114682],{"class":147},[127,116126,725],{"class":290},[127,116128,114687],{"class":147},[127,116130,90083],{"class":154},[127,116132,687],{"class":147},[127,116134,116135,116137,116139,116141,116143,116145],{"class":129,"line":137},[127,116136,31363],{"class":154},[127,116138,114703],{"class":147},[127,116140,725],{"class":290},[127,116142,114687],{"class":147},[127,116144,90083],{"class":154},[127,116146,687],{"class":147},[19,116148,116149,116150,101547,116153,116156],{},"提前查好 tip 和 target 的 site ID。这样 ",[124,116151,116152],{},"_get_obs",[124,116154,116155],{},"_get_reward"," 里就不用每次按名字查找。",[117,116158,116160],{"className":30918,"code":116159,"language":30920,"meta":122,"style":122},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[124,116161,116162,116172,116182],{"__ignoreMap":122},[127,116163,116164,116166,116168,116170],{"class":129,"line":130},[127,116165,31363],{"class":154},[127,116167,114396],{"class":147},[127,116169,725],{"class":290},[127,116171,54962],{"class":154},[127,116173,116174,116176,116178,116180],{"class":129,"line":137},[127,116175,31363],{"class":154},[127,116177,114775],{"class":147},[127,116179,725],{"class":290},[127,116181,114780],{"class":154},[127,116183,116184,116186,116188,116190],{"class":129,"line":151},[127,116185,31363],{"class":154},[127,116187,114235],{"class":147},[127,116189,725],{"class":290},[127,116191,47873],{"class":154},[19,116193,116194,116197,116198,116201,116202,116205],{},[124,116195,116196],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[124,116199,116200],{},"max_steps"," 是一个 episode 最多运行多少步。",[124,116203,116204],{},"steps"," 记录当前 episode 已经走了多少步。",[117,116207,116208],{"className":30918,"code":114274,"language":30920,"meta":122,"style":122},[124,116209,116210],{"__ignoreMap":122},[127,116211,116212,116214,116216,116218,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242,116244,116246,116248,116250],{"class":129,"line":130},[127,116213,31363],{"class":154},[127,116215,114283],{"class":147},[127,116217,725],{"class":290},[127,116219,114288],{"class":147},[127,116221,114291],{"class":5758},[127,116223,114294],{"class":290},[127,116225,102932],{"class":154},[127,116227,12977],{"class":147},[127,116229,114301],{"class":5758},[127,116231,725],{"class":290},[127,116233,102932],{"class":154},[127,116235,12977],{"class":147},[127,116237,96492],{"class":5758},[127,116239,725],{"class":290},[127,116241,681],{"class":147},[127,116243,530],{"class":154},[127,116245,114318],{"class":147},[127,116247,94029],{"class":5758},[127,116249,725],{"class":290},[127,116251,114325],{"class":147},[19,116253,116254,116255,116258,116259,101547,116262,116265],{},"定义动作空间。",[124,116256,116257],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[124,116260,116261],{},"low=-1.0",[124,116263,116264],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[117,116267,116268],{"className":30918,"code":114335,"language":30920,"meta":122,"style":122},[124,116269,116270],{"__ignoreMap":122},[127,116271,116272,116274,116276,116278,116280,116282,116284,116286,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306],{"class":129,"line":130},[127,116273,31363],{"class":154},[127,116275,114344],{"class":147},[127,116277,725],{"class":290},[127,116279,114288],{"class":147},[127,116281,114291],{"class":5758},[127,116283,114294],{"class":290},[127,116285,114355],{"class":147},[127,116287,114301],{"class":5758},[127,116289,725],{"class":290},[127,116291,114355],{"class":147},[127,116293,96492],{"class":5758},[127,116295,725],{"class":290},[127,116297,681],{"class":147},[127,116299,1121],{"class":154},[127,116301,114318],{"class":147},[127,116303,94029],{"class":5758},[127,116305,725],{"class":290},[127,116307,114325],{"class":147},[19,116309,116310,116311,116314,116315,116318],{},"定义观测空间。",[124,116312,116313],{},"shape=(10,)"," 表示观测是 10 个数。",[124,116316,116317],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[117,116320,116322],{"className":30918,"code":116321,"language":30920,"meta":122,"style":122},"def _get_obs(self) -> np.ndarray:\n",[124,116323,116324],{"__ignoreMap":122},[127,116325,116326,116328,116330],{"class":129,"line":130},[127,116327,32487],{"class":290},[127,116329,114885],{"class":143},[127,116331,114888],{"class":147},[19,116333,116334,116335,116337],{},"定义内部函数，用来生成观测。函数名前面的 ",[124,116336,1666],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[117,116339,116341],{"className":30918,"code":116340,"language":30920,"meta":122,"style":122},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[124,116342,116343,116357],{"__ignoreMap":122},[127,116344,116345,116347,116349,116351,116353,116355],{"class":129,"line":130},[127,116346,112097],{"class":147},[127,116348,725],{"class":290},[127,116350,39413],{"class":154},[127,116352,114899],{"class":147},[127,116354,31363],{"class":154},[127,116356,114904],{"class":147},[127,116358,116359,116361,116363,116365,116367,116369],{"class":129,"line":137},[127,116360,112107],{"class":147},[127,116362,725],{"class":290},[127,116364,39413],{"class":154},[127,116366,114899],{"class":147},[127,116368,31363],{"class":154},[127,116370,114919],{"class":147},[19,116372,116373],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[117,116375,116377],{"className":30918,"code":116376,"language":30920,"meta":122,"style":122},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[124,116378,116379,116395],{"__ignoreMap":122},[127,116380,116381,116383,116385,116387,116389,116391,116393],{"class":129,"line":130},[127,116382,111383],{"class":147},[127,116384,725],{"class":290},[127,116386,114928],{"class":147},[127,116388,31363],{"class":154},[127,116390,114933],{"class":147},[127,116392,31363],{"class":154},[127,116394,114938],{"class":147},[127,116396,116397,116399],{"class":129,"line":137},[127,116398,17587],{"class":290},[127,116400,114945],{"class":147},[19,116402,116403,116404,116407,116408,116410],{},"拼接观测，并转换成 ",[124,116405,116406],{},"float32","。很多强化学习库默认使用 ",[124,116409,116406],{},"，所以这里主动转换。",[117,116412,116413],{"className":30918,"code":115816,"language":30920,"meta":122,"style":122},[124,116414,116415],{"__ignoreMap":122},[127,116416,116417,116419,116421,116423,116425,116427,116429,116431,116433,116435,116437,116439,116441,116443,116445,116447,116449],{"class":129,"line":130},[127,116418,32487],{"class":290},[127,116420,115051],{"class":143},[127,116422,115054],{"class":147},[127,116424,1130],{"class":290},[127,116426,115059],{"class":147},[127,116428,684],{"class":154},[127,116430,25650],{"class":290},[127,116432,39473],{"class":154},[127,116434,14106],{"class":290},[127,116436,39473],{"class":154},[127,116438,115072],{"class":147},[127,116440,115075],{"class":154},[127,116442,25650],{"class":290},[127,116444,39473],{"class":154},[127,116446,14106],{"class":290},[127,116448,39473],{"class":154},[127,116450,31326],{"class":147},[19,116452,116453,116454,116456,116457,116460],{},"定义 reset。",[124,116455,115095],{}," 用来控制随机数，保证实验可以复现。",[124,116458,116459],{},"options"," 用来接收额外配置，本章暂时不用。",[117,116462,116464],{"className":30918,"code":116463,"language":30920,"meta":122,"style":122},"super().reset(seed=seed)\n",[124,116465,116466],{"__ignoreMap":122},[127,116467,116468,116470,116472,116474,116476],{"class":129,"line":130},[127,116469,116057],{"class":154},[127,116471,115092],{"class":147},[127,116473,115095],{"class":5758},[127,116475,725],{"class":290},[127,116477,115100],{"class":147},[19,116479,116480,116481,116484],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[124,116482,116483],{},"self.np_random"," 生成可复现的随机数。",[117,116486,116488],{"className":30918,"code":116487,"language":30920,"meta":122,"style":122},"mujoco.mj_resetData(self.model, self.data)\n",[124,116489,116490],{"__ignoreMap":122},[127,116491,116492,116495,116497,116499,116501],{"class":129,"line":130},[127,116493,116494],{"class":147},"mujoco.mj_resetData(",[127,116496,31363],{"class":154},[127,116498,115110],{"class":147},[127,116500,31363],{"class":154},[127,116502,115115],{"class":147},[19,116504,116505],{},"把 MuJoCo 状态重置到默认状态。",[117,116507,116509],{"className":30918,"code":116508,"language":30920,"meta":122,"style":122},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[124,116510,116511],{"__ignoreMap":122},[127,116512,116513,116515,116517,116519,116521,116523,116525,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545],{"class":129,"line":130},[127,116514,31363],{"class":154},[127,116516,115126],{"class":147},[127,116518,725],{"class":290},[127,116520,39413],{"class":154},[127,116522,115133],{"class":147},[127,116524,114291],{"class":5758},[127,116526,114294],{"class":290},[127,116528,86739],{"class":154},[127,116530,12977],{"class":147},[127,116532,114301],{"class":5758},[127,116534,725],{"class":290},[127,116536,86739],{"class":154},[127,116538,12977],{"class":147},[127,116540,32036],{"class":5758},[127,116542,725],{"class":290},[127,116544,31363],{"class":154},[127,116546,115158],{"class":147},[19,116548,115870,116549,116552,116553,116556,116557,116559],{},[124,116550,116551],{},"[:]"," 表示修改整个数组。",[124,116554,116555],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[124,116558,102679],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[117,116561,116563],{"className":30918,"code":116562,"language":30920,"meta":122,"style":122},"self.data.qvel[:] = 0.0\n",[124,116564,116565],{"__ignoreMap":122},[127,116566,116567,116569,116571,116573],{"class":129,"line":130},[127,116568,31363],{"class":154},[127,116570,115165],{"class":147},[127,116572,725],{"class":290},[127,116574,105290],{"class":154},[19,116576,116577],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[117,116579,116581],{"className":30918,"code":116580,"language":30920,"meta":122,"style":122},"self.steps = 0\nreturn self._get_obs(), {}\n",[124,116582,116583,116593],{"__ignoreMap":122},[127,116584,116585,116587,116589,116591],{"class":129,"line":130},[127,116586,31363],{"class":154},[127,116588,114235],{"class":147},[127,116590,725],{"class":290},[127,116592,47873],{"class":154},[127,116594,116595,116597,116599],{"class":129,"line":137},[127,116596,17587],{"class":290},[127,116598,39413],{"class":154},[127,116600,115205],{"class":147},[19,116602,116603],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[117,116605,116606],{"className":30918,"code":115879,"language":30920,"meta":122,"style":122},[124,116607,116608],{"__ignoreMap":122},[127,116609,116610,116612,116614],{"class":129,"line":130},[127,116611,32487],{"class":290},[127,116613,115216],{"class":143},[127,116615,115219],{"class":147},[19,116617,116618],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[117,116620,116622],{"className":30918,"code":116621,"language":30920,"meta":122,"style":122},"action = np.asarray(action, dtype=np.float32)\n",[124,116623,116624],{"__ignoreMap":122},[127,116625,116626,116628,116630,116632,116634,116636],{"class":129,"line":130},[127,116627,107971],{"class":147},[127,116629,725],{"class":290},[127,116631,115228],{"class":147},[127,116633,94029],{"class":5758},[127,116635,725],{"class":290},[127,116637,114325],{"class":147},[19,116639,116640,116641,28925],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[124,116642,116406],{},[117,116644,116646],{"className":30918,"code":116645,"language":30920,"meta":122,"style":122},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[124,116647,116648],{"__ignoreMap":122},[127,116649,116650,116652,116654,116656,116658,116660,116662],{"class":129,"line":130},[127,116651,107971],{"class":147},[127,116653,725],{"class":290},[127,116655,107976],{"class":147},[127,116657,31363],{"class":154},[127,116659,115247],{"class":147},[127,116661,31363],{"class":154},[127,116663,115252],{"class":147},[19,116665,116666],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[117,116668,116670],{"className":30918,"code":116669,"language":30920,"meta":122,"style":122},"self.data.ctrl[:] = action\n",[124,116671,116672],{"__ignoreMap":122},[127,116673,116674,116676,116678,116680],{"class":129,"line":130},[127,116675,31363],{"class":154},[127,116677,115263],{"class":147},[127,116679,725],{"class":290},[127,116681,107999],{"class":147},[19,116683,116684],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[117,116686,116688],{"className":30918,"code":116687,"language":30920,"meta":122,"style":122},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[124,116689,116690,116706],{"__ignoreMap":122},[127,116691,116692,116694,116696,116698,116700,116702,116704],{"class":129,"line":130},[127,116693,3567],{"class":290},[127,116695,102030],{"class":147},[127,116697,26584],{"class":290},[127,116699,32983],{"class":154},[127,116701,681],{"class":147},[127,116703,31363],{"class":154},[127,116705,115284],{"class":147},[127,116707,116708,116711,116713,116715,116717],{"class":129,"line":137},[127,116709,116710],{"class":147},"    mujoco.mj_step(",[127,116712,31363],{"class":154},[127,116714,115110],{"class":147},[127,116716,31363],{"class":154},[127,116718,115115],{"class":147},[19,116720,116721,116722,116725,116726,116728,116729,28925],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[124,116723,116724],{},"frame_skip=5","，所以外部调用一次 ",[124,116727,114406],{},"，内部实际执行 5 次 ",[124,116730,101744],{},[117,116732,116734],{"className":30918,"code":116733,"language":30920,"meta":122,"style":122},"self.steps += 1\n",[124,116735,116736],{"__ignoreMap":122},[127,116737,116738,116740,116742,116744],{"class":129,"line":130},[127,116739,31363],{"class":154},[127,116741,114235],{"class":147},[127,116743,10019],{"class":290},[127,116745,56233],{"class":154},[19,116747,116748],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[117,116750,116752],{"className":30918,"code":116751,"language":30920,"meta":122,"style":122},"obs = self._get_obs()\nreward = self._get_reward()\n",[124,116753,116754,116764],{"__ignoreMap":122},[127,116755,116756,116758,116760,116762],{"class":129,"line":130},[127,116757,111383],{"class":147},[127,116759,725],{"class":290},[127,116761,39413],{"class":154},[127,116763,115326],{"class":147},[127,116765,116766,116768,116770,116772],{"class":129,"line":137},[127,116767,111534],{"class":147},[127,116769,725],{"class":290},[127,116771,39413],{"class":154},[127,116773,115337],{"class":147},[19,116775,116776],{},"计算新的观测和奖励。",[117,116778,116780],{"className":30918,"code":116779,"language":30920,"meta":122,"style":122},"dist = float(np.linalg.norm(tip - target))\n",[124,116781,116782],{"__ignoreMap":122},[127,116783,116784,116786,116788,116790,116792,116794],{"class":129,"line":130},[127,116785,112125],{"class":147},[127,116787,725],{"class":290},[127,116789,110326],{"class":154},[127,116791,115380],{"class":147},[127,116793,1207],{"class":290},[127,116795,115385],{"class":147},[19,116797,116798],{},"计算末端到目标的距离，并转换成 Python float。",[117,116800,116801],{"className":30918,"code":114206,"language":30920,"meta":122,"style":122},[124,116802,116803,116815],{"__ignoreMap":122},[127,116804,116805,116807,116809,116811,116813],{"class":129,"line":130},[127,116806,114213],{"class":147},[127,116808,725],{"class":290},[127,116810,114218],{"class":147},[127,116812,1584],{"class":290},[127,116814,114223],{"class":154},[127,116816,116817,116819,116821,116823,116825,116827,116829],{"class":129,"line":137},[127,116818,114228],{"class":147},[127,116820,725],{"class":290},[127,116822,39413],{"class":154},[127,116824,114235],{"class":147},[127,116826,2253],{"class":290},[127,116828,39413],{"class":154},[127,116830,114242],{"class":147},[19,116832,116833],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[117,116835,116837],{"className":30918,"code":116836,"language":30920,"meta":122,"style":122},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[124,116838,116839,116852],{"__ignoreMap":122},[127,116840,116841,116844,116846,116848,116850],{"class":129,"line":130},[127,116842,116843],{"class":147},"info ",[127,116845,725],{"class":290},[127,116847,4990],{"class":147},[127,116849,115431],{"class":781},[127,116851,115434],{"class":147},[127,116853,116854,116856],{"class":129,"line":137},[127,116855,17587],{"class":290},[127,116857,115441],{"class":147},[19,116859,116860,116863],{},[124,116861,116862],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[117,116865,116867],{"className":30918,"code":116866,"language":30920,"meta":122,"style":122},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[124,116868,116869,116878],{"__ignoreMap":122},[127,116870,116871,116874,116876],{"class":129,"line":130},[127,116872,116873],{"class":147},"env ",[127,116875,725],{"class":290},[127,116877,115471],{"class":147},[127,116879,116880,116882,116884,116886,116888,116890,116892],{"class":129,"line":137},[127,116881,113929],{"class":147},[127,116883,725],{"class":290},[127,116885,115481],{"class":147},[127,116887,115095],{"class":5758},[127,116889,725],{"class":290},[127,116891,867],{"class":154},[127,116893,687],{"class":147},[19,116895,116896,116897,116900],{},"创建环境并重置。",[124,116898,116899],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[117,116902,116904],{"className":30918,"code":116903,"language":30920,"meta":122,"style":122},"action = env.action_space.sample()\n",[124,116905,116906],{"__ignoreMap":122},[127,116907,116908,116910,116912],{"class":129,"line":130},[127,116909,107971],{"class":147},[127,116911,725],{"class":290},[127,116913,115550],{"class":147},[19,116915,116916],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116918,102845],{"id":102844},[19,116920,106013],{},[117,116922,116925],{"className":116923,"code":116924,"language":5729,"meta":122},[5727],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[124,116926,116924],{"__ignoreMap":122},[19,116928,116929],{},"这个环境已经具备强化学习环境的基本结构。",[19,116931,116932],{},"主函数里使用随机动作：",[117,116934,116935],{"className":30918,"code":116903,"language":30920,"meta":122,"style":122},[124,116936,116937],{"__ignoreMap":122},[127,116938,116939,116941,116943],{"class":129,"line":130},[127,116940,107971],{"class":147},[127,116942,725],{"class":290},[127,116944,115550],{"class":147},[19,116946,116947],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116949,102877],{"id":102876},[632,116951,116952,116955,116961,116970,116979,116988,116994],{},[635,116953,116954],{},"运行程序。",[635,116956,116957,116958,28925],{},"确认 ",[124,116959,116960],{},"obs.shape == (10,)",[635,116962,111710,116963,116966,116967,28925],{},[124,116964,116965],{},"env.action_space","，应类似 ",[124,116968,116969],{},"Box(-1.0, 1.0, (2,), float32)",[635,116971,106114,116972,116975,116976,28925],{},[124,116973,116974],{},"self.max_steps = 10","，确认环境会更快 ",[124,116977,116978],{},"truncated=True",[635,116980,102940,116981,102943,116984,116987],{},[124,116982,116983],{},"terminated = dist \u003C 0.05",[124,116985,116986],{},"dist \u003C 0.2","，观察是否更容易结束。",[635,116989,102940,116990,116993],{},[124,116991,116992],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[635,116995,116996,116997,116999,117000,117003],{},"在 ",[124,116998,116862],{}," 里加入 ",[124,117001,117002],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117005,102982],{"id":102981},[62,117007,117009],{"id":117008},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117011,117012,117013,117015],{},"Gymnasium 的 ",[124,117014,107663],{}," 返回 5 个值:",[117,117017,117019],{"className":30918,"code":117018,"language":30920,"meta":122,"style":122},"obs, reward, terminated, truncated, info\n",[124,117020,117021],{"__ignoreMap":122},[127,117022,117023],{"class":129,"line":130},[127,117024,117018],{"class":147},[19,117026,117027],{},"不是旧 Gym 的 4 个值。",[62,117029,117031,117034],{"id":117030},"datactrl-action-维度错误",[124,117032,117033],{},"data.ctrl[:] = action"," 维度错误",[19,117036,103052],{},[117,117038,117040],{"className":30918,"code":117039,"language":30920,"meta":122,"style":122},"print(self.model.nu)\nprint(action.shape)\n",[124,117041,117042,117053],{"__ignoreMap":122},[127,117043,117044,117046,117048,117050],{"class":129,"line":130},[127,117045,30955],{"class":154},[127,117047,681],{"class":147},[127,117049,31363],{"class":154},[127,117051,117052],{"class":147},".model.nu)\n",[127,117054,117055,117057],{"class":129,"line":137},[127,117056,30955],{"class":154},[127,117058,117059],{"class":147},"(action.shape)\n",[19,117061,117062],{},"两者必须匹配。",[62,117064,117066],{"id":117065},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117068,102991],{},[117,117070,117072],{"className":30918,"code":117071,"language":30920,"meta":122,"style":122},"mujoco.mj_forward(self.model, self.data)\n",[124,117073,117074],{"__ignoreMap":122},[127,117075,117076,117079,117081,117083,117085],{"class":129,"line":130},[127,117077,117078],{"class":147},"mujoco.mj_forward(",[127,117080,31363],{"class":154},[127,117082,115110],{"class":147},[127,117084,31363],{"class":154},[127,117086,115115],{"class":147},[62,117088,117090,117092],{"id":117089},"observation_space-维度和-obs-不一致",[124,117091,114129],{}," 维度和 obs 不一致",[19,117094,103104],{},[117,117096,117098],{"className":30918,"code":117097,"language":30920,"meta":122,"style":122},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[124,117099,117100,117110,117117],{"__ignoreMap":122},[127,117101,117102,117104,117106,117108],{"class":129,"line":130},[127,117103,111383],{"class":147},[127,117105,725],{"class":290},[127,117107,39413],{"class":154},[127,117109,115326],{"class":147},[127,117111,117112,117114],{"class":129,"line":137},[127,117113,30955],{"class":154},[127,117115,117116],{"class":147},"(obs.shape)\n",[127,117118,117119,117121,117123,117125],{"class":129,"line":151},[127,117120,30955],{"class":154},[127,117122,681],{"class":147},[127,117124,31363],{"class":154},[127,117126,117127],{"class":147},".observation_space.shape)\n",[19,117129,117130],{},"两者必须一致。本章观测是：",[117,117132,117135],{"className":117133,"code":117134,"language":5729,"meta":122},[5727],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[124,117136,117134],{"__ignoreMap":122},[62,117138,117140],{"id":117139},"action-超过范围","action 超过范围",[19,117142,117143],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[117,117145,117146],{"className":30918,"code":116645,"language":30920,"meta":122,"style":122},[124,117147,117148],{"__ignoreMap":122},[127,117149,117150,117152,117154,117156,117158,117160,117162],{"class":129,"line":130},[127,117151,107971],{"class":147},[127,117153,725],{"class":290},[127,117155,107976],{"class":147},[127,117157,31363],{"class":154},[127,117159,115247],{"class":147},[127,117161,31363],{"class":154},[127,117163,115252],{"class":147},[19,117165,117166,117167,28925],{},"这能避免无效动作直接写入 ",[124,117168,101605],{},[62,117170,117172],{"id":117171},"忘记返回-info","忘记返回 info",[19,117174,117012,117175,101547,117177,117179],{},[124,117176,70589],{},[124,117178,107663],{}," 都会返回 info：",[117,117181,117182],{"className":30918,"code":113922,"language":30920,"meta":122,"style":122},[124,117183,117184,117192],{"__ignoreMap":122},[127,117185,117186,117188,117190],{"class":129,"line":130},[127,117187,113929],{"class":147},[127,117189,725],{"class":290},[127,117191,113934],{"class":147},[127,117193,117194,117196,117198],{"class":129,"line":137},[127,117195,113939],{"class":147},[127,117197,725],{"class":290},[127,117199,113944],{"class":147},[19,117201,117202,117203,28925],{},"即使暂时没有额外信息，也返回 ",[124,117204,32999],{},[14,117206,117208],{"id":117207},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117210,117211],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[632,117213,117214,117217,117220,117223,117226,117229],{},[635,117215,117216],{},"更稳定的 reward。",[635,117218,117219],{},"合理的 episode 长度。",[635,117221,117222],{},"可重复的随机目标采样。",[635,117224,117225],{},"render 接口。",[635,117227,117228],{},"环境注册代码。",[635,117230,117231],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117233,117234],{},"如果只是自己写训练循环，最小形式是：",[117,117236,117238],{"className":30918,"code":117237,"language":30920,"meta":122,"style":122},"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",[124,117239,117240,117248,117264,117268,117284,117293,117302,117312],{"__ignoreMap":122},[127,117241,117242,117244,117246],{"class":129,"line":130},[127,117243,116873],{"class":147},[127,117245,725],{"class":290},[127,117247,115471],{"class":147},[127,117249,117250,117252,117254,117256,117258,117260,117262],{"class":129,"line":137},[127,117251,113929],{"class":147},[127,117253,725],{"class":290},[127,117255,115481],{"class":147},[127,117257,115095],{"class":5758},[127,117259,725],{"class":290},[127,117261,867],{"class":154},[127,117263,687],{"class":147},[127,117265,117266],{"class":129,"line":151},[127,117267,2942],{"emptyLinePlaceholder":606},[127,117269,117270,117272,117274,117276,117278,117280,117282],{"class":129,"line":167},[127,117271,3567],{"class":290},[127,117273,102030],{"class":147},[127,117275,26584],{"class":290},[127,117277,32983],{"class":154},[127,117279,681],{"class":147},[127,117281,6952],{"class":154},[127,117283,31326],{"class":147},[127,117285,117286,117289,117291],{"class":129,"line":415},[127,117287,117288],{"class":147},"    action ",[127,117290,725],{"class":290},[127,117292,115550],{"class":147},[127,117294,117295,117298,117300],{"class":129,"line":421},[127,117296,117297],{"class":147},"    obs, reward, terminated, truncated, info ",[127,117299,725],{"class":290},[127,117301,113944],{"class":147},[127,117303,117304,117306,117308,117310],{"class":129,"line":1766},[127,117305,3643],{"class":290},[127,117307,115616],{"class":147},[127,117309,115619],{"class":290},[127,117311,115622],{"class":147},[127,117313,117314,117317,117319],{"class":129,"line":1856},[127,117315,117316],{"class":147},"        obs, info ",[127,117318,725],{"class":290},[127,117320,113934],{"class":147},[14,117322,117324],{"id":117323},"_9本章小结","9.本章小结",[19,117326,117327],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[117,117329,117332],{"className":117330,"code":117331,"language":5729,"meta":122},[5727],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[124,117333,117331],{"__ignoreMap":122},[19,117335,117336],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[575,117338,117339],{},"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":122,"searchDepth":137,"depth":137,"links":117341},[117342,117343,117344,117351,117355,117356,117357,117367,117368],{"id":101175,"depth":137,"text":101176},{"id":101298,"depth":137,"text":101299},{"id":101573,"depth":137,"text":101574,"children":117345},[117346,117348,117350],{"id":114153,"depth":151,"text":117347},"terminated 和 truncated 的区别",{"id":114256,"depth":151,"text":117349},"observation_space 和 action_space",{"id":114383,"depth":151,"text":114384},{"id":101781,"depth":137,"text":101782,"children":117352},[117353,117354],{"id":102101,"depth":151,"text":102101},{"id":102237,"depth":151,"text":102237},{"id":102844,"depth":137,"text":102845},{"id":102876,"depth":137,"text":102877},{"id":102981,"depth":137,"text":102982,"children":117358},[117359,117360,117362,117363,117365,117366],{"id":117008,"depth":151,"text":117009},{"id":117030,"depth":151,"text":117361},"data.ctrl[:] = action 维度错误",{"id":117065,"depth":151,"text":117066},{"id":117089,"depth":151,"text":117364},"observation_space 维度和 obs 不一致",{"id":117139,"depth":151,"text":117140},{"id":117171,"depth":151,"text":117172},{"id":117207,"depth":137,"text":117208},{"id":117323,"depth":137,"text":117324},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113906,"description":122},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117375,"title":117376,"body":117377,"description":117800,"extension":604,"meta":117801,"navigation":606,"path":117802,"seo":117803,"stem":117804,"__hash__":117805},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117378,"toc":117790},[117379,117383,117386,117389,117409,117415,117421,117431,117434,117437,117457,117460,117464,117467,117473,117476,117490,117493,117496,117570,117573,117579,117582,117605,117608,117658,117661,117667,117670,117673,117676,117695,117698,117704,117707,117710,117713,117733,117736,117739,117742,117787],[10,117380,117382],{"id":117381},"mujoco-学习","MuJoCo 学习",[19,117384,117385],{},"初版",[19,117387,117388],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[632,117390,117391,117394,117397,117406],{},[635,117392,117393],{},"MuJoCo 模型文件在描述什么。",[635,117395,117396],{},"Python 代码怎样读取和推进仿真。",[635,117398,117399,888,117401,888,117403,117405],{},[124,117400,104559],{},[124,117402,104889],{},[124,117404,104892],{}," 这些数组为什么重要。",[635,117407,117408],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117410,117411,117412,117414],{},"默认环境为 Fedora 44、Python >= 3.10、",[124,117413,101556],{}," 官方 Python bindings。",[19,117416,117417,117418,117420],{},"注意：本文禁止使用 ",[124,117419,101541],{},"。所有示例均使用：",[117,117422,117423],{"className":30918,"code":102107,"language":30920,"meta":122,"style":122},[124,117424,117425],{"__ignoreMap":122},[127,117426,117427,117429],{"class":129,"line":130},[127,117428,30932],{"class":290},[127,117430,101830],{"class":147},[14,117432,117433],{"id":117433},"适合谁阅读",[19,117435,117436],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[632,117438,117439,117442,117445,117448],{},[635,117440,117441],{},"没学过 MuJoCo，只会一点 Python。",[635,117443,117444],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[635,117446,117447],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[635,117449,117450,117451,117453,117454,117456],{},"以前接触过 ",[124,117452,101541],{},"，现在想迁移到官方 ",[124,117455,101550],{}," Python bindings。",[19,117458,117459],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117461,117463],{"id":117462},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117465,117466],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[117,117468,117471],{"className":117469,"code":117470,"language":5729,"meta":122},[5727],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[124,117472,117470],{"__ignoreMap":122},[19,117474,117475],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[632,117477,117478,117481,117484,117487],{},[635,117479,117480],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[635,117482,117483],{},"快速测试控制算法，不必一开始就上真实机器人。",[635,117485,117486],{},"生成强化学习环境。",[635,117488,117489],{},"采集状态、动作、图像、奖励等训练数据。",[14,117491,117492],{"id":117492},"学习前的心智模型",[19,117494,117495],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[814,117497,117498,117510],{},[817,117499,117500],{},[820,117501,117502,117505,117508],{},[823,117503,117504],{"align":24276},"部分",[823,117506,117507],{"align":24276},"负责什么",[823,117509,21728],{"align":24276},[860,117511,117512,117523,117535,117547,117559],{},[820,117513,117514,117517,117520],{},[865,117515,117516],{"align":24276},"MJCF XML",[865,117518,117519],{"align":24276},"定义世界和机器人结构",[865,117521,117522],{"align":24276},"地面、盒子、关节、电机、摄像头",[820,117524,117525,117529,117532],{},[865,117526,117527],{"align":24276},[124,117528,101238],{},[865,117530,117531],{"align":24276},"编译后的静态模型",[865,117533,117534],{"align":24276},"有几个关节、有几个电机、时间步长是多少",[820,117536,117537,117541,117544],{},[865,117538,117539],{"align":24276},[124,117540,101248],{},[865,117542,117543],{"align":24276},"运行中的动态状态",[865,117545,117546],{"align":24276},"当前时间、位置、速度、电机输入",[820,117548,117549,117553,117556],{},[865,117550,117551],{"align":24276},[124,117552,101744],{},[865,117554,117555],{"align":24276},"推进一步物理仿真",[865,117557,117558],{"align":24276},"根据重力、力、碰撞更新状态",[820,117560,117561,117564,117567],{},[865,117562,117563],{"align":24276},"Viewer \u002F Renderer",[865,117565,117566],{"align":24276},"把仿真显示出来",[865,117568,117569],{"align":24276},"打开窗口或保存图片",[19,117571,117572],{},"一句话总结：",[117,117574,117577],{"className":117575,"code":117576,"language":5729,"meta":122},[5727],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[124,117578,117576],{"__ignoreMap":122},[19,117580,117581],{},"参考来源：",[1681,117583,117584,117591,117598],{},[635,117585,117586,117587],{},"MuJoCo Python 官方文档：",[457,117588,117589],{"href":117589,"rel":117590},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24405],[635,117592,117593,117594],{},"MuJoCo XML Reference：",[457,117595,117596],{"href":117596,"rel":117597},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24405],[635,117599,117600,117601],{},"MuJoCo Overview：",[457,117602,117603],{"href":117603,"rel":117604},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24405],[14,117606,117607],{"id":117607},"章节目录",[632,117609,117610,117616,117622,117628,117634,117640,117646,117652],{},[635,117611,117612],{},[457,117613,117615],{"href":117614},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[635,117617,117618],{},[457,117619,117621],{"href":117620},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[635,117623,117624],{},[457,117625,117627],{"href":117626},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[635,117629,117630],{},[457,117631,117633],{"href":117632},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[635,117635,117636],{},[457,117637,117639],{"href":117638},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[635,117641,117642],{},[457,117643,117645],{"href":117644},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[635,117647,117648],{},[457,117649,117651],{"href":117650},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[635,117653,117654],{},[457,117655,117657],{"href":117656},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117659,117660],{"id":117660},"推荐学习路线",[117,117662,117665],{"className":117663,"code":117664,"language":5729,"meta":122},[5727],"环境安装\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",[124,117666,117664],{"__ignoreMap":122},[19,117668,117669],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117671,117672],{"id":117672},"建议的目录结构",[19,117674,117675],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[117,117677,117679],{"className":24362,"code":117678,"language":24364,"meta":122,"style":122},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[124,117680,117681,117689],{"__ignoreMap":122},[127,117682,117683,117685,117687],{"class":129,"line":130},[127,117684,101795],{"class":143},[127,117686,29756],{"class":154},[127,117688,101800],{"class":781},[127,117690,117691,117693],{"class":129,"line":137},[127,117692,101805],{"class":154},[127,117694,101800],{"class":781},[19,117696,117697],{},"每一章的代码都单独保存：",[117,117699,117702],{"className":117700,"code":117701,"language":5729,"meta":122},[5727],"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",[124,117703,117701],{"__ignoreMap":122},[19,117705,117706],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117708,117709],{"id":117709},"学习方法",[19,117711,117712],{},"每章建议按这个顺序操作：",[632,117714,117715,117718,117721,117724,117727,117730],{},[635,117716,117717],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[635,117719,117720],{},"复制最小可运行代码，保存成指定文件。",[635,117722,117723],{},"运行代码，确认没有报错。",[635,117725,117726],{},"对照“运行结果说明”理解输出。",[635,117728,117729],{},"做“验证步骤”，主动改一两个参数。",[635,117731,117732],{},"遇到报错先看“常见错误与解决方案”。",[19,117734,117735],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117737,117738],{"id":117738},"全局排错顺序",[19,117740,117741],{},"遇到问题时，按下面顺序查：",[632,117743,117744,117750,117756,117761,117764,117767,117774,117784],{},[635,117745,117746,117747],{},"Python 环境是否激活：",[124,117748,117749],{},"which python",[635,117751,117752,117753],{},"MuJoCo 是否能导入：",[124,117754,117755],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[635,117757,117758,117759],{},"是否误装了 ",[124,117760,101541],{},[635,117762,117763],{},"XML 标签是否闭合、属性是否拼写正确",[635,117765,117766],{},"actuator 引用的 joint 名字是否存在",[635,117768,117769,117771,117772],{},[124,117770,101605],{}," 的长度是否等于 ",[124,117773,102687],{},[635,117775,106114,117776,83068,117778,117780,117781],{},[124,117777,104559],{},[124,117779,104889],{}," 后是否调用了 ",[124,117782,117783],{},"mujoco.mj_forward",[635,117785,117786],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[575,117788,117789],{},"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":122,"searchDepth":137,"depth":137,"links":117791},[117792,117793,117794,117795,117796,117797,117798,117799],{"id":117433,"depth":137,"text":117433},{"id":117462,"depth":137,"text":117463},{"id":117492,"depth":137,"text":117492},{"id":117607,"depth":137,"text":117607},{"id":117660,"depth":137,"text":117660},{"id":117672,"depth":137,"text":117672},{"id":117709,"depth":137,"text":117709},{"id":117738,"depth":137,"text":117738},"仿真搭建。",{"category":23919},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117376,"description":117800},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117807,"title":117808,"body":117809,"description":603,"extension":604,"meta":118264,"navigation":606,"path":118265,"seo":118266,"stem":118267,"__hash__":118268},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117810,"toc":118262},[117811,117814,117817,117823,118259],[10,117812,117808],{"id":117813},"_1-最常用的基本操作更新",[19,117815,117816],{},"装linux系统教程：",[19,117818,117819],{},[457,117820,117821],{"href":117821,"rel":117822},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24405],[117,117824,117828],{"className":117825,"code":117826,"language":117827,"meta":122,"style":122},"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",[124,117829,117830,117835,117840,117849,117854,117863,117868,117888,117893,117904,117909,117918,117923,117951,117956,117975,117980,117999,118003,118008,118024,118028,118033,118063,118067,118072,118088,118092,118097,118112,118116,118121,118137,118141,118146,118158,118170,118174,118179,118196,118200,118205,118223,118227,118232,118241,118245,118250],{"__ignoreMap":122},[127,117831,117832],{"class":129,"line":130},[127,117833,117834],{"class":133},"#更新相关的知识\n",[127,117836,117837],{"class":129,"line":137},[127,117838,117839],{"class":133},"# 更新软件包列表（从服务器获取最新软件信息）\n",[127,117841,117842,117844,117847],{"class":129,"line":151},[127,117843,25117],{"class":143},[127,117845,117846],{"class":781}," apt",[127,117848,26783],{"class":781},[127,117850,117851],{"class":129,"line":167},[127,117852,117853],{"class":133},"# 升级所有可更新的软件包（不删除旧包）\n",[127,117855,117856,117858,117860],{"class":129,"line":415},[127,117857,25117],{"class":143},[127,117859,117846],{"class":781},[127,117861,117862],{"class":781}," upgrade\n",[127,117864,117865],{"class":129,"line":421},[127,117866,117867],{"class":133},"#更新和升级软件包\n",[127,117869,117870,117872,117874,117877,117879,117881,117883,117886],{"class":129,"line":1766},[127,117871,25117],{"class":143},[127,117873,117846],{"class":781},[127,117875,117876],{"class":781}," update",[127,117878,26731],{"class":147},[127,117880,25117],{"class":143},[127,117882,117846],{"class":781},[127,117884,117885],{"class":781}," upgrade",[127,117887,101510],{"class":154},[127,117889,117890],{"class":129,"line":1856},[127,117891,117892],{"class":133},"#列出可更新的软件包及版本信息\n",[127,117894,117895,117898,117901],{"class":129,"line":1862},[127,117896,117897],{"class":143},"apt",[127,117899,117900],{"class":781}," list",[127,117902,117903],{"class":154}," --upgradable\n",[127,117905,117906],{"class":129,"line":1874},[127,117907,117908],{"class":133},"#彻底升级（处理依赖关系，可能删除旧包）\n",[127,117910,117911,117913,117915],{"class":129,"line":2155},[127,117912,25117],{"class":143},[127,117914,117846],{"class":781},[127,117916,117917],{"class":781}," full-upgrade\n",[127,117919,117920],{"class":129,"line":2160},[127,117921,117922],{"class":133},"#设置指定版本\n",[127,117924,117925,117927,117929,117931,117933,117936,117938,117940,117942,117944,117947,117949],{"class":129,"line":2166},[127,117926,25117],{"class":143},[127,117928,117846],{"class":781},[127,117930,24374],{"class":781},[127,117932,29442],{"class":290},[127,117934,117935],{"class":781},"package_nam",[127,117937,752],{"class":147},[127,117939,1634],{"class":290},[127,117941,725],{"class":781},[127,117943,1584],{"class":290},[127,117945,117946],{"class":781},"version_numbe",[127,117948,1344],{"class":147},[127,117950,51846],{"class":290},[127,117952,117953],{"class":129,"line":2171},[127,117954,117955],{"class":133},"#只安装软件包不升级\n",[127,117957,117958,117960,117962,117964,117966,117968,117970,117972],{"class":129,"line":2185},[127,117959,25117],{"class":143},[127,117961,117846],{"class":781},[127,117963,24374],{"class":781},[127,117965,29442],{"class":290},[127,117967,117935],{"class":781},[127,117969,752],{"class":147},[127,117971,1634],{"class":290},[127,117973,117974],{"class":154}," --no-upgrade\n",[127,117976,117977],{"class":129,"line":2190},[127,117978,117979],{"class":133},"#只升级，不存在就不安装\n",[127,117981,117982,117984,117986,117988,117990,117992,117994,117996],{"class":129,"line":2196},[127,117983,25117],{"class":143},[127,117985,117846],{"class":781},[127,117987,24374],{"class":781},[127,117989,29442],{"class":290},[127,117991,117935],{"class":781},[127,117993,752],{"class":147},[127,117995,1634],{"class":290},[127,117997,117998],{"class":154}," --only-upgrade\n",[127,118000,118001],{"class":129,"line":2217},[127,118002,2942],{"emptyLinePlaceholder":606},[127,118004,118005],{"class":129,"line":2222},[127,118006,118007],{"class":133},"#安装指定的软件命令\n",[127,118009,118010,118012,118014,118016,118018,118020,118022],{"class":129,"line":2236},[127,118011,25117],{"class":143},[127,118013,117846],{"class":781},[127,118015,24374],{"class":781},[127,118017,29442],{"class":290},[127,118019,117935],{"class":781},[127,118021,752],{"class":147},[127,118023,51846],{"class":290},[127,118025,118026],{"class":129,"line":2241},[127,118027,2942],{"emptyLinePlaceholder":606},[127,118029,118030],{"class":129,"line":2270},[127,118031,118032],{"class":133},"#安装多个软件包\n",[127,118034,118035,118037,118039,118041,118043,118046,118049,118051,118053,118056,118058,118060],{"class":129,"line":2275},[127,118036,25117],{"class":143},[127,118038,117846],{"class":781},[127,118040,24374],{"class":781},[127,118042,29442],{"class":290},[127,118044,118045],{"class":781},"package_",[127,118047,118048],{"class":290},"1>",[127,118050,29442],{"class":290},[127,118052,118045],{"class":781},[127,118054,118055],{"class":290},"2>",[127,118057,29442],{"class":290},[127,118059,118045],{"class":781},[127,118061,118062],{"class":290},"3>\n",[127,118064,118065],{"class":129,"line":2292},[127,118066,2942],{"emptyLinePlaceholder":606},[127,118068,118069],{"class":129,"line":2297},[127,118070,118071],{"class":133},"#更新指定的软件命令\n",[127,118073,118074,118076,118078,118080,118082,118084,118086],{"class":129,"line":2302},[127,118075,25117],{"class":143},[127,118077,117846],{"class":781},[127,118079,117876],{"class":781},[127,118081,29442],{"class":290},[127,118083,117935],{"class":781},[127,118085,752],{"class":147},[127,118087,51846],{"class":290},[127,118089,118090],{"class":129,"line":2307},[127,118091,2942],{"emptyLinePlaceholder":606},[127,118093,118094],{"class":129,"line":2321},[127,118095,118096],{"class":133},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[127,118098,118099,118101,118104,118106,118108,118110],{"class":129,"line":2326},[127,118100,117897],{"class":143},[127,118102,118103],{"class":781}," show",[127,118105,29442],{"class":290},[127,118107,117935],{"class":781},[127,118109,752],{"class":147},[127,118111,51846],{"class":290},[127,118113,118114],{"class":129,"line":3119},[127,118115,2942],{"emptyLinePlaceholder":606},[127,118117,118118],{"class":129,"line":3133},[127,118119,118120],{"class":133},"#删除软件包命令\n",[127,118122,118123,118125,118127,118129,118131,118133,118135],{"class":129,"line":3141},[127,118124,25117],{"class":143},[127,118126,117846],{"class":781},[127,118128,26620],{"class":781},[127,118130,29442],{"class":290},[127,118132,117935],{"class":781},[127,118134,752],{"class":147},[127,118136,51846],{"class":290},[127,118138,118139],{"class":129,"line":3146},[127,118140,2942],{"emptyLinePlaceholder":606},[127,118142,118143],{"class":129,"line":3152},[127,118144,118145],{"class":133},"# 清理旧版本和缓存（释放磁盘空间）\n",[127,118147,118148,118150,118152,118155],{"class":129,"line":3158},[127,118149,25117],{"class":143},[127,118151,117846],{"class":781},[127,118153,118154],{"class":781}," autoremove",[127,118156,118157],{"class":133},"  # 删除不再需要的依赖和库文件\n",[127,118159,118160,118162,118164,118167],{"class":129,"line":3163},[127,118161,25117],{"class":143},[127,118163,117846],{"class":781},[127,118165,118166],{"class":781}," clean",[127,118168,118169],{"class":133},"       # 清理下载的缓存包\n",[127,118171,118172],{"class":129,"line":8490},[127,118173,2942],{"emptyLinePlaceholder":606},[127,118175,118176],{"class":129,"line":8514},[127,118177,118178],{"class":133},"#移除软件包及配置文件\n",[127,118180,118181,118183,118185,118188,118190,118192,118194],{"class":129,"line":8519},[127,118182,25117],{"class":143},[127,118184,117846],{"class":781},[127,118186,118187],{"class":781}," purge",[127,118189,29442],{"class":290},[127,118191,117935],{"class":781},[127,118193,752],{"class":147},[127,118195,51846],{"class":290},[127,118197,118198],{"class":129,"line":8525},[127,118199,2942],{"emptyLinePlaceholder":606},[127,118201,118202],{"class":129,"line":8552},[127,118203,118204],{"class":133},"#查找软件包命令\n",[127,118206,118207,118209,118211,118214,118216,118219,118221],{"class":129,"line":8557},[127,118208,25117],{"class":143},[127,118210,117846],{"class":781},[127,118212,118213],{"class":781}," search",[127,118215,29442],{"class":290},[127,118217,118218],{"class":781},"keywor",[127,118220,989],{"class":147},[127,118222,51846],{"class":290},[127,118224,118225],{"class":129,"line":8563},[127,118226,2942],{"emptyLinePlaceholder":606},[127,118228,118229],{"class":129,"line":8575},[127,118230,118231],{"class":133},"#列出所有已安装的包\n",[127,118233,118234,118236,118238],{"class":129,"line":8587},[127,118235,117897],{"class":143},[127,118237,117900],{"class":781},[127,118239,118240],{"class":154}," --installed\n",[127,118242,118243],{"class":129,"line":8599},[127,118244,2942],{"emptyLinePlaceholder":606},[127,118246,118247],{"class":129,"line":10258},[127,118248,118249],{"class":133},"#列出所有已安装的包的版本信息\n",[127,118251,118252,118254,118256],{"class":129,"line":10283},[127,118253,117897],{"class":143},[127,118255,117900],{"class":781},[127,118257,118258],{"class":154}," --all-versions\n",[575,118260,118261],{},"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":122,"searchDepth":137,"depth":137,"links":118263},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117808,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118270,"title":118271,"body":118272,"description":603,"extension":604,"meta":119013,"navigation":606,"path":119014,"seo":119015,"stem":119016,"__hash__":119017},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118273,"toc":119000},[118274,118277,118281,118284,118290,118294,118298,118304,118309,118314,118319,118324,118329,118332,118335,118338,118341,118345,118348,118353,118356,118361,118364,118369,118376,118379,118382,118385,118388,118391,118402,118406,118410,118415,118420,118424,118429,118433,118438,118442,118446,118451,118454,118499,118504,118508,118512,118517,118523,118528,118538,118543,118553,118558,118563,118590,118594,118597,118602,118605,118630,118634,118639,118642,118647,118652,118672,118677,118680,118695,118699,118752,118755,118760,118764,118767,118782,118785,118788,118793,118797,118801,118804,118808,118812,118815,118820,118825,118829,118836,118844,118847,118854,118859,118864,118867,118872,118879,118884,118891,118895,118897,118902,118906,118909,118912,118917,118920,118925,118928,118933,118938,118943,118947,118952,118956,118997],[10,118275,118271],{"id":118276},"_2-linux装机教程",[14,118278,118280],{"id":118279},"_21-实体机","2.1 实体机",[19,118282,118283],{},"使用清华源：（Ubuntu24.04）",[19,118285,118286],{},[457,118287,118288],{"href":118288,"rel":118289},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24405],[14,118291,118293],{"id":118292},"_22-普通虚拟机","2.2 普通虚拟机",[62,118295,118297],{"id":118296},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118299,118300],{},[457,118301,118302],{"href":118302,"rel":118303},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24405],[19,118305,118306],{},[23,118307],{"alt":122,"src":118308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118310,118311],{},[23,118312],{"alt":122,"src":118313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118315,118316],{},[23,118317],{"alt":122,"src":118318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118320,118321],{},[23,118322],{"alt":122,"src":118323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118325,118326],{},[23,118327],{"alt":122,"src":118328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118330,118331],{},"内存4G（4096MB）；",[19,118333,118334],{},"CPU给4个核；",[19,118336,118337],{},"硬盘动态分配60G；",[19,118339,118340],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[62,118342,118344],{"id":118343},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118346,118347],{},"按照1.1的步骤下载Ubuntu",[19,118349,118350],{},[23,118351],{"alt":122,"src":118352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118354,118355],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118357,118358],{},[23,118359],{"alt":122,"src":118360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118362,118363],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118365,118366],{},[23,118367],{"alt":122,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118370,118371,118372,118375],{},"选择“正常安装”(找不到都用Alt+F7)， ",[30,118373,118374],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118377,118378],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118380,118381],{},"将改动写入磁盘吗 继续",[19,118383,118384],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118386,118387],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118389,118390],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118392,118393,118394,118397,118398,118401],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[30,118395,118396],{},"除了"," 选不发送系统信息与不升级之外， ",[30,118399,118400],{},"其它"," 都跳过或前进）",[62,118403,118405],{"id":118404},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22539,118407,118409],{"id":118408},"_2231-全屏","2.2.3.1 全屏",[19,118411,118412],{},[23,118413],{"alt":122,"src":118414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118416,118417],{},[23,118418],{"alt":122,"src":118419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22539,118421,118423],{"id":118422},"_2232-文件交换","2.2.3.2 文件交换",[19,118425,118426],{},[23,118427],{"alt":122,"src":118428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22539,118430,118432],{"id":118431},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118434,118435],{},[23,118436],{"alt":122,"src":118437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118439,118441],{"id":118440},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[62,118443,118445],{"id":118444},"_231-简介与优缺点","2.3.1 简介与优缺点",[632,118447,118448],{},[635,118449,118450],{},"什么情况下推荐？",[19,118452,118453],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[632,118455,118456],{"start":137},[635,118457,118458,118459],{},"优缺点：",[632,118460,118461,118491],{},[635,118462,118463,118464],{},"优点：",[632,118465,118466,118469,118476,118479,118482,118485,118488],{},[635,118467,118468],{},"WSL2是最好的Linux发行版;(bushi)",[635,118470,118471,118472,118475],{},"性能损耗极低。且比在Windows上跑深度性能 ",[30,118473,118474],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[635,118477,118478],{},"非常方便调用USB设备，可以USB直通;",[635,118480,118481],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[635,118483,118484],{},"非常方便Win与WSL2互相传文件等协同操作;",[635,118486,118487],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[635,118489,118490],{},"非常方便使用Windows的VScode远程开发;",[635,118492,118493,118494],{},"缺点：",[632,118495,118496],{},[635,118497,118498],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118500,118501],{},[23,118502],{"alt":122,"src":118503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[62,118505,118507],{"id":118506},"_232-安装教程","2.3.2 安装教程",[22539,118509,118511],{"id":118510},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[632,118513,118514],{},[635,118515,118516],{},"方法一(图形界面)",[19,118518,118519,118520,25159],{},"用Win+R输入",[124,118521,118522],{},"appwiz.cpl",[19,118524,118525],{},[23,118526],{"alt":122,"src":118527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118529,118530,118531,118534,118535,253],{},"点击OK进入 ",[30,118532,118533],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[30,118536,118537],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118539,118540],{},[23,118541],{"alt":122,"src":118542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118544,118545,118546,101547,118549,118552],{},"选择 ",[30,118547,118548],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[30,118550,118551],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118554,118555],{},[23,118556],{"alt":122,"src":118557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[632,118559,118560],{"start":137},[635,118561,118562],{},"方法二(命令行)",[117,118564,118568],{"className":118565,"code":118566,"language":118567,"meta":122,"style":122},"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",[124,118569,118570,118575,118580,118585],{"__ignoreMap":122},[127,118571,118572],{"class":129,"line":130},[127,118573,118574],{},"# 开启 Linux 子系统\n",[127,118576,118577],{"class":129,"line":137},[127,118578,118579],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[127,118581,118582],{"class":129,"line":151},[127,118583,118584],{},"# 开启虚拟机平台\n",[127,118586,118587],{"class":129,"line":167},[127,118588,118589],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22539,118591,118593],{"id":118592},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118595,118596],{},"用管理员权限打开powershell",[19,118598,118599],{},[23,118600],{"alt":122,"src":118601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118603,118604],{},"升级WSL并设置默认版本为WSL2",[117,118606,118608],{"className":118565,"code":118607,"language":118567,"meta":122,"style":122},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[124,118609,118610,118615,118620,118625],{"__ignoreMap":122},[127,118611,118612],{"class":129,"line":130},[127,118613,118614],{},"# 更新 wsl\n",[127,118616,118617],{"class":129,"line":137},[127,118618,118619],{},"wsl --update\n",[127,118621,118622],{"class":129,"line":151},[127,118623,118624],{},"# 将 wsl 版本设置为 wsl2\n",[127,118626,118627],{"class":129,"line":167},[127,118628,118629],{},"wsl --set-default-version 2\n",[22539,118631,118633],{"id":118632},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[632,118635,118636],{},[635,118637,118638],{},"方式一(商店下载)",[19,118640,118641],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118643,118644],{},[23,118645],{"alt":122,"src":118646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[632,118648,118649],{"start":137},[635,118650,118651],{},"方式二(命令行安装)",[117,118653,118655],{"className":118565,"code":118654,"language":118567,"meta":122,"style":122},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[124,118656,118657,118662,118667],{"__ignoreMap":122},[127,118658,118659],{"class":129,"line":130},[127,118660,118661],{},"# 列出可安装的 Linux 版本\n",[127,118663,118664],{"class":129,"line":137},[127,118665,118666],{},"#（需要科学手段）\n",[127,118668,118669],{"class":129,"line":151},[127,118670,118671],{},"wsl --list --online\n",[19,118673,118674],{},[23,118675],{"alt":122,"src":118676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118678,118679],{},"选择对应发行版并安装",[117,118681,118683],{"className":118565,"code":118682,"language":118567,"meta":122,"style":122},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[124,118684,118685,118690],{"__ignoreMap":122},[127,118686,118687],{"class":129,"line":130},[127,118688,118689],{},"# Ubuntu安装完毕后需要重启系统\n",[127,118691,118692],{"class":129,"line":137},[127,118693,118694],{},"wsl --install -d Ubuntu-24.04\n",[22539,118696,118698],{"id":118697},"_2324-查看系统状态","2.3.2.4 查看系统状态",[117,118700,118702],{"className":118565,"code":118701,"language":118567,"meta":122,"style":122},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[124,118703,118704,118709,118714,118719,118724,118728,118732,118737,118742,118747],{"__ignoreMap":122},[127,118705,118706],{"class":129,"line":130},[127,118707,118708],{},"# 查看 wsl\n",[127,118710,118711],{"class":129,"line":137},[127,118712,118713],{},"wsl -l\n",[127,118715,118716],{"class":129,"line":151},[127,118717,118718],{},"# 查看 wsl 运行版本或模式\n",[127,118720,118721],{"class":129,"line":167},[127,118722,118723],{},"wsl -l -v\n",[127,118725,118726],{"class":129,"line":415},[127,118727,2942],{"emptyLinePlaceholder":606},[127,118729,118730],{"class":129,"line":421},[127,118731,2942],{"emptyLinePlaceholder":606},[127,118733,118734],{"class":129,"line":1766},[127,118735,118736],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[127,118738,118739],{"class":129,"line":1856},[127,118740,118741],{},"wsl --set-version \u003Cdistro> 2\n",[127,118743,118744],{"class":129,"line":1862},[127,118745,118746],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[127,118748,118749],{"class":129,"line":1874},[127,118750,118751],{},"wsl --unregister \u003Cdistro>\n",[19,118753,118754],{},"输出Version为2即正常",[19,118756,118757],{},[23,118758],{"alt":122,"src":118759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22539,118761,118763],{"id":118762},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118765,118766],{},"直接在Powershell里输入wsl命令进入子系统",[117,118768,118770],{"className":118565,"code":118769,"language":118567,"meta":122,"style":122},"# 进入子系统\nwsl\n",[124,118771,118772,118777],{"__ignoreMap":122},[127,118773,118774],{"class":129,"line":130},[127,118775,118776],{},"# 进入子系统\n",[127,118778,118779],{"class":129,"line":137},[127,118780,118781],{},"wsl\n",[19,118783,118784],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118786,118787],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118789,118790],{},[23,118791],{"alt":122,"src":118792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[62,118794,118796],{"id":118795},"_233-配置各种环境","2.3.3 配置各种环境",[22539,118798,118800],{"id":118799},"_2331-换源","2.3.3.1 换源",[19,118802,118803],{},"(同实体机LINUX，往下找教程)",[22539,118805,118807],{"id":118806},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23451,118809,118811],{"id":118810},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118813,118814],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118816,118817],{},[23,118818],{"alt":122,"src":118819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118821,118822],{},[23,118823],{"alt":122,"src":118824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23451,118826,118828],{"id":118827},"_23322-cuda","2.3.3.2.2 CUDA",[19,118830,118831,118832],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[457,118833,118834],{"href":118834,"rel":118835},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24405],[19,118837,118838,118841],{},[23,118839],{"alt":122,"src":118840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[23,118842],{"alt":122,"src":118843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118845,118846],{},"在下方的网站，选择合适的版本。",[19,118848,118849,118850],{},"WSL2 专属 CUDA 指南：",[457,118851,118852],{"href":118852,"rel":118853},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24405],[19,118855,118856],{},[30,118857,118858],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118860,118861],{},[23,118862],{"alt":122,"src":118863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118865,118866],{},"挨行敲一遍",[19,118868,118869],{},[23,118870],{"alt":122,"src":118871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118873,118874,118875,118878],{},"敲完后，输入",[124,118876,118877],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118880,118881],{},[23,118882],{"alt":122,"src":118883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118885,118886,118887,118890],{},"（请详看下方教程的",[30,118888,118889],{},"安装CUDA的配置环境来看","如何配置环境）",[23451,118892,118894],{"id":118893},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118896,118803],{},[19,118898,118899],{},[23,118900],{"alt":122,"src":118901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22539,118903,118905],{"id":118904},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118907,118908],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118910,118911],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118913,118914],{},[23,118915],{"alt":122,"src":118916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118918,118919],{},"连接WSL2",[19,118921,118922],{},[23,118923],{"alt":122,"src":118924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118926,118927],{},"远程开发成功。",[19,118929,118930],{},[23,118931],{"alt":122,"src":118932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118934,118935],{},[23,118936],{"alt":122,"src":118937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118939,118940],{},[23,118941],{"alt":122,"src":118942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22539,118944,118946],{"id":118945},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118948,118949],{},[23,118950],{"alt":122,"src":118951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22539,118953,118955],{"id":118954},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[117,118957,118959],{"className":117825,"code":118958,"language":117827,"meta":122,"style":122},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[124,118960,118961,118969,118977,118988,118992],{"__ignoreMap":122},[127,118962,118963,118965,118967],{"class":129,"line":130},[127,118964,25117],{"class":143},[127,118966,117846],{"class":781},[127,118968,26783],{"class":781},[127,118970,118971,118973,118975],{"class":129,"line":137},[127,118972,25117],{"class":143},[127,118974,117846],{"class":781},[127,118976,117862],{"class":781},[127,118978,118979,118981,118983,118985],{"class":129,"line":151},[127,118980,25117],{"class":143},[127,118982,117846],{"class":781},[127,118984,24374],{"class":781},[127,118986,118987],{"class":781}," mesa-utils\n",[127,118989,118990],{"class":129,"line":167},[127,118991,2942],{"emptyLinePlaceholder":606},[127,118993,118994],{"class":129,"line":415},[127,118995,118996],{"class":133},"#然后重启wsl2即可\n",[575,118998,118999],{},"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":122,"searchDepth":137,"depth":137,"links":119001},[119002,119003,119008],{"id":118279,"depth":137,"text":118280},{"id":118292,"depth":137,"text":118293,"children":119004},[119005,119006,119007],{"id":118296,"depth":151,"text":118297},{"id":118343,"depth":151,"text":118344},{"id":118404,"depth":151,"text":118405},{"id":118440,"depth":137,"text":118441,"children":119009},[119010,119011,119012],{"id":118444,"depth":151,"text":118445},{"id":118506,"depth":151,"text":118507},{"id":118795,"depth":151,"text":118796},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118271,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119019,"title":119020,"body":119021,"description":603,"extension":604,"meta":121957,"navigation":606,"path":121958,"seo":121959,"stem":121960,"__hash__":121961},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119022,"toc":121929},[119023,119026,119030,119036,119040,119046,119050,119238,119241,119246,119250,119254,119257,119260,119266,119271,119274,119277,119282,119315,119320,119324,119401,119404,119409,119413,119416,119455,119458,119467,119485,119490,119497,119614,119619,119622,119649,119654,119658,119667,119717,119724,119728,119731,119745,119752,119786,119791,119795,119818,119821,119826,119830,119833,119836,119839,119881,119885,119888,119891,119932,119936,119940,119943,119948,119953,119956,119979,119982,119990,119995,119998,120003,120008,120011,120016,120020,120025,120048,120053,120115,120123,120128,120133,120136,120141,120144,120149,120154,120172,120177,120183,120188,120202,120206,120209,120212,120215,120258,120261,120266,120367,120370,120375,120379,120383,120420,120424,120428,120432,120478,120482,120527,120531,120538,120546,120601,120604,120681,120684,120707,120711,120714,120719,120724,120732,120735,120740,120745,120750,120753,120758,120767,120770,120775,120778,120849,120854,120857,120862,120865,120870,120873,120878,120881,120886,120891,120894,120969,120972,120985,120990,120993,121007,121010,121039,121044,121073,121076,121081,121085,121090,121099,121102,121107,121110,121115,121118,121121,121126,121129,121134,121139,121142,121147,121150,121275,121280,121310,121313,121318,121323,121340,121343,121386,121389,121416,121421,121434,121577,121581,121586,121600,121603,121654,121657,121687,121690,121706,121711,121725,121728,121795,121800,121809,121814,121817,121829,121834,121841,121865,121868,121873,121876,121895,121900,121907,121919,121926],[10,119024,119020],{"id":119025},"_3-安装必备配置",[14,119027,119029],{"id":119028},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[117,119031,119034],{"className":119032,"code":119033,"language":5729},[5727],"  打开下方网站（注意，该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",[124,119035,119033],{"__ignoreMap":122},[62,119037,119039],{"id":119038},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[117,119041,119044],{"className":119042,"code":119043,"language":5729},[5727],"  输入以下命令\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",[124,119045,119043],{"__ignoreMap":122},[62,119047,119049],{"id":119048},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[117,119051,119055],{"className":119052,"code":119053,"language":119054,"meta":122,"style":122},"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",[124,119056,119057,119065,119076,119088,119102,119106,119116,119121,119125,119129,119134,119138,119150,119154,119159,119163,119174,119178,119194,119198,119209,119213,119218,119222,119230],{"__ignoreMap":122},[127,119058,119059,119061,119063],{"class":129,"line":130},[127,119060,25117],{"class":143},[127,119062,117846],{"class":781},[127,119064,26783],{"class":781},[127,119066,119067,119069,119071,119073],{"class":129,"line":137},[127,119068,25117],{"class":143},[127,119070,117846],{"class":781},[127,119072,24374],{"class":781},[127,119074,119075],{"class":781}," vim\n",[127,119077,119078,119080,119083,119085],{"class":129,"line":151},[127,119079,25117],{"class":143},[127,119081,119082],{"class":781}," rm",[127,119084,25866],{"class":154},[127,119086,119087],{"class":781}," \u002Fetc\u002Fapt\u002Fsources.list\n",[127,119089,119090,119092,119094,119096,119099],{"class":129,"line":167},[127,119091,25117],{"class":143},[127,119093,119082],{"class":781},[127,119095,25866],{"class":154},[127,119097,119098],{"class":781}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[127,119100,119101],{"class":154},"**\n",[127,119103,119104],{"class":129,"line":415},[127,119105,2942],{"emptyLinePlaceholder":606},[127,119107,119108,119110,119113],{"class":129,"line":421},[127,119109,25117],{"class":143},[127,119111,119112],{"class":781}," vim",[127,119114,119115],{"class":781}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[127,119117,119118],{"class":129,"line":1766},[127,119119,119120],{"class":781},"```\n",[127,119122,119123],{"class":129,"line":1856},[127,119124,2942],{"emptyLinePlaceholder":606},[127,119126,119127],{"class":129,"line":1862},[127,119128,2942],{"emptyLinePlaceholder":606},[127,119130,119131],{"class":129,"line":1874},[127,119132,119133],{"class":143},"选择好Ubuntu版本后，复制下方的内容。\n",[127,119135,119136],{"class":129,"line":2155},[127,119137,2942],{"emptyLinePlaceholder":606},[127,119139,119140,119142,119145,119148],{"class":129,"line":2160},[127,119141,902],{"class":290},[127,119143,119144],{"class":781},"[](",[127,119146,119147],{"class":143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[127,119149,687],{"class":781},[127,119151,119152],{"class":129,"line":2166},[127,119153,2942],{"emptyLinePlaceholder":606},[127,119155,119156],{"class":129,"line":2171},[127,119157,119158],{"class":143},"粘贴进去\n",[127,119160,119161],{"class":129,"line":2185},[127,119162,2942],{"emptyLinePlaceholder":606},[127,119164,119165,119167,119169,119172],{"class":129,"line":2190},[127,119166,902],{"class":290},[127,119168,119144],{"class":781},[127,119170,119171],{"class":143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[127,119173,687],{"class":781},[127,119175,119176],{"class":129,"line":2196},[127,119177,2942],{"emptyLinePlaceholder":606},[127,119179,119180,119183,119186,119189,119191],{"class":129,"line":2217},[127,119181,119182],{"class":143},"按一下ESC，然后英文冒号，输入",[127,119184,119185],{"class":781}," `",[127,119187,119188],{"class":143},":wq!",[127,119190,1646],{"class":781},[127,119192,119193],{"class":143},"然后回车\n",[127,119195,119196],{"class":129,"line":2222},[127,119197,2942],{"emptyLinePlaceholder":606},[127,119199,119200,119202,119204,119207],{"class":129,"line":2236},[127,119201,902],{"class":290},[127,119203,119144],{"class":781},[127,119205,119206],{"class":143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[127,119208,687],{"class":781},[127,119210,119211],{"class":129,"line":2241},[127,119212,2942],{"emptyLinePlaceholder":606},[127,119214,119215],{"class":129,"line":2270},[127,119216,119217],{"class":143},"输入以下命令\n",[127,119219,119220],{"class":129,"line":2275},[127,119221,2942],{"emptyLinePlaceholder":606},[127,119223,119224,119227],{"class":129,"line":2292},[127,119225,119226],{"class":781},"```",[127,119228,119229],{"class":143},"Bash\n",[127,119231,119232,119234,119236],{"class":129,"line":2297},[127,119233,25117],{"class":143},[127,119235,117846],{"class":781},[127,119237,26783],{"class":781},[19,119239,119240],{},"这里被替换成对应学校则成功",[19,119242,119243],{},[23,119244],{"alt":122,"src":119245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119247,119249],{"id":119248},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[62,119251,119253],{"id":119252},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119255,119256],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119258,119259],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119261,119262],{},[457,119263,119264],{"href":119264,"rel":119265},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24405],[19,119267,119268],{},[23,119269],{"alt":122,"src":119270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119272,119273],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119275,119276],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119278,119279],{},[23,119280],{"alt":122,"src":119281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[117,119283,119285],{"className":117825,"code":119284,"language":117827,"meta":122,"style":122},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[124,119286,119287,119292,119299,119304],{"__ignoreMap":122},[127,119288,119289],{"class":129,"line":130},[127,119290,119291],{"class":133},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[127,119293,119294,119296],{"class":129,"line":137},[127,119295,101805],{"class":154},[127,119297,119298],{"class":781}," ~\u002FDownloads\n",[127,119300,119301],{"class":129,"line":151},[127,119302,119303],{"class":133},"#下方chrome安装包名不一定是这个，根据名字来看\n",[127,119305,119306,119308,119310,119312],{"class":129,"line":167},[127,119307,25117],{"class":143},[127,119309,117846],{"class":781},[127,119311,24374],{"class":781},[127,119313,119314],{"class":781}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119316,119317],{},[23,119318],{"alt":122,"src":119319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[62,119321,119323],{"id":119322},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[117,119325,119327],{"className":117825,"code":119326,"language":117827,"meta":122,"style":122},"# 老版\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",[124,119328,119329,119334,119342,119353,119358,119362,119367,119377,119385,119396],{"__ignoreMap":122},[127,119330,119331],{"class":129,"line":130},[127,119332,119333],{"class":133},"# 老版\n",[127,119335,119336,119338,119340],{"class":129,"line":137},[127,119337,25117],{"class":143},[127,119339,117846],{"class":781},[127,119341,26783],{"class":781},[127,119343,119344,119346,119348,119350],{"class":129,"line":151},[127,119345,25117],{"class":143},[127,119347,117846],{"class":781},[127,119349,24374],{"class":781},[127,119351,119352],{"class":781}," neofetch\n",[127,119354,119355],{"class":129,"line":167},[127,119356,119357],{"class":143},"neofetch\n",[127,119359,119360],{"class":129,"line":415},[127,119361,2942],{"emptyLinePlaceholder":606},[127,119363,119364],{"class":129,"line":421},[127,119365,119366],{"class":133},"# 新版\n",[127,119368,119369,119371,119374],{"class":129,"line":1766},[127,119370,25117],{"class":143},[127,119372,119373],{"class":781}," add-apt-repository",[127,119375,119376],{"class":781}," ppa:zhangsongcui3371\u002Ffastfetch\n",[127,119378,119379,119381,119383],{"class":129,"line":1856},[127,119380,25117],{"class":143},[127,119382,117846],{"class":781},[127,119384,26783],{"class":781},[127,119386,119387,119389,119391,119393],{"class":129,"line":1862},[127,119388,25117],{"class":143},[127,119390,117846],{"class":781},[127,119392,24374],{"class":781},[127,119394,119395],{"class":781}," fastfetch\n",[127,119397,119398],{"class":129,"line":1874},[127,119399,119400],{"class":143},"fastfetch\n",[19,119402,119403],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119405,119406],{},[23,119407],{"alt":122,"src":119408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[62,119410,119412],{"id":119411},"_323-移除snap应用","3.2.3 移除snap应用",[19,119414,119415],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[117,119417,119419],{"className":117825,"code":119418,"language":117827,"meta":122,"style":122},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[124,119420,119421,119433,119444],{"__ignoreMap":122},[127,119422,119423,119425,119427,119430],{"class":129,"line":130},[127,119424,25117],{"class":143},[127,119426,27053],{"class":781},[127,119428,119429],{"class":781}," disable",[127,119431,119432],{"class":781}," snapd.service\n",[127,119434,119435,119437,119439,119441],{"class":129,"line":137},[127,119436,25117],{"class":143},[127,119438,27053],{"class":781},[127,119440,119429],{"class":781},[127,119442,119443],{"class":781}," snapd.socket\n",[127,119445,119446,119448,119450,119452],{"class":129,"line":151},[127,119447,25117],{"class":143},[127,119449,27053],{"class":781},[127,119451,119429],{"class":781},[127,119453,119454],{"class":781}," snapd.seeded.service\n",[19,119456,119457],{},"然后查看snap应用列表",[19,119459,119460,119461,119466],{},"根据你安装的选择不同（最小安装或普通安装），有",[457,119462,119465],{"href":119463,"rel":119464},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24405],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[117,119468,119470],{"className":117825,"code":119469,"language":117827,"meta":122,"style":122},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[124,119471,119472,119477],{"__ignoreMap":122},[127,119473,119474],{"class":129,"line":130},[127,119475,119476],{"class":133},"# 查询当前系统上snap安装了哪些app\n",[127,119478,119479,119482],{"class":129,"line":137},[127,119480,119481],{"class":143},"snap",[127,119483,119484],{"class":781}," list\n",[19,119486,119487],{},[23,119488],{"alt":122,"src":119489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119491,119492,119493,119496],{},"卸载掉图中所有应用，按照 ",[30,119494,119495],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[117,119498,119500],{"className":117825,"code":119499,"language":117827,"meta":122,"style":122},"#移除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",[124,119501,119502,119507,119519,119524,119535,119540,119551,119556,119567,119572,119576,119581,119592,119603],{"__ignoreMap":122},[127,119503,119504],{"class":129,"line":130},[127,119505,119506],{"class":133},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[127,119508,119509,119511,119514,119516],{"class":129,"line":137},[127,119510,25117],{"class":143},[127,119512,119513],{"class":781}," snap",[127,119515,26620],{"class":781},[127,119517,119518],{"class":781}," snap-store\n",[127,119520,119521],{"class":129,"line":151},[127,119522,119523],{"class":133},"#移除firefox浏览器\n",[127,119525,119526,119528,119530,119532],{"class":129,"line":167},[127,119527,25117],{"class":143},[127,119529,119513],{"class":781},[127,119531,26620],{"class":781},[127,119533,119534],{"class":781}," firefox\n",[127,119536,119537],{"class":129,"line":415},[127,119538,119539],{"class":133},"#移除gnome-42-2204\n",[127,119541,119542,119544,119546,119548],{"class":129,"line":421},[127,119543,25117],{"class":143},[127,119545,119513],{"class":781},[127,119547,26620],{"class":781},[127,119549,119550],{"class":781}," gnome-42-2204\n",[127,119552,119553],{"class":129,"line":1766},[127,119554,119555],{"class":133},"#移除gtk-common-themes\n",[127,119557,119558,119560,119562,119564],{"class":129,"line":1856},[127,119559,25117],{"class":143},[127,119561,119513],{"class":781},[127,119563,26620],{"class":781},[127,119565,119566],{"class":781}," gtk-common-themes\n",[127,119568,119569],{"class":129,"line":1862},[127,119570,119571],{"class":133},"#移除其它...\n",[127,119573,119574],{"class":129,"line":1874},[127,119575,3216],{"class":147},[127,119577,119578],{"class":129,"line":2155},[127,119579,119580],{"class":133},"#移除core22,bare以及snapd\n",[127,119582,119583,119585,119587,119589],{"class":129,"line":2160},[127,119584,25117],{"class":143},[127,119586,119513],{"class":781},[127,119588,26620],{"class":781},[127,119590,119591],{"class":781}," core22\n",[127,119593,119594,119596,119598,119600],{"class":129,"line":2166},[127,119595,25117],{"class":143},[127,119597,119513],{"class":781},[127,119599,26620],{"class":781},[127,119601,119602],{"class":781}," bare\n",[127,119604,119605,119607,119609,119611],{"class":129,"line":2171},[127,119606,25117],{"class":143},[127,119608,119513],{"class":781},[127,119610,26620],{"class":781},[127,119612,119613],{"class":781}," snapd\n",[19,119615,119616],{},[23,119617],{"alt":122,"src":119618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119620,119621],{},"输入以下命令查看是否还有snap包",[117,119623,119625],{"className":117825,"code":119624,"language":117827,"meta":122,"style":122},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[124,119626,119627,119633,119637,119641,119645],{"__ignoreMap":122},[127,119628,119629,119631],{"class":129,"line":130},[127,119630,119481],{"class":143},[127,119632,119484],{"class":781},[127,119634,119635],{"class":129,"line":137},[127,119636,119333],{"class":133},[127,119638,119639],{"class":129,"line":151},[127,119640,119357],{"class":143},[127,119642,119643],{"class":129,"line":167},[127,119644,119366],{"class":133},[127,119646,119647],{"class":129,"line":415},[127,119648,119400],{"class":143},[19,119650,119651],{},[23,119652],{"alt":122,"src":119653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[62,119655,119657],{"id":119656},"_324-移除snap","3.2.4 移除snap",[19,119659,119660,119661,119666],{},"在删除掉",[457,119662,119665],{"href":119663,"rel":119664},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24405],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[117,119668,119670],{"className":117825,"code":119669,"language":117827,"meta":122,"style":122}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[124,119671,119672,119677,119690,119695,119706],{"__ignoreMap":122},[127,119673,119674],{"class":129,"line":130},[127,119675,119676],{"class":133}," #使用apt移除掉snap\n",[127,119678,119679,119681,119683,119685,119688],{"class":129,"line":137},[127,119680,25117],{"class":143},[127,119682,117846],{"class":781},[127,119684,118154],{"class":781},[127,119686,119687],{"class":154}," --purge",[127,119689,119613],{"class":781},[127,119691,119692],{"class":129,"line":151},[127,119693,119694],{"class":133},"#移除snapd的一些目录\n",[127,119696,119697,119699,119701,119703],{"class":129,"line":167},[127,119698,25117],{"class":143},[127,119700,119082],{"class":781},[127,119702,25866],{"class":154},[127,119704,119705],{"class":781}," \u002Fvar\u002Fcache\u002Fsnapd\n",[127,119707,119708,119710,119712,119714],{"class":129,"line":415},[127,119709,25117],{"class":143},[127,119711,119082],{"class":781},[127,119713,25866],{"class":154},[127,119715,119716],{"class":781}," ~\u002Fsnap\n",[19,119718,119719,119720,119723],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[124,119721,119722],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[62,119725,119727],{"id":119726},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119729,119730],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[117,119732,119734],{"className":117825,"code":119733,"language":117827,"meta":122,"style":122},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[124,119735,119736],{"__ignoreMap":122},[127,119737,119738,119740,119742],{"class":129,"line":130},[127,119739,25117],{"class":143},[127,119741,119112],{"class":781},[127,119743,119744],{"class":781}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119746,119747,119748,119751],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[124,119749,119750],{},":wq"," 回车",[117,119753,119755],{"className":117825,"code":119754,"language":117827,"meta":122,"style":122},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[124,119756,119757,119764,119778],{"__ignoreMap":122},[127,119758,119759,119762],{"class":129,"line":130},[127,119760,119761],{"class":143},"Package:",[127,119763,119613],{"class":781},[127,119765,119766,119769,119772,119775],{"class":129,"line":137},[127,119767,119768],{"class":143},"Pin:",[127,119770,119771],{"class":781}," release",[127,119773,119774],{"class":781}," a=",[127,119776,119777],{"class":154},"*\n",[127,119779,119780,119783],{"class":129,"line":151},[127,119781,119782],{"class":143},"Pin-Priority:",[127,119784,119785],{"class":154}," -10\n",[19,119787,119788],{},[23,119789],{"alt":122,"src":119790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[62,119792,119794],{"id":119793},"_326-测试是否成功","3.2.6 测试是否成功",[117,119796,119798],{"className":117825,"code":119797,"language":117827,"meta":122,"style":122},"sudo apt update\nsudo apt install firefox\n",[124,119799,119800,119808],{"__ignoreMap":122},[127,119801,119802,119804,119806],{"class":129,"line":130},[127,119803,25117],{"class":143},[127,119805,117846],{"class":781},[127,119807,26783],{"class":781},[127,119809,119810,119812,119814,119816],{"class":129,"line":137},[127,119811,25117],{"class":143},[127,119813,117846],{"class":781},[127,119815,24374],{"class":781},[127,119817,119534],{"class":781},[19,119819,119820],{},"这里提示snapd无法被安装，就证明成功了",[19,119822,119823],{},[23,119824],{"alt":122,"src":119825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[62,119827,119829],{"id":119828},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119831,119832],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119834,119835],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119837,119838],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[117,119840,119842],{"className":117825,"code":119841,"language":117827,"meta":122,"style":122},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[124,119843,119844,119849,119858,119863,119871],{"__ignoreMap":122},[127,119845,119846],{"class":129,"line":130},[127,119847,119848],{"class":133},"# 添加Mozilla提供的源\n",[127,119850,119851,119853,119855],{"class":129,"line":137},[127,119852,25117],{"class":143},[127,119854,119373],{"class":781},[127,119856,119857],{"class":781}," ppa:mozillateam\u002Fppa\n",[127,119859,119860],{"class":129,"line":151},[127,119861,119862],{"class":133},"# 安装Firefox\n",[127,119864,119865,119867,119869],{"class":129,"line":167},[127,119866,25117],{"class":143},[127,119868,117846],{"class":781},[127,119870,26783],{"class":781},[127,119872,119873,119875,119877,119879],{"class":129,"line":415},[127,119874,25117],{"class":143},[127,119876,117846],{"class":781},[127,119878,24374],{"class":781},[127,119880,119534],{"class":781},[62,119882,119884],{"id":119883},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119886,119887],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119889,119890],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[117,119892,119894],{"className":117825,"code":119893,"language":117827,"meta":122,"style":122},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[124,119895,119896,119901,119911,119919,119923],{"__ignoreMap":122},[127,119897,119898],{"class":129,"line":130},[127,119899,119900],{"class":133},"#删掉禁止安装snap的配置文件\n",[127,119902,119903,119905,119907,119909],{"class":129,"line":137},[127,119904,25117],{"class":143},[127,119906,119082],{"class":781},[127,119908,25866],{"class":154},[127,119910,119744],{"class":781},[127,119912,119913,119915,119917],{"class":129,"line":151},[127,119914,25117],{"class":143},[127,119916,117846],{"class":781},[127,119918,26783],{"class":781},[127,119920,119921],{"class":129,"line":167},[127,119922,2942],{"emptyLinePlaceholder":606},[127,119924,119925,119927,119929],{"class":129,"line":415},[127,119926,25117],{"class":143},[127,119928,117846],{"class":781},[127,119930,119931],{"class":781}," dist-update\n",[14,119933,119935],{"id":119934},"_33-中文输入法","3.3 中文输入法",[62,119937,119939],{"id":119938},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119941,119942],{},"官网下载搜狗输入法",[19,119944,119945],{},[23,119946],{"alt":122,"src":119947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119949,119950],{},[23,119951],{"alt":122,"src":119952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119954,119955],{},"打开终端输入如下",[117,119957,119959],{"className":117825,"code":119958,"language":117827,"meta":122,"style":122},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[124,119960,119961,119968],{"__ignoreMap":122},[127,119962,119963,119965],{"class":129,"line":130},[127,119964,101805],{"class":154},[127,119966,119967],{"class":781}," ~\u002FDownloads\u002F\n",[127,119969,119970,119972,119974,119976],{"class":129,"line":137},[127,119971,25117],{"class":143},[127,119973,117846],{"class":781},[127,119975,24374],{"class":781},[127,119977,119978],{"class":781}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119980,119981],{},"打开Fcitx",[19,119983,119984,119987],{},[23,119985],{"alt":122,"src":119986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[23,119988],{"alt":122,"src":119989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119991,119992],{},[23,119993],{"alt":122,"src":119994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119996,119997],{},"添加搜狗输入法",[19,119999,120000],{},[23,120001],{"alt":122,"src":120002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120004,120005],{},[23,120006],{"alt":122,"src":120007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120009,120010],{},"将搜狗输入法设置为唯一输入法",[19,120012,120013],{},[23,120014],{"alt":122,"src":120015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[62,120017,120019],{"id":120018},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[632,120021,120022],{},[635,120023,120024],{},"卸载旧输入法",[117,120026,120028],{"className":119052,"code":120027,"language":119054,"meta":122,"style":122},"sudo apt purge fcitx* ibus*\n",[124,120029,120030],{"__ignoreMap":122},[127,120031,120032,120034,120036,120038,120041,120043,120046],{"class":129,"line":130},[127,120033,25117],{"class":143},[127,120035,117846],{"class":781},[127,120037,118187],{"class":781},[127,120039,120040],{"class":781}," fcitx",[127,120042,1130],{"class":154},[127,120044,120045],{"class":781}," ibus",[127,120047,119777],{"class":154},[632,120049,120050],{"start":137},[635,120051,120052],{},"安装Fcitx5",[117,120054,120056],{"className":117825,"code":120055,"language":117827,"meta":122,"style":122},"# 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",[124,120057,120058,120063,120077,120081,120086,120095,120103],{"__ignoreMap":122},[127,120059,120060],{"class":129,"line":130},[127,120061,120062],{"class":133},"# Ubuntu22.04及以上、Debian12及以上\n",[127,120064,120065,120067,120069,120071,120074],{"class":129,"line":137},[127,120066,25117],{"class":143},[127,120068,117846],{"class":781},[127,120070,24374],{"class":781},[127,120072,120073],{"class":781}," fcitx5",[127,120075,120076],{"class":781}," fcitx5-chinese-addons\n",[127,120078,120079],{"class":129,"line":151},[127,120080,2942],{"emptyLinePlaceholder":606},[127,120082,120083],{"class":129,"line":167},[127,120084,120085],{"class":133},"# Ubuntu20.04\n",[127,120087,120088,120090,120092],{"class":129,"line":415},[127,120089,25117],{"class":143},[127,120091,119373],{"class":781},[127,120093,120094],{"class":781}," ppa:zhsj\u002Ffcitx5\n",[127,120096,120097,120099,120101],{"class":129,"line":421},[127,120098,25117],{"class":143},[127,120100,117846],{"class":781},[127,120102,26783],{"class":781},[127,120104,120105,120107,120109,120111,120113],{"class":129,"line":1766},[127,120106,25117],{"class":143},[127,120108,117846],{"class":781},[127,120110,24374],{"class":781},[127,120112,120073],{"class":781},[127,120114,120076],{"class":781},[632,120116,120117,120120],{"start":151},[635,120118,120119],{},"Reboot System",[635,120121,120122],{},"启动Fcitx5",[19,120124,120125],{},[23,120126],{"alt":122,"src":120127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[632,120129,120130],{"start":415},[635,120131,120132],{},"修改一些设置",[19,120134,120135],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120137,120138],{},[23,120139],{"alt":122,"src":120140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120142,120143],{},"添加快捷键以便于更好切换中英文",[19,120145,120146],{},[23,120147],{"alt":122,"src":120148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[632,120150,120151],{"start":421},[635,120152,120153],{},"重启",[117,120155,120157],{"className":119052,"code":120156,"language":119054,"meta":122,"style":122},"sudo shutdown -r now\n",[124,120158,120159],{"__ignoreMap":122},[127,120160,120161,120163,120166,120169],{"class":129,"line":130},[127,120162,25117],{"class":143},[127,120164,120165],{"class":781}," shutdown",[127,120167,120168],{"class":154}," -r",[127,120170,120171],{"class":781}," now\n",[632,120173,120174],{"start":1766},[635,120175,120176],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120178,120179],{},[457,120180,120181],{"href":120181,"rel":120182},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24405],[632,120184,120185],{"start":1856},[635,120186,120187],{},"再重启",[117,120189,120190],{"className":119052,"code":120156,"language":119054,"meta":122,"style":122},[124,120191,120192],{"__ignoreMap":122},[127,120193,120194,120196,120198,120200],{"class":129,"line":130},[127,120195,25117],{"class":143},[127,120197,120165],{"class":781},[127,120199,120168],{"class":154},[127,120201,120171],{"class":781},[14,120203,120205],{"id":120204},"_34-pip3源替换","3.4 pip3源替换",[19,120207,120208],{},"非Debian系发行版需要做。",[19,120210,120211],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120213,120214],{},"使用dnf的系统也可能不用做。",[117,120216,120218],{"className":117825,"code":120217,"language":117827,"meta":122,"style":122},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[124,120219,120220,120225,120232,120237,120242],{"__ignoreMap":122},[127,120221,120222],{"class":129,"line":130},[127,120223,120224],{"class":133},"# 检查是否已安装 pip\n",[127,120226,120227,120230],{"class":129,"line":137},[127,120228,120229],{"class":143},"pip3",[127,120231,26834],{"class":154},[127,120233,120234],{"class":129,"line":151},[127,120235,120236],{"class":133},"# 如果未安装，先安装 pip3（见下方）\n",[127,120238,120239],{"class":129,"line":167},[127,120240,120241],{"class":133},"# 配置 pip 使用清华源\n",[127,120243,120244,120246,120249,120252,120255],{"class":129,"line":415},[127,120245,120229],{"class":143},[127,120247,120248],{"class":781}," config",[127,120250,120251],{"class":781}," set",[127,120253,120254],{"class":781}," global.index-url",[127,120256,120257],{"class":781}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120259,120260],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120262,120263],{},[23,120264],{"alt":122,"src":120265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[117,120267,120269],{"className":117825,"code":120268,"language":117827,"meta":122,"style":122},"#安装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",[124,120270,120271,120276,120284,120295,120299,120304,120323,120327,120332,120344,120348,120353],{"__ignoreMap":122},[127,120272,120273],{"class":129,"line":130},[127,120274,120275],{"class":133},"#安装pip3\n",[127,120277,120278,120280,120282],{"class":129,"line":137},[127,120279,25117],{"class":143},[127,120281,117846],{"class":781},[127,120283,26783],{"class":781},[127,120285,120286,120288,120290,120292],{"class":129,"line":151},[127,120287,25117],{"class":143},[127,120289,26617],{"class":781},[127,120291,24374],{"class":781},[127,120293,120294],{"class":781}," python3-pip\n",[127,120296,120297],{"class":129,"line":167},[127,120298,2942],{"emptyLinePlaceholder":606},[127,120300,120301],{"class":129,"line":415},[127,120302,120303],{"class":133},"#更新pip3\n",[127,120305,120306,120308,120310,120312,120314,120316,120319,120321],{"class":129,"line":421},[127,120307,101408],{"class":143},[127,120309,101411],{"class":154},[127,120311,101434],{"class":781},[127,120313,24374],{"class":781},[127,120315,26971],{"class":154},[127,120317,120318],{"class":781}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[127,120320,101439],{"class":154},[127,120322,101442],{"class":781},[127,120324,120325],{"class":129,"line":1766},[127,120326,2942],{"emptyLinePlaceholder":606},[127,120328,120329],{"class":129,"line":1856},[127,120330,120331],{"class":133},"#设置pip源为清华源\n",[127,120333,120334,120336,120338,120340,120342],{"class":129,"line":1862},[127,120335,120229],{"class":143},[127,120337,120248],{"class":781},[127,120339,120251],{"class":781},[127,120341,120254],{"class":781},[127,120343,120257],{"class":781},[127,120345,120346],{"class":129,"line":1874},[127,120347,2942],{"emptyLinePlaceholder":606},[127,120349,120350],{"class":129,"line":2155},[127,120351,120352],{"class":133},"#测试\n",[127,120354,120355,120357,120359,120361,120363,120365],{"class":129,"line":2160},[127,120356,101408],{"class":143},[127,120358,101411],{"class":154},[127,120360,101434],{"class":781},[127,120362,24374],{"class":781},[127,120364,101439],{"class":154},[127,120366,101442],{"class":781},[19,120368,120369],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120371,120372],{},[23,120373],{"alt":122,"src":120374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120376,120378],{"id":120377},"_35-显卡驱动安装","3.5 显卡驱动安装",[62,120380,120382],{"id":120381},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[117,120384,120386],{"className":119052,"code":120385,"language":119054,"meta":122,"style":122},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[124,120387,120388,120393,120408,120413],{"__ignoreMap":122},[127,120389,120390],{"class":129,"line":130},[127,120391,120392],{"class":133},"# 如果是使用apt安装的驱动\n",[127,120394,120395,120397,120399,120401,120403,120406],{"class":129,"line":137},[127,120396,25117],{"class":143},[127,120398,26617],{"class":781},[127,120400,26620],{"class":781},[127,120402,119687],{"class":154},[127,120404,120405],{"class":781}," nvidia",[127,120407,119777],{"class":154},[127,120409,120410],{"class":129,"line":151},[127,120411,120412],{"class":133},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[127,120414,120415,120417],{"class":129,"line":167},[127,120416,25117],{"class":143},[127,120418,120419],{"class":781}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[62,120421,120423],{"id":120422},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22539,120425,120427],{"id":120426},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23451,120429,120431],{"id":120430},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[117,120433,120435],{"className":119052,"code":120434,"language":119054,"meta":122,"style":122},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[124,120436,120437,120442,120453,120458,120468,120473],{"__ignoreMap":122},[127,120438,120439],{"class":129,"line":130},[127,120440,120441],{"class":133},"# 安装英伟达驱动\n",[127,120443,120444,120446,120448,120450],{"class":129,"line":137},[127,120445,25117],{"class":143},[127,120447,117846],{"class":781},[127,120449,24374],{"class":781},[127,120451,120452],{"class":781}," nvidia-driver-版本号\n",[127,120454,120455],{"class":129,"line":151},[127,120456,120457],{"class":133},"# 重启 \n",[127,120459,120460,120462,120464,120466],{"class":129,"line":167},[127,120461,25117],{"class":143},[127,120463,120165],{"class":781},[127,120465,120168],{"class":154},[127,120467,120171],{"class":781},[127,120469,120470],{"class":129,"line":415},[127,120471,120472],{"class":133},"# 检查驱动是否安装成功\n",[127,120474,120475],{"class":129,"line":421},[127,120476,120477],{"class":143},"nvidia-smi\n",[23451,120479,120481],{"id":120480},"_35212-debian","3.5.2.1.2 Debian",[117,120483,120485],{"className":119052,"code":120484,"language":119054,"meta":122,"style":122},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[124,120486,120487,120491,120505,120509,120519,120523],{"__ignoreMap":122},[127,120488,120489],{"class":129,"line":130},[127,120490,120441],{"class":133},[127,120492,120493,120495,120497,120499,120502],{"class":129,"line":137},[127,120494,25117],{"class":143},[127,120496,117846],{"class":781},[127,120498,24374],{"class":781},[127,120500,120501],{"class":781}," nvidia-driver",[127,120503,120504],{"class":781}," nvidia-settings\n",[127,120506,120507],{"class":129,"line":151},[127,120508,120457],{"class":133},[127,120510,120511,120513,120515,120517],{"class":129,"line":167},[127,120512,25117],{"class":143},[127,120514,120165],{"class":781},[127,120516,120168],{"class":154},[127,120518,120171],{"class":781},[127,120520,120521],{"class":129,"line":415},[127,120522,120472],{"class":133},[127,120524,120525],{"class":129,"line":421},[127,120526,120477],{"class":143},[22539,120528,120530],{"id":120529},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120532,120533,120534,120537],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[30,120535,120536],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120539,120540,120541],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[533,120542,120543],{},[30,120544,120545],{},"（也可以不禁用桌面环境，直接进行下一步。）",[117,120547,120549],{"className":119052,"code":120548,"language":119054,"meta":122,"style":122},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[124,120550,120551,120556,120566,120571,120584,120589],{"__ignoreMap":122},[127,120552,120553],{"class":129,"line":130},[127,120554,120555],{"class":133},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[127,120557,120558,120560,120563],{"class":129,"line":137},[127,120559,25117],{"class":143},[127,120561,120562],{"class":781}," telinit",[127,120564,120565],{"class":154}," 3\n",[127,120567,120568],{"class":129,"line":151},[127,120569,120570],{"class":133},"# ubuntu 使用下方命令\n",[127,120572,120573,120575,120578,120581],{"class":129,"line":167},[127,120574,25117],{"class":143},[127,120576,120577],{"class":781}," service",[127,120579,120580],{"class":781}," lightdm",[127,120582,120583],{"class":781}," stop\n",[127,120585,120586],{"class":129,"line":415},[127,120587,120588],{"class":133},"# Fedora 使用下方命令\n",[127,120590,120591,120593,120595,120598],{"class":129,"line":421},[127,120592,25117],{"class":143},[127,120594,27053],{"class":781},[127,120596,120597],{"class":781}," isolate",[127,120599,120600],{"class":781}," multi-user.target\n",[19,120602,120603],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[117,120605,120607],{"className":119052,"code":120606,"language":119054,"meta":122,"style":122},"# 编译环境+准备工作\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",[124,120608,120609,120614,120625,120630,120637,120642,120654,120659,120666,120671],{"__ignoreMap":122},[127,120610,120611],{"class":129,"line":130},[127,120612,120613],{"class":133},"# 编译环境+准备工作\n",[127,120615,120616,120618,120620,120622],{"class":129,"line":137},[127,120617,25117],{"class":143},[127,120619,117846],{"class":781},[127,120621,24374],{"class":781},[127,120623,120624],{"class":781}," build-essential\n",[127,120626,120627],{"class":129,"line":151},[127,120628,120629],{"class":133},"# 进入到.run目录中\n",[127,120631,120632,120634],{"class":129,"line":167},[127,120633,101805],{"class":154},[127,120635,120636],{"class":781}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[127,120638,120639],{"class":129,"line":415},[127,120640,120641],{"class":133},"# 给驱动文件增加可执行权限：\n",[127,120643,120644,120646,120648,120651],{"class":129,"line":421},[127,120645,25117],{"class":143},[127,120647,25120],{"class":781},[127,120649,120650],{"class":781}," a+x",[127,120652,120653],{"class":781}," NVIDIA-Linux-x86_64-550.107.02.run\n",[127,120655,120656],{"class":129,"line":1766},[127,120657,120658],{"class":133},"# 然后执行安装：\n",[127,120660,120661,120663],{"class":129,"line":1856},[127,120662,25117],{"class":143},[127,120664,120665],{"class":781}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[127,120667,120668],{"class":129,"line":1862},[127,120669,120670],{"class":133},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[127,120672,120673,120675,120678],{"class":129,"line":1874},[127,120674,25117],{"class":143},[127,120676,120677],{"class":781}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[127,120679,120680],{"class":154},"  --no-opengl-files\n",[19,120682,120683],{},"安装完毕重启即可",[117,120685,120687],{"className":119052,"code":120686,"language":119054,"meta":122,"style":122},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[124,120688,120689,120693,120699,120703],{"__ignoreMap":122},[127,120690,120691],{"class":129,"line":130},[127,120692,120457],{"class":133},[127,120694,120695,120697],{"class":129,"line":137},[127,120696,25117],{"class":143},[127,120698,27187],{"class":781},[127,120700,120701],{"class":129,"line":151},[127,120702,120472],{"class":133},[127,120704,120705],{"class":129,"line":167},[127,120706,120477],{"class":143},[62,120708,120710],{"id":120709},"_353-安装cuda","3.5.3 安装CUDA",[19,120712,120713],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120715,120716],{},[23,120717],{"alt":122,"src":120718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[632,120720,120721],{},[635,120722,120723],{},"先查看显卡驱动所支持的最高CUDA版本",[117,120725,120726],{"className":119052,"code":120477,"language":119054,"meta":122,"style":122},[124,120727,120728],{"__ignoreMap":122},[127,120729,120730],{"class":129,"line":130},[127,120731,120477],{"class":143},[19,120733,120734],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120736,120737],{},[23,120738],{"alt":122,"src":120739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[632,120741,120742],{"start":137},[635,120743,120744],{},"下载CUDA并安装CUDA",[19,120746,118831,120747],{},[457,120748,118834],{"href":118834,"rel":120749},[24405],[19,120751,120752],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120754,120755],{},[23,120756],{"alt":122,"src":120757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120759,120760,120761,120766],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[457,120762,120765],{"href":120763,"rel":120764},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24405],"Vinci机器人队单片机教程","）",[19,120768,120769],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120771,120772],{},[23,120773],{"alt":122,"src":120774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120776,120777],{},"将最下方框框里的命令敲入终端",[117,120779,120781],{"className":119052,"code":120780,"language":119054,"meta":122,"style":122},"# 在当前文件夹下创建一个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",[124,120782,120783,120788,120797,120802,120809,120814,120822,120827,120838,120843],{"__ignoreMap":122},[127,120784,120785],{"class":129,"line":130},[127,120786,120787],{"class":133},"# 在当前文件夹下创建一个ttt的子文件夹\n",[127,120789,120790,120792,120794],{"class":129,"line":137},[127,120791,101795],{"class":143},[127,120793,29756],{"class":154},[127,120795,120796],{"class":781}," .\u002Fttt\n",[127,120798,120799],{"class":129,"line":151},[127,120800,120801],{"class":133},"# 进入ttt文件夹\n",[127,120803,120804,120806],{"class":129,"line":167},[127,120805,101805],{"class":154},[127,120807,120808],{"class":781}," ttt\n",[127,120810,120811],{"class":129,"line":415},[127,120812,120813],{"class":133},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[127,120815,120816,120819],{"class":129,"line":421},[127,120817,120818],{"class":143},"wget",[127,120820,120821],{"class":781}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[127,120823,120824],{"class":129,"line":1766},[127,120825,120826],{"class":133},"# 给予权限\n",[127,120828,120829,120831,120833,120835],{"class":129,"line":1856},[127,120830,25117],{"class":143},[127,120832,25120],{"class":781},[127,120834,120650],{"class":781},[127,120836,120837],{"class":781}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[127,120839,120840],{"class":129,"line":1862},[127,120841,120842],{"class":133},"# 运行脚本\n",[127,120844,120845,120847],{"class":129,"line":1874},[127,120846,25117],{"class":143},[127,120848,120837],{"class":781},[19,120850,120851],{},[23,120852],{"alt":122,"src":120853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120855,120856],{},"正在安装中：",[19,120858,120859],{},[23,120860],{"alt":122,"src":120861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120863,120864],{},"输入accept接受即可",[19,120866,120867],{},[23,120868],{"alt":122,"src":120869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120871,120872],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120874,120875],{},[23,120876],{"alt":122,"src":120877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120879,120880],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120882,120883],{},[23,120884],{"alt":122,"src":120885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[632,120887,120888],{"start":151},[635,120889,120890],{},"配置环境",[19,120892,120893],{},"根据上方确认一下路径，比如我上面红色框起来的为",[117,120895,120897],{"className":119052,"code":120896,"language":119054,"meta":122,"style":122},"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",[124,120898,120899,120915,120930],{"__ignoreMap":122},[127,120900,120901,120904,120907,120910,120913],{"class":129,"line":130},[127,120902,120903],{"class":143},"Please",[127,120905,120906],{"class":781}," make",[127,120908,120909],{"class":781}," sure",[127,120911,120912],{"class":781}," that",[127,120914,3216],{"class":147},[127,120916,120917,120919,120922,120925,120928],{"class":129,"line":137},[127,120918,52806],{"class":143},[127,120920,120921],{"class":781},"   PATH",[127,120923,120924],{"class":781}," includes",[127,120926,120927],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[127,120929,3216],{"class":147},[127,120931,120932,120934,120937,120939,120942,120945,120947,120950,120953,120956,120959,120961,120964,120966],{"class":129,"line":151},[127,120933,52806],{"class":143},[127,120935,120936],{"class":781},"   LD_LIBRARY_PATH",[127,120938,120924],{"class":781},[127,120940,120941],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[127,120943,120944],{"class":781}," or,",[127,120946,5751],{"class":781},[127,120948,120949],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[127,120951,120952],{"class":781}," to",[127,120954,120955],{"class":781}," \u002Fetc\u002Fld.so.conf",[127,120957,120958],{"class":781}," and",[127,120960,27770],{"class":781},[127,120962,120963],{"class":781}," ldconfig",[127,120965,65137],{"class":781},[127,120967,120968],{"class":781}," root\n",[19,120970,120971],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[117,120973,120975],{"className":119052,"code":120974,"language":119054,"meta":122,"style":122},"which nvcc\n",[124,120976,120977],{"__ignoreMap":122},[127,120978,120979,120982],{"class":129,"line":130},[127,120980,120981],{"class":154},"which",[127,120983,120984],{"class":781}," nvcc\n",[19,120986,120987],{},[23,120988],{"alt":122,"src":120989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120991,120992],{},"所以我进行以下操作：",[117,120994,120996],{"className":119052,"code":120995,"language":119054,"meta":122,"style":122},"sudo vim ~\u002F.bashrc\n",[124,120997,120998],{"__ignoreMap":122},[127,120999,121000,121002,121004],{"class":129,"line":130},[127,121001,25117],{"class":143},[127,121003,119112],{"class":781},[127,121005,121006],{"class":781}," ~\u002F.bashrc\n",[19,121008,121009],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[117,121011,121013],{"className":119052,"code":121012,"language":119054,"meta":122,"style":122},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[124,121014,121015,121027],{"__ignoreMap":122},[127,121016,121017,121019,121022,121024],{"class":129,"line":130},[127,121018,25583],{"class":290},[127,121020,121021],{"class":147}," PATH",[127,121023,725],{"class":290},[127,121025,121026],{"class":147},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[127,121028,121029,121031,121034,121036],{"class":129,"line":137},[127,121030,25583],{"class":290},[127,121032,121033],{"class":147}," LD_LIBRARY_PATH",[127,121035,725],{"class":290},[127,121037,121038],{"class":147},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121040,121041],{},[23,121042],{"alt":122,"src":121043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[117,121045,121047],{"className":119052,"code":121046,"language":119054,"meta":122,"style":122},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[124,121048,121049,121054,121060,121065],{"__ignoreMap":122},[127,121050,121051],{"class":129,"line":130},[127,121052,121053],{"class":133},"# 刷新当前终端的环境变量\n",[127,121055,121056,121058],{"class":129,"line":137},[127,121057,101422],{"class":154},[127,121059,121006],{"class":781},[127,121061,121062],{"class":129,"line":151},[127,121063,121064],{"class":133},"# 验证CUDA是否安装成功\n",[127,121066,121067,121070],{"class":129,"line":167},[127,121068,121069],{"class":143},"nvcc",[127,121071,121072],{"class":154}," -V\n",[19,121074,121075],{},"出现下图这种则安装成功。",[19,121077,121078],{},[23,121079],{"alt":122,"src":121080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[62,121082,121084],{"id":121083},"_354-安装cudnn","3.5.4 安装cuDNN",[632,121086,121087],{},[635,121088,121089],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121091,121092,121093,121098],{},"前往 NVIDIA cuDNN 下载页面：",[457,121094,121097],{"href":121095,"rel":121096},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24405],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121100,121101],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121103,121104],{},[23,121105],{"alt":122,"src":121106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121108,121109],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121111,121112],{},[23,121113],{"alt":122,"src":121114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121116,121117],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121119,121120],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121122,121123],{},[30,121124,121125],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121127,121128],{},"下载好的：",[19,121130,121131],{},[23,121132],{"alt":122,"src":121133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[632,121135,121136],{"start":137},[635,121137,121138],{},"安装cuDNN",[19,121140,121141],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121143,121144],{},[23,121145],{"alt":122,"src":121146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121148,121149],{},"解压文件，并复制到对应位置完成安装",[117,121151,121153],{"className":119052,"code":121152,"language":119054,"meta":122,"style":122},"# 解压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",[124,121154,121155,121160,121171,121176,121183,121188,121204,121218,121223,121234,121243,121247,121263],{"__ignoreMap":122},[127,121156,121157],{"class":129,"line":130},[127,121158,121159],{"class":133},"# 解压cuDNN文件\n",[127,121161,121162,121165,121168],{"class":129,"line":137},[127,121163,121164],{"class":143},"tar",[127,121166,121167],{"class":154}," -xvf",[127,121169,121170],{"class":781}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[127,121172,121173],{"class":129,"line":151},[127,121174,121175],{"class":133},"# cd进文件夹\n",[127,121177,121178,121180],{"class":129,"line":167},[127,121179,101805],{"class":154},[127,121181,121182],{"class":781}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[127,121184,121185],{"class":129,"line":415},[127,121186,121187],{"class":133},"# 复制cuDNN文件到CUDA目录\n",[127,121189,121190,121192,121194,121197,121199,121202],{"class":129,"line":421},[127,121191,25117],{"class":143},[127,121193,28401],{"class":781},[127,121195,121196],{"class":781}," include\u002Fcudnn",[127,121198,1130],{"class":154},[127,121200,121201],{"class":781},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[127,121203,3216],{"class":147},[127,121205,121206,121208,121210,121213,121215],{"class":129,"line":1766},[127,121207,25117],{"class":143},[127,121209,28401],{"class":781},[127,121211,121212],{"class":781}," lib\u002Flibcudnn",[127,121214,1130],{"class":154},[127,121216,121217],{"class":781},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[127,121219,121220],{"class":129,"line":1856},[127,121221,121222],{"class":133},"# 对比一下有没有缺文件\n",[127,121224,121225,121227,121230,121232],{"class":129,"line":1862},[127,121226,27301],{"class":143},[127,121228,121229],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[127,121231,1130],{"class":154},[127,121233,3216],{"class":147},[127,121235,121236,121238,121241],{"class":129,"line":1874},[127,121237,27301],{"class":143},[127,121239,121240],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[127,121242,119777],{"class":154},[127,121244,121245],{"class":129,"line":2155},[127,121246,120826],{"class":133},[127,121248,121249,121251,121253,121256,121258,121260],{"class":129,"line":2160},[127,121250,25117],{"class":143},[127,121252,25120],{"class":781},[127,121254,121255],{"class":781}," a+r",[127,121257,121229],{"class":781},[127,121259,1130],{"class":154},[127,121261,121262],{"class":147},"   \n",[127,121264,121265,121267,121269,121271,121273],{"class":129,"line":2166},[127,121266,25117],{"class":143},[127,121268,25120],{"class":781},[127,121270,121255],{"class":781},[127,121272,121240],{"class":781},[127,121274,119777],{"class":154},[632,121276,121277],{"start":151},[635,121278,121279],{},"检查是否安装成功",[117,121281,121283],{"className":119052,"code":121282,"language":119054,"meta":122,"style":122},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[124,121284,121285,121290],{"__ignoreMap":122},[127,121286,121287],{"class":129,"line":130},[127,121288,121289],{"class":133},"# 检查cuDNN版本命令\n",[127,121291,121292,121295,121298,121300,121302,121305,121308],{"class":129,"line":137},[127,121293,121294],{"class":143},"cat",[127,121296,121297],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[127,121299,25650],{"class":290},[127,121301,30776],{"class":143},[127,121303,121304],{"class":781}," CUDNN_MAJOR",[127,121306,121307],{"class":154}," -A",[127,121309,48263],{"class":154},[19,121311,121312],{},"出现下图这样的就是安装成功了",[19,121314,121315],{},[23,121316],{"alt":122,"src":121317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[632,121319,121320],{"start":167},[635,121321,121322],{},"软链接(一般不需要)",[117,121324,121326],{"className":119052,"code":121325,"language":119054,"meta":122,"style":122},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[124,121327,121328,121333],{"__ignoreMap":122},[127,121329,121330],{"class":129,"line":130},[127,121331,121332],{"class":133},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[127,121334,121335,121337],{"class":129,"line":137},[127,121336,25117],{"class":143},[127,121338,121339],{"class":781}," ldconfig\n",[19,121341,121342],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[117,121344,121349],{"className":121345,"code":121346,"language":121347,"meta":121348,"style":122},"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",[124,121350,121351,121356,121361,121366,121371,121376,121381],{"__ignoreMap":122},[127,121352,121353],{"class":129,"line":130},[127,121354,121355],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[127,121357,121358],{"class":129,"line":137},[127,121359,121360],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[127,121362,121363],{"class":129,"line":151},[127,121364,121365],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[127,121367,121368],{"class":129,"line":167},[127,121369,121370],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[127,121372,121373],{"class":129,"line":415},[127,121374,121375],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[127,121377,121378],{"class":129,"line":421},[127,121379,121380],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[127,121382,121383],{"class":129,"line":1766},[127,121384,121385],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121387,121388],{},"运行下方的命令",[117,121390,121392],{"className":119052,"code":121391,"language":119054,"meta":122,"style":122},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[124,121393,121394,121399,121406,121411],{"__ignoreMap":122},[127,121395,121396],{"class":129,"line":130},[127,121397,121398],{"class":133},"# cd进入CUDA路径\n",[127,121400,121401,121403],{"class":129,"line":137},[127,121402,101805],{"class":154},[127,121404,121405],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[127,121407,121408],{"class":129,"line":151},[127,121409,121410],{"class":133}," # 查看本路径下的需要软链接的文件名\n",[127,121412,121413],{"class":129,"line":167},[127,121414,121415],{"class":143}," ls\n",[19,121417,121418],{},[23,121419],{"alt":122,"src":121420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121422,121423,121424,18951,121427,18951,121430,121433],{},"如上图，我需要将",[124,121425,121426],{},"libcudnn_xxx_xxxxx.so.8.9.7",[124,121428,121429],{},"libcudnn_xxx_xxxxx.so.8",[124,121431,121432],{},"libcudnn_xxx_xxxxx.so","软链接",[117,121435,121437],{"className":119052,"code":121436,"language":119054,"meta":122,"style":122},"# 创建符号链接。对于每个 .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",[124,121438,121439,121444,121460,121474,121488,121502,121516,121530,121544,121549,121555,121560],{"__ignoreMap":122},[127,121440,121441],{"class":129,"line":130},[127,121442,121443],{"class":133},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[127,121445,121446,121448,121451,121454,121457],{"class":129,"line":137},[127,121447,25117],{"class":143},[127,121449,121450],{"class":781}," ln",[127,121452,121453],{"class":154}," -sf",[127,121455,121456],{"class":781}," libcudnn_cnn_train.so.8.9.7",[127,121458,121459],{"class":781}," libcudnn_cnn_train.so.8\n",[127,121461,121462,121464,121466,121468,121471],{"class":129,"line":151},[127,121463,25117],{"class":143},[127,121465,121450],{"class":781},[127,121467,121453],{"class":154},[127,121469,121470],{"class":781}," libcudnn_adv_infer.so.8.9.7",[127,121472,121473],{"class":781}," libcudnn_adv_infer.so.8\n",[127,121475,121476,121478,121480,121482,121485],{"class":129,"line":167},[127,121477,25117],{"class":143},[127,121479,121450],{"class":781},[127,121481,121453],{"class":154},[127,121483,121484],{"class":781}," libcudnn_adv_train.so.8.9.7",[127,121486,121487],{"class":781}," libcudnn_adv_train.so.8\n",[127,121489,121490,121492,121494,121496,121499],{"class":129,"line":415},[127,121491,25117],{"class":143},[127,121493,121450],{"class":781},[127,121495,121453],{"class":154},[127,121497,121498],{"class":781}," libcudnn_cnn_infer.so.8.9.7",[127,121500,121501],{"class":781}," libcudnn_cnn_infer.so.8\n",[127,121503,121504,121506,121508,121510,121513],{"class":129,"line":421},[127,121505,25117],{"class":143},[127,121507,121450],{"class":781},[127,121509,121453],{"class":154},[127,121511,121512],{"class":781}," libcudnn.so.8.9.7",[127,121514,121515],{"class":781}," libcudnn.so.8\n",[127,121517,121518,121520,121522,121524,121527],{"class":129,"line":1766},[127,121519,25117],{"class":143},[127,121521,121450],{"class":781},[127,121523,121453],{"class":154},[127,121525,121526],{"class":781}," libcudnn_ops_infer.so.8.9.7",[127,121528,121529],{"class":781}," libcudnn_ops_infer.so.8\n",[127,121531,121532,121534,121536,121538,121541],{"class":129,"line":1856},[127,121533,25117],{"class":143},[127,121535,121450],{"class":781},[127,121537,121453],{"class":154},[127,121539,121540],{"class":781}," libcudnn_ops_train.so.8.9.7",[127,121542,121543],{"class":781}," libcudnn_ops_train.so.8\n",[127,121545,121546],{"class":129,"line":1862},[127,121547,121548],{"class":133},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[127,121550,121551,121553],{"class":129,"line":1874},[127,121552,25117],{"class":143},[127,121554,121339],{"class":781},[127,121556,121557],{"class":129,"line":2155},[127,121558,121559],{"class":133},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[127,121561,121562,121564,121567,121570,121572,121575],{"class":129,"line":2160},[127,121563,27301],{"class":143},[127,121565,121566],{"class":154}," -l",[127,121568,121569],{"class":781}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[127,121571,1130],{"class":154},[127,121573,121574],{"class":781},".so",[127,121576,119777],{"class":154},[62,121578,121580],{"id":121579},"_355-常见问题","3.5.5 常见问题",[632,121582,121583],{},[635,121584,121585],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[117,121587,121589],{"className":119052,"code":121588,"language":119054,"meta":122,"style":122},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[124,121590,121591],{"__ignoreMap":122},[127,121592,121593,121595,121597],{"class":129,"line":130},[127,121594,25117],{"class":143},[127,121596,119112],{"class":781},[127,121598,121599],{"class":781}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121601,121602],{},"blacklist-nouveau.conf文件内容如下：",[117,121604,121606],{"className":119052,"code":121605,"language":119054,"meta":122,"style":122},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[124,121607,121608,121616,121623,121635,121645],{"__ignoreMap":122},[127,121609,121610,121613],{"class":129,"line":130},[127,121611,121612],{"class":143},"blacklist",[127,121614,121615],{"class":781}," nouveau\n",[127,121617,121618,121620],{"class":129,"line":137},[127,121619,121612],{"class":143},[127,121621,121622],{"class":781}," lbm-nouveau\n",[127,121624,121625,121627,121630,121633],{"class":129,"line":151},[127,121626,116459],{"class":143},[127,121628,121629],{"class":781}," nouveau",[127,121631,121632],{"class":781}," modeset=",[127,121634,3627],{"class":154},[127,121636,121637,121640,121642],{"class":129,"line":167},[127,121638,121639],{"class":154},"alias",[127,121641,121629],{"class":781},[127,121643,121644],{"class":781}," off\n",[127,121646,121647,121649,121652],{"class":129,"line":415},[127,121648,121639],{"class":154},[127,121650,121651],{"class":781}," lbm-nouveau",[127,121653,121644],{"class":781},[19,121655,121656],{},"接着运行下方命令",[117,121658,121660],{"className":119052,"code":121659,"language":119054,"meta":122,"style":122},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[124,121661,121662,121672,121677],{"__ignoreMap":122},[127,121663,121664,121666,121669],{"class":129,"line":130},[127,121665,25117],{"class":143},[127,121667,121668],{"class":781}," update-initramfs",[127,121670,121671],{"class":154}," -u\n",[127,121673,121674],{"class":129,"line":137},[127,121675,121676],{"class":143},"或者\n",[127,121678,121679,121681,121684],{"class":129,"line":151},[127,121680,25117],{"class":143},[127,121682,121683],{"class":781}," dracut",[127,121685,121686],{"class":154}," --force\n",[19,121688,121689],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[117,121691,121693],{"className":119052,"code":121692,"language":119054,"meta":122,"style":122},"lsmod | grep nouveau\n",[124,121694,121695],{"__ignoreMap":122},[127,121696,121697,121700,121702,121704],{"class":129,"line":130},[127,121698,121699],{"class":143},"lsmod",[127,121701,25650],{"class":290},[127,121703,30776],{"class":143},[127,121705,121615],{"class":781},[632,121707,121708],{"start":137},[635,121709,121710],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[117,121712,121714],{"className":119052,"code":121713,"language":119054,"meta":122,"style":122},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[124,121715,121716],{"__ignoreMap":122},[127,121717,121718,121720,121722],{"class":129,"line":130},[127,121719,25117],{"class":143},[127,121721,119112],{"class":781},[127,121723,121724],{"class":781}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121726,121727],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[117,121729,121731],{"className":119052,"code":121730,"language":119054,"meta":122,"style":122},"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",[124,121732,121733,121741,121749,121757,121764,121772,121782,121790],{"__ignoreMap":122},[127,121734,121735,121738],{"class":129,"line":130},[127,121736,121737],{"class":143},"Section",[127,121739,121740],{"class":781}," \"OutputClass\"\n",[127,121742,121743,121746],{"class":129,"line":137},[127,121744,121745],{"class":143},"   Identifier",[127,121747,121748],{"class":781}," \"nvidia\"\n",[127,121750,121751,121754],{"class":129,"line":151},[127,121752,121753],{"class":143},"   MatchDriver",[127,121755,121756],{"class":781}," \"nvidia-drm\"\n",[127,121758,121759,121762],{"class":129,"line":167},[127,121760,121761],{"class":143},"   Driver",[127,121763,121748],{"class":781},[127,121765,121766,121769],{"class":129,"line":415},[127,121767,121768],{"class":143},"   Option",[127,121770,121771],{"class":781}," \"AllowEmptyInitialConfiguration\"\n",[127,121773,121774,121776,121779],{"class":129,"line":421},[127,121775,121768],{"class":143},[127,121777,121778],{"class":781}," \"PrimaryGPU\"",[127,121780,121781],{"class":781}," \"yes\"\n",[127,121783,121784,121787],{"class":129,"line":1766},[127,121785,121786],{"class":143},"   ModulePath",[127,121788,121789],{"class":781}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[127,121791,121792],{"class":129,"line":1856},[127,121793,121794],{"class":143},"EndSection\n",[632,121796,121797],{"start":151},[635,121798,121799],{},"安装N卡驱动提示错误",[117,121801,121803],{"className":121345,"code":121802,"language":121347,"meta":121348,"style":122},"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",[124,121804,121805],{"__ignoreMap":122},[127,121806,121807],{"class":129,"line":130},[127,121808,121802],{},[632,121810,121811],{},[635,121812,121813],{},"检查当前运行的内核版本：",[19,121815,121816],{},"运行以下命令以查看你当前正在使用的内核版本：",[117,121818,121820],{"className":117825,"code":121819,"language":117827,"meta":122,"style":122},"uname -r\n",[124,121821,121822],{"__ignoreMap":122},[127,121823,121824,121826],{"class":129,"line":130},[127,121825,70737],{"class":143},[127,121827,121828],{"class":154}," -r\n",[632,121830,121831],{"start":137},[635,121832,121833],{},"安装内核开发文件：",[19,121835,121836,121837,121840],{},"确保你已经安装了与当前内核版本相匹配的 ",[124,121838,121839],{},"kernel-devel"," 包。运行以下命令来安装：",[117,121842,121844],{"className":117825,"code":121843,"language":117827,"meta":122,"style":122},"sudo dnf install kernel-devel-$(uname -r)\n",[124,121845,121846],{"__ignoreMap":122},[127,121847,121848,121850,121852,121854,121857,121859,121861,121863],{"class":129,"line":130},[127,121849,25117],{"class":143},[127,121851,26856],{"class":781},[127,121853,24374],{"class":781},[127,121855,121856],{"class":781}," kernel-devel-",[127,121858,25640],{"class":147},[127,121860,70737],{"class":143},[127,121862,120168],{"class":154},[127,121864,687],{"class":147},[19,121866,121867],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[632,121869,121870],{"start":151},[635,121871,121872],{},"安装内核源代码（如果需要）：",[19,121874,121875],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[117,121877,121879],{"className":117825,"code":121878,"language":117827,"meta":122,"style":122},"sudo dnf install kernel-headers kernel-source\n",[124,121880,121881],{"__ignoreMap":122},[127,121882,121883,121885,121887,121889,121892],{"class":129,"line":130},[127,121884,25117],{"class":143},[127,121886,26856],{"class":781},[127,121888,24374],{"class":781},[127,121890,121891],{"class":781}," kernel-headers",[127,121893,121894],{"class":781}," kernel-source\n",[632,121896,121897],{"start":167},[635,121898,121899],{},"检查安装：",[19,121901,121902,121903,121906],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[124,121904,121905],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[117,121908,121910],{"className":117825,"code":121909,"language":117827,"meta":122,"style":122},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[124,121911,121912],{"__ignoreMap":122},[127,121913,121914,121916],{"class":129,"line":130},[127,121915,27301],{"class":143},[127,121917,121918],{"class":781}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121920,121921,121922,121925],{},"如果仍然遇到问题，可以通过 ",[124,121923,121924],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[575,121927,121928],{},"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":122,"searchDepth":137,"depth":137,"links":121930},[121931,121935,121945,121949,121950],{"id":119028,"depth":137,"text":119029,"children":121932},[121933,121934],{"id":119038,"depth":151,"text":119039},{"id":119048,"depth":151,"text":119049},{"id":119248,"depth":137,"text":119249,"children":121936},[121937,121938,121939,121940,121941,121942,121943,121944],{"id":119252,"depth":151,"text":119253},{"id":119322,"depth":151,"text":119323},{"id":119411,"depth":151,"text":119412},{"id":119656,"depth":151,"text":119657},{"id":119726,"depth":151,"text":119727},{"id":119793,"depth":151,"text":119794},{"id":119828,"depth":151,"text":119829},{"id":119883,"depth":151,"text":119884},{"id":119934,"depth":137,"text":119935,"children":121946},[121947,121948],{"id":119938,"depth":151,"text":119939},{"id":120018,"depth":151,"text":120019},{"id":120204,"depth":137,"text":120205},{"id":120377,"depth":137,"text":120378,"children":121951},[121952,121953,121954,121955,121956],{"id":120381,"depth":151,"text":120382},{"id":120422,"depth":151,"text":120423},{"id":120709,"depth":151,"text":120710},{"id":121083,"depth":151,"text":121084},{"id":121579,"depth":151,"text":121580},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119020,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121963,"title":121964,"body":121965,"description":603,"extension":604,"meta":122305,"navigation":606,"path":122306,"seo":122307,"stem":122308,"__hash__":122309},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121966,"toc":122303},[121967,121970,121975,121978,122224,122229,122232,122268,122271,122300],[10,121968,121964],{"id":121969},"_4-命令教程长期积累",[632,121971,121972],{},[635,121973,121974],{},"大多数命令",[19,121976,121977],{},"常用 Linux 命令速查：",[117,121979,121981],{"className":117825,"code":121980,"language":117827,"meta":122,"style":122},"# 文件与目录\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",[124,121982,121983,121988,121995,122002,122010,122017,122024,122032,122040,122047,122054,122062,122066,122071,122078,122086,122093,122097,122102,122109,122117,122125,122133,122141,122145,122150,122158,122165,122172,122180,122188,122192,122197,122206,122215],{"__ignoreMap":122},[127,121984,121985],{"class":129,"line":130},[127,121986,121987],{"class":133},"# 文件与目录\n",[127,121989,121990,121992],{"class":129,"line":137},[127,121991,27301],{"class":143},[127,121993,121994],{"class":133},"        # 列出目录内容\n",[127,121996,121997,121999],{"class":129,"line":151},[127,121998,101805],{"class":154},[127,122000,122001],{"class":133},"        # 切换目录\n",[127,122003,122004,122007],{"class":129,"line":167},[127,122005,122006],{"class":154},"pwd",[127,122008,122009],{"class":133},"       # 显示当前路径\n",[127,122011,122012,122014],{"class":129,"line":415},[127,122013,101795],{"class":143},[127,122015,122016],{"class":133},"     # 创建目录\n",[127,122018,122019,122021],{"class":129,"line":421},[127,122020,25863],{"class":143},[127,122022,122023],{"class":133},"        # 删除文件或目录\n",[127,122025,122026,122029],{"class":129,"line":1766},[127,122027,122028],{"class":143},"cp",[127,122030,122031],{"class":133},"        # 复制文件或目录\n",[127,122033,122034,122037],{"class":129,"line":1856},[127,122035,122036],{"class":143},"mv",[127,122038,122039],{"class":133},"        # 移动\u002F重命名文件或目录\n",[127,122041,122042,122044],{"class":129,"line":1862},[127,122043,101812],{"class":143},[127,122045,122046],{"class":133},"     # 创建空文件\n",[127,122048,122049,122051],{"class":129,"line":1874},[127,122050,121294],{"class":143},[127,122052,122053],{"class":133},"       # 查看文件内容\n",[127,122055,122056,122059],{"class":129,"line":2155},[127,122057,122058],{"class":143},"head\u002Ftail",[127,122060,122061],{"class":133}," # 查看文件头部\u002F尾部\n",[127,122063,122064],{"class":129,"line":2160},[127,122065,2942],{"emptyLinePlaceholder":606},[127,122067,122068],{"class":129,"line":2166},[127,122069,122070],{"class":133},"# 权限管理\n",[127,122072,122073,122075],{"class":129,"line":2171},[127,122074,25152],{"class":143},[127,122076,122077],{"class":133},"     # 修改文件权限\n",[127,122079,122080,122083],{"class":129,"line":2185},[127,122081,122082],{"class":143},"chown",[127,122084,122085],{"class":133},"     # 修改文件所有者\n",[127,122087,122088,122090],{"class":129,"line":2190},[127,122089,25117],{"class":143},[127,122091,122092],{"class":133},"      # 以管理员身份执行\n",[127,122094,122095],{"class":129,"line":2196},[127,122096,2942],{"emptyLinePlaceholder":606},[127,122098,122099],{"class":129,"line":2217},[127,122100,122101],{"class":133},"# 系统信息\n",[127,122103,122104,122106],{"class":129,"line":2222},[127,122105,70737],{"class":143},[127,122107,122108],{"class":133},"     # 系统信息\n",[127,122110,122111,122114],{"class":129,"line":2236},[127,122112,122113],{"class":143},"df",[127,122115,122116],{"class":133},"        # 磁盘使用情况\n",[127,122118,122119,122122],{"class":129,"line":2241},[127,122120,122121],{"class":143},"free",[127,122123,122124],{"class":133},"      # 内存使用情况\n",[127,122126,122127,122130],{"class":129,"line":2270},[127,122128,122129],{"class":143},"top\u002Fhtop",[127,122131,122132],{"class":133},"  # 进程监控\n",[127,122134,122135,122138],{"class":129,"line":2275},[127,122136,122137],{"class":143},"ps",[127,122139,122140],{"class":133},"        # 查看进程\n",[127,122142,122143],{"class":129,"line":2292},[127,122144,2942],{"emptyLinePlaceholder":606},[127,122146,122147],{"class":129,"line":2297},[127,122148,122149],{"class":133},"# 网络\n",[127,122151,122152,122155],{"class":129,"line":2302},[127,122153,122154],{"class":143},"ping",[127,122156,122157],{"class":133},"      # 测试网络连通性\n",[127,122159,122160,122162],{"class":129,"line":2307},[127,122161,27389],{"class":143},[127,122163,122164],{"class":133},"      # 发送 HTTP 请求\n",[127,122166,122167,122169],{"class":129,"line":2321},[127,122168,120818],{"class":143},[127,122170,122171],{"class":133},"      # 下载文件\n",[127,122173,122174,122177],{"class":129,"line":2326},[127,122175,122176],{"class":143},"ssh",[127,122178,122179],{"class":133},"       # 远程登录\n",[127,122181,122182,122185],{"class":129,"line":3119},[127,122183,122184],{"class":143},"scp",[127,122186,122187],{"class":133},"       # 远程文件传输\n",[127,122189,122190],{"class":129,"line":3133},[127,122191,2942],{"emptyLinePlaceholder":606},[127,122193,122194],{"class":129,"line":3141},[127,122195,122196],{"class":133},"# 包管理（Debian\u002FUbuntu）\n",[127,122198,122199,122201,122203],{"class":129,"line":3146},[127,122200,117897],{"class":143},[127,122202,117876],{"class":781},[127,122204,122205],{"class":133},"   # 更新软件源\n",[127,122207,122208,122210,122212],{"class":129,"line":3152},[127,122209,117897],{"class":143},[127,122211,24374],{"class":781},[127,122213,122214],{"class":133},"  # 安装软件包\n",[127,122216,122217,122219,122221],{"class":129,"line":3158},[127,122218,117897],{"class":143},[127,122220,26620],{"class":781},[127,122222,122223],{"class":133},"   # 卸载软件包\n",[632,122225,122226],{"start":137},[635,122227,122228],{},"KDE Dolphin 以root打开",[19,122230,122231],{},"kde5",[117,122233,122235],{"className":117825,"code":122234,"language":117827,"meta":122,"style":122},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[124,122236,122237],{"__ignoreMap":122},[127,122238,122239,122242,122245,122248,122250,122252,122255,122258,122260,122263,122265],{"class":129,"line":130},[127,122240,122241],{"class":143},"pkexec",[127,122243,122244],{"class":781}," env",[127,122246,122247],{"class":781}," DISPLAY=",[127,122249,28683],{"class":147},[127,122251,28741],{"class":781},[127,122253,122254],{"class":147},"$XAUTHORITY ",[127,122256,122257],{"class":781},"KDE_SESSION_VERSION=",[127,122259,994],{"class":154},[127,122261,122262],{"class":781}," KDE_FULL_SESSION=",[127,122264,1907],{"class":154},[127,122266,122267],{"class":781}," dolphin\n",[19,122269,122270],{},"kde6",[117,122272,122274],{"className":117825,"code":122273,"language":117827,"meta":122,"style":122},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[124,122275,122276],{"__ignoreMap":122},[127,122277,122278,122280,122282,122284,122286,122288,122290,122292,122294,122296,122298],{"class":129,"line":130},[127,122279,122241],{"class":143},[127,122281,122244],{"class":781},[127,122283,122247],{"class":781},[127,122285,28683],{"class":147},[127,122287,28741],{"class":781},[127,122289,122254],{"class":147},[127,122291,122257],{"class":781},[127,122293,1019],{"class":154},[127,122295,122262],{"class":781},[127,122297,1907],{"class":154},[127,122299,122267],{"class":781},[575,122301,122302],{},"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":122,"searchDepth":137,"depth":137,"links":122304},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121964,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122311,"title":122312,"body":122313,"description":603,"extension":604,"meta":122327,"navigation":606,"path":122328,"seo":122329,"stem":122330,"__hash__":122331},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122314,"toc":122325},[122315,122318],[10,122316,122312],{"id":122317},"_5-各种环境配置",[19,122319,122320],{},[457,122321,122324],{"href":122322,"rel":122323},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24405],"电控组环境搭建大全",{"title":122,"searchDepth":137,"depth":137,"links":122326},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122312,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122333,"title":122334,"body":122335,"description":603,"extension":604,"meta":122683,"navigation":606,"path":122684,"seo":122685,"stem":122686,"__hash__":122687},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122336,"toc":122675},[122337,122340,122344,122348,122352,122357,122364,122368,122661,122665,122672],[10,122338,122334],{"id":122339},"_6-拓展功能",[14,122341,122343],{"id":122342},"_61-wine","6.1 Wine",[14,122345,122347],{"id":122346},"_62-android","6.2 Android",[62,122349,122351],{"id":122350},"_621-i卡a卡","6.2.1 I卡、A卡",[632,122353,122354],{},[635,122355,122356],{},"Wayland-Waydroid(体验超级好)",[19,122358,122359,122360],{},"Waydroid 官网与安装指南：",[457,122361,122362],{"href":122362,"rel":122363},"https:\u002F\u002Fwaydro.id\u002F",[24405],[62,122365,122367],{"id":122366},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[632,122369,122370],{},[635,122371,122372,122373,122375,122376,122380,122382,122385,122390,122587],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54251,122374],{},"BlissOS 官网下载：",[457,122377,122378],{"href":122378,"rel":122379},"https:\u002F\u002Fblissos.org\u002F",[24405],[54251,122381],{},[23,122383],{"alt":122,"src":122384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[632,122386,122387],{"start":151},[635,122388,122389],{},"比较推荐的配置",[117,122391,122393],{"className":117825,"code":122392,"language":117827,"meta":122,"style":122},"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",[124,122394,122395,122402,122412,122422,122432,122444,122454,122461,122471,122480,122489,122499,122509,122518,122528,122538,122550,122560,122569,122579],{"__ignoreMap":122},[127,122396,122397,122400],{"class":129,"line":130},[127,122398,122399],{"class":143},"qemu-system-x86_64",[127,122401,25219],{"class":154},[127,122403,122404,122407,122410],{"class":129,"line":137},[127,122405,122406],{"class":154},"        -M",[127,122408,122409],{"class":781}," q35,vmport=off",[127,122411,25219],{"class":154},[127,122413,122414,122417,122420],{"class":129,"line":151},[127,122415,122416],{"class":154},"        -accel",[127,122418,122419],{"class":781}," kvm",[127,122421,25219],{"class":154},[127,122423,122424,122427,122430],{"class":129,"line":167},[127,122425,122426],{"class":154},"        -cpu",[127,122428,122429],{"class":781}," qemu64,+sse3,+sse4.2",[127,122431,25219],{"class":154},[127,122433,122434,122437,122440,122442],{"class":129,"line":415},[127,122435,122436],{"class":154},"        -smp",[127,122438,122439],{"class":781}," 8,cores=",[127,122441,968],{"class":154},[127,122443,25219],{"class":154},[127,122445,122446,122449,122452],{"class":129,"line":421},[127,122447,122448],{"class":154},"        -m",[127,122450,122451],{"class":781}," 6G",[127,122453,25219],{"class":154},[127,122455,122456,122459],{"class":129,"line":1766},[127,122457,122458],{"class":154},"        -usb",[127,122460,25219],{"class":154},[127,122462,122463,122466,122469],{"class":129,"line":1856},[127,122464,122465],{"class":154},"        -device",[127,122467,122468],{"class":781}," virtio-tablet",[127,122470,25219],{"class":154},[127,122472,122473,122475,122478],{"class":129,"line":1862},[127,122474,122465],{"class":154},[127,122476,122477],{"class":781}," virtio-keyboard",[127,122479,25219],{"class":154},[127,122481,122482,122484,122487],{"class":129,"line":1874},[127,122483,122465],{"class":154},[127,122485,122486],{"class":781}," usb-tablet",[127,122488,25219],{"class":154},[127,122490,122491,122494,122497],{"class":129,"line":2155},[127,122492,122493],{"class":154},"        -bios",[127,122495,122496],{"class":781}," OVMF-pure-efi64.fd",[127,122498,25219],{"class":154},[127,122500,122501,122504,122507],{"class":129,"line":2160},[127,122502,122503],{"class":154},"        -net",[127,122505,122506],{"class":781}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[127,122508,25219],{"class":154},[127,122510,122511,122513,122516],{"class":129,"line":2166},[127,122512,122503],{"class":154},[127,122514,122515],{"class":781}," nic,model=virtio",[127,122517,25219],{"class":154},[127,122519,122520,122523,122526],{"class":129,"line":2171},[127,122521,122522],{"class":154},"        -audio",[127,122524,122525],{"class":781}," sdl,model=hda",[127,122527,25219],{"class":154},[127,122529,122530,122533,122536],{"class":129,"line":2185},[127,122531,122532],{"class":154},"        -display",[127,122534,122535],{"class":781}," sdl,gl=on,show-cursor=on",[127,122537,25219],{"class":154},[127,122539,122540,122542,122545,122548],{"class":129,"line":2190},[127,122541,122465],{"class":154},[127,122543,122544],{"class":781}," virtio-vga-gl,xres=1920,yres=",[127,122546,122547],{"class":154},"1080",[127,122549,25219],{"class":154},[127,122551,122552,122555,122558],{"class":129,"line":2196},[127,122553,122554],{"class":154},"        -drive",[127,122556,122557],{"class":781}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[127,122559,25219],{"class":154},[127,122561,122562,122564,122567],{"class":129,"line":2217},[127,122563,122554],{"class":154},[127,122565,122566],{"class":781}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[127,122568,25219],{"class":154},[127,122570,122571,122574,122577],{"class":129,"line":2222},[127,122572,122573],{"class":154},"        -monitor",[127,122575,122576],{"class":781}," stdio",[127,122578,25219],{"class":154},[127,122580,122581,122584],{"class":129,"line":2236},[127,122582,122583],{"class":154},"        -serial",[127,122585,122586],{"class":781}," none\n",[632,122588,122589],{"start":415},[635,122590,122591,122592],{},"常用操作：",[632,122593,122594,122597,122653],{},[635,122595,122596],{},"全屏：Ctrl+Alt+F",[635,122598,122599,122600,122605],{},"adb调试",[632,122601,122602],{},[635,122603,122604],{},"使Linux与Android用ADB连接。",[117,122606,122608],{"className":117825,"code":122607,"language":117827,"meta":122,"style":122},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[124,122609,122610,122615,122626,122631,122643,122648],{"__ignoreMap":122},[127,122611,122612],{"class":129,"line":130},[127,122613,122614],{"class":133},"# 连接安卓\n",[127,122616,122617,122620,122623],{"class":129,"line":137},[127,122618,122619],{"class":143},"adb",[127,122621,122622],{"class":781}," connect",[127,122624,122625],{"class":154}," 127.0.0.1\n",[127,122627,122628],{"class":129,"line":151},[127,122629,122630],{"class":133},"# 打开shell\n",[127,122632,122633,122635,122637,122640],{"class":129,"line":167},[127,122634,122619],{"class":143},[127,122636,27423],{"class":154},[127,122638,122639],{"class":781}," 127.0.0.1:5555",[127,122641,122642],{"class":781}," shell\n",[127,122644,122645],{"class":129,"line":415},[127,122646,122647],{"class":133},"# 使用root权限\n",[127,122649,122650],{"class":129,"line":421},[127,122651,122652],{"class":143},"su\n",[635,122654,122655,122656],{},"中文输入法",[632,122657,122658],{},[635,122659,122660],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122662,122664],{"id":122663},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122666,122667,122668],{},"rEFInd 官网与文档：",[457,122669,122670],{"href":122670,"rel":122671},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24405],[575,122673,122674],{},"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":122,"searchDepth":137,"depth":137,"links":122676},[122677,122678,122682],{"id":122342,"depth":137,"text":122343},{"id":122346,"depth":137,"text":122347,"children":122679},[122680,122681],{"id":122350,"depth":151,"text":122351},{"id":122366,"depth":151,"text":122367},{"id":122663,"depth":137,"text":122664},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122334,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122689,"title":122690,"body":122691,"description":603,"extension":604,"meta":125990,"navigation":606,"path":125991,"seo":125992,"stem":125993,"__hash__":125994},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122692,"toc":125964},[122693,122696,122700,122703,122710,122960,122963,123035,123038,123042,123046,123051,123054,123057,123060,123065,123068,123071,123074,123079,123082,123087,123090,123093,123098,123101,123106,123109,123113,123117,123120,123125,123128,123142,123145,123148,123157,123160,123169,123172,123175,123184,123187,123196,123199,123202,123211,123214,123217,123232,123235,123238,123247,123252,123255,123258,123267,123270,123279,123282,123291,123294,123303,123308,123311,123319,123324,123327,123336,123339,123347,123352,123355,123364,123367,123370,123374,123377,123382,123385,123390,123404,123409,123414,123425,123430,123436,123441,123456,123461,123464,123469,123474,123479,123487,123492,123499,123504,123515,123520,123523,123527,123530,123533,123538,123541,123560,123565,123568,123577,123582,123585,123607,123610,123640,123643,123648,123651,123665,123670,123689,123692,123695,123700,123712,123717,123722,123725,123730,123733,123748,123751,123756,123761,123765,123770,123810,123813,123817,123823,123829,123834,123837,123844,123849,123856,123859,123862,123869,123883,123886,123946,123949,123963,123975,123978,123981,123984,124048,124051,124054,124057,124077,124080,124085,124092,124096,124099,124103,124108,124113,124117,124120,124123,124165,124170,124173,124195,124210,124212,124217,124229,124289,124291,124293,124347,124349,124351,124357,124362,124365,124370,124374,124377,124439,124444,124447,124449,124453,124465,124547,124549,124551,124605,124611,124613,124617,124622,124624,124629,124633,124653,124688,124692,124695,124698,124701,124708,124711,124723,124726,124741,124744,124763,124811,124814,124831,124834,124848,124853,124856,124865,124880,124892,124930,124935,124944,124949,124954,124980,124989,124993,124997,125002,125005,125009,125013,125018,125021,125026,125029,125034,125037,125042,125045,125049,125054,125057,125062,125065,125069,125074,125077,125082,125085,125090,125093,125097,125102,125105,125110,125113,125118,125121,125125,125130,125133,125138,125141,125146,125149,125154,125157,125162,125165,125170,125173,125177,125182,125185,125190,125197,125201,125206,125209,125214,125217,125221,125226,125229,125232,125235,125238,125241,125245,125248,125258,125263,125268,125290,125295,125300,125307,125311,125316,125319,125322,125327,125330,125333,125336,125339,125342,125345,125348,125351,125354,125357,125360,125363,125368,125373,125378,125383,125388,125393,125398,125401,125405,125408,125412,125417,125422,125427,125432,125436,125442,125450,125455,125458,125463,125478,125481,125486,125520,125535,125538,125593,125619,125631,125634,125643,125646,125661,125666,125669,125675,125680,125683,125688,125691,125696,125701,125708,125711,125726,125729,125764,125769,125777,125815,125818,125821,125826,125829,125834,125845,125879,125884,125887,125896,125901,125907,125910,125915,125924,125929,125932,125935,125940,125948,125951,125956,125961],[10,122694,122690],{"id":122695},"_7-其他操作",[14,122697,122699],{"id":122698},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122701,122702],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122704,122705,122706,122709],{},"进入工控机的硬盘目录，进入",[124,122707,122708],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[117,122711,122715],{"className":122712,"code":122713,"language":122714,"meta":122,"style":122},"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",[124,122716,122717,122725,122736,122743,122750,122762,122769,122781,122792,122803,122810,122817,122824,122836,122848,122855,122867,122879,122886,122898,122910,122922,122933,122940,122951],{"__ignoreMap":122},[127,122718,122719,122722],{"class":129,"line":130},[127,122720,122721],{"class":140},"network",[127,122723,122724],{"class":147},": \n",[127,122726,122727,122730,122732,122734],{"class":129,"line":137},[127,122728,122729],{"class":140},"  version",[127,122731,158],{"class":147},[127,122733,530],{"class":154},[127,122735,3216],{"class":147},[127,122737,122738,122741],{"class":129,"line":151},[127,122739,122740],{"class":140},"  wifis",[127,122742,122724],{"class":147},[127,122744,122745,122748],{"class":129,"line":167},[127,122746,122747],{"class":140},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[127,122749,122724],{"class":147},[127,122751,122752,122755,122757,122760],{"class":129,"line":415},[127,122753,122754],{"class":140},"      renderer",[127,122756,158],{"class":147},[127,122758,122759],{"class":781},"NetworkManager",[127,122761,3216],{"class":147},[127,122763,122764,122767],{"class":129,"line":421},[127,122765,122766],{"class":140},"      match",[127,122768,122724],{"class":147},[127,122770,122771,122774,122776,122779],{"class":129,"line":1766},[127,122772,122773],{"class":140},"        name",[127,122775,158],{"class":147},[127,122777,122778],{"class":781},"\"wlan0\"",[127,122780,3216],{"class":147},[127,122782,122783,122786,122788,122790],{"class":129,"line":1856},[127,122784,122785],{"class":140},"      dhcp4",[127,122787,158],{"class":147},[127,122789,1907],{"class":154},[127,122791,3216],{"class":147},[127,122793,122794,122797,122799,122801],{"class":129,"line":1862},[127,122795,122796],{"class":140},"      dhcp6",[127,122798,158],{"class":147},[127,122800,1907],{"class":154},[127,122802,3216],{"class":147},[127,122804,122805,122808],{"class":129,"line":1874},[127,122806,122807],{"class":140},"      access-points",[127,122809,122724],{"class":147},[127,122811,122812,122815],{"class":129,"line":2155},[127,122813,122814],{"class":781},"        \"EMIS_Vinci_Robocon_5G\"",[127,122816,122724],{"class":147},[127,122818,122819,122822],{"class":129,"line":2160},[127,122820,122821],{"class":140},"          auth",[127,122823,122724],{"class":147},[127,122825,122826,122829,122831,122834],{"class":129,"line":2166},[127,122827,122828],{"class":140},"            key-management",[127,122830,158],{"class":147},[127,122832,122833],{"class":781},"\"psk\"",[127,122835,3216],{"class":147},[127,122837,122838,122841,122843,122846],{"class":129,"line":2171},[127,122839,122840],{"class":140},"            password",[127,122842,158],{"class":147},[127,122844,122845],{"class":781},"\"vinci666\"",[127,122847,3216],{"class":147},[127,122849,122850,122853],{"class":129,"line":2185},[127,122851,122852],{"class":140},"          networkmanager",[127,122854,122724],{"class":147},[127,122856,122857,122860,122862,122865],{"class":129,"line":2190},[127,122858,122859],{"class":140},"            uuid",[127,122861,158],{"class":147},[127,122863,122864],{"class":781},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[127,122866,3216],{"class":147},[127,122868,122869,122872,122874,122877],{"class":129,"line":2196},[127,122870,122871],{"class":140},"            name",[127,122873,158],{"class":147},[127,122875,122876],{"class":781},"\"EMIS_Vinci_Robocon_5G\"",[127,122878,3216],{"class":147},[127,122880,122881,122884],{"class":129,"line":2217},[127,122882,122883],{"class":140},"            passthrough",[127,122885,122724],{"class":147},[127,122887,122888,122891,122893,122896],{"class":129,"line":2222},[127,122889,122890],{"class":140},"              wifi-security.auth-alg",[127,122892,158],{"class":147},[127,122894,122895],{"class":781},"\"open\"",[127,122897,3216],{"class":147},[127,122899,122900,122903,122905,122908],{"class":129,"line":2236},[127,122901,122902],{"class":140},"              ipv6.addr-gen-mode",[127,122904,158],{"class":147},[127,122906,122907],{"class":781},"\"default\"",[127,122909,3216],{"class":147},[127,122911,122912,122915,122917,122920],{"class":129,"line":2241},[127,122913,122914],{"class":140},"              ipv6.ip6-privacy",[127,122916,158],{"class":147},[127,122918,122919],{"class":781},"\"-1\"",[127,122921,3216],{"class":147},[127,122923,122924,122927,122929,122931],{"class":129,"line":2270},[127,122925,122926],{"class":140},"              proxy._",[127,122928,158],{"class":147},[127,122930,8194],{"class":781},[127,122932,3216],{"class":147},[127,122934,122935,122938],{"class":129,"line":2275},[127,122936,122937],{"class":140},"      networkmanager",[127,122939,122724],{"class":147},[127,122941,122942,122945,122947,122949],{"class":129,"line":2292},[127,122943,122944],{"class":140},"        uuid",[127,122946,158],{"class":147},[127,122948,122864],{"class":781},[127,122950,3216],{"class":147},[127,122952,122953,122955,122957],{"class":129,"line":2297},[127,122954,122773],{"class":140},[127,122956,158],{"class":147},[127,122958,122959],{"class":781},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122961,122962],{},"将其改为新wifi的名和密码：",[117,122964,122966],{"className":122712,"code":122965,"language":122714,"meta":122,"style":122},"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",[124,122967,122968,122974,122983,122989,122996,123005,123013,123019,123025],{"__ignoreMap":122},[127,122969,122970,122972],{"class":129,"line":130},[127,122971,122721],{"class":140},[127,122973,4281],{"class":147},[127,122975,122976,122978,122980],{"class":129,"line":137},[127,122977,122729],{"class":140},[127,122979,158],{"class":147},[127,122981,122982],{"class":154},"2\n",[127,122984,122985,122987],{"class":129,"line":151},[127,122986,122740],{"class":140},[127,122988,4281],{"class":147},[127,122990,122991,122994],{"class":129,"line":167},[127,122992,122993],{"class":140},"    wlan0",[127,122995,4281],{"class":147},[127,122997,122998,123000,123002],{"class":129,"line":415},[127,122999,122785],{"class":140},[127,123001,158],{"class":147},[127,123003,123004],{"class":154},"true\n",[127,123006,123007,123009,123011],{"class":129,"line":421},[127,123008,122796],{"class":140},[127,123010,158],{"class":147},[127,123012,123004],{"class":154},[127,123014,123015,123017],{"class":129,"line":1766},[127,123016,122807],{"class":140},[127,123018,4281],{"class":147},[127,123020,123021,123023],{"class":129,"line":1856},[127,123022,122814],{"class":781},[127,123024,4281],{"class":147},[127,123026,123027,123030,123032],{"class":129,"line":1862},[127,123028,123029],{"class":140},"          password",[127,123031,158],{"class":147},[127,123033,123034],{"class":781},"\"vinci666\"\n",[19,123036,123037],{},"工控机开机即可连上网。",[14,123039,123041],{"id":123040},"_72-ssh远程开发","7.2 SSH远程开发",[62,123043,123045],{"id":123044},"_721-环境准备","7.2.1 环境准备",[19,123047,123048],{},[30,123049,123050],{},"1.硬件准备",[19,123052,123053],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123055,123056],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123058,123059],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123061,123062],{},[30,123063,123064],{},"2.设置固定IP",[19,123066,123067],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123069,123070],{},"1.进入设置界面",[19,123072,123073],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123075,123076],{},[23,123077],{"alt":122,"src":123078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123080,123081],{},"2.配置所连接的网络",[19,123083,123084],{},[23,123085],{"alt":122,"src":123086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123088,123089],{},"3.设置固定IP",[19,123091,123092],{},"查看当前IP地址。",[19,123094,123095],{},[23,123096],{"alt":122,"src":123097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123099,123100],{},"设置固定IP。",[19,123102,123103],{},[23,123104],{"alt":122,"src":123105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123107,123108],{},"至此，IP配置完毕。",[62,123110,123112],{"id":123111},"_722-环境搭建","7.2.2 环境搭建",[19,123114,123115],{},[30,123116,26294],{},[19,123118,123119],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123121,123122],{},[30,123123,123124],{},"实现",[19,123126,123127],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[632,123129,123130,123133,123136,123139],{},[635,123131,123132],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[635,123134,123135],{},"远程主机启动SSH服务；",[635,123137,123138],{},"本地主机登陆远程主机；",[635,123140,123141],{},"实现数据传输。",[19,123143,123144],{},"1.安装SSH客户端与服务端",[19,123146,123147],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[117,123149,123151],{"className":121345,"code":123150,"language":121347,"meta":121348,"style":122}," sudo apt install openssh-server\n",[124,123152,123153],{"__ignoreMap":122},[127,123154,123155],{"class":129,"line":130},[127,123156,123150],{},[19,123158,123159],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[117,123161,123163],{"className":121345,"code":123162,"language":121347,"meta":121348,"style":122},"sudo apt install openssh-client\n",[124,123164,123165],{"__ignoreMap":122},[127,123166,123167],{"class":129,"line":130},[127,123168,123162],{},[19,123170,123171],{},"2.远程主机启动SSH服务",[19,123173,123174],{},"远程主机启动 ssh 服务命令如下：",[117,123176,123178],{"className":121345,"code":123177,"language":121347,"meta":121348,"style":122},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[124,123179,123180],{"__ignoreMap":122},[127,123181,123182],{"class":129,"line":130},[127,123183,123177],{},[19,123185,123186],{},"启动后可使用如下命令查看服务是否正常运行：",[117,123188,123190],{"className":121345,"code":123189,"language":121347,"meta":121348,"style":122},"ps -e | grep ssh\n",[124,123191,123192],{"__ignoreMap":122},[127,123193,123194],{"class":129,"line":130},[127,123195,123189],{},[19,123197,123198],{},"如果启动成功，会包含 sshd 程序。",[19,123200,123201],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[117,123203,123205],{"className":121345,"code":123204,"language":121347,"meta":121348,"style":122},"sudo systemctl enable ssh\n",[124,123206,123207],{"__ignoreMap":122},[127,123208,123209],{"class":129,"line":130},[127,123210,123204],{},[19,123212,123213],{},"3.本地远程登录",[19,123215,123216],{},"登录远程主机可以调用如下命令:",[117,123218,123220],{"className":117825,"code":123219,"language":117827,"meta":122,"style":122},"ssh -X 用户名@ip地址\n",[124,123221,123222],{"__ignoreMap":122},[127,123223,123224,123226,123229],{"class":129,"line":130},[127,123225,122176],{"class":143},[127,123227,123228],{"class":154}," -X",[127,123230,123231],{"class":781}," 用户名@ip地址\n",[19,123233,123234],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123236,123237],{},"如果退出，可以调用exit命令：",[117,123239,123241],{"className":121345,"code":123240,"language":121347,"meta":121348,"style":122},"exit\n",[124,123242,123243],{"__ignoreMap":122},[127,123244,123245],{"class":129,"line":130},[127,123246,123240],{},[19,123248,123249],{},[30,123250,123251],{},"4.实现数据传输",[19,123253,123254],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123256,123257],{},"上传文件指令格式如下：",[117,123259,123261],{"className":121345,"code":123260,"language":121347,"meta":121348,"style":122},"scp 本地文件路径 账号@ip:路径\n",[124,123262,123263],{"__ignoreMap":122},[127,123264,123265],{"class":129,"line":130},[127,123266,123260],{},[19,123268,123269],{},"上传文件夹指令格式如下：",[117,123271,123273],{"className":121345,"code":123272,"language":121347,"meta":121348,"style":122},"scp -r 本地文件夹路径 账号@ip:路径\n",[124,123274,123275],{"__ignoreMap":122},[127,123276,123277],{"class":129,"line":130},[127,123278,123272],{},[19,123280,123281],{},"下载文件指令格式如下：",[117,123283,123285],{"className":121345,"code":123284,"language":121347,"meta":121348,"style":122},"scp 账号@ip:路径 本地文件夹路径\n",[124,123286,123287],{"__ignoreMap":122},[127,123288,123289],{"class":129,"line":130},[127,123290,123284],{},[19,123292,123293],{},"下载文件夹指令格式如下：",[117,123295,123297],{"className":121345,"code":123296,"language":121347,"meta":121348,"style":122},"scp -r 账号@ip:路径 本地文件夹路径\n",[124,123298,123299],{"__ignoreMap":122},[127,123300,123301],{"class":129,"line":130},[127,123302,123296],{},[19,123304,123305],{},[30,123306,123307],{},"优化",[19,123309,123310],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[632,123312,123313,123316],{},[635,123314,123315],{},"本地生成密钥对；",[635,123317,123318],{},"将公钥上传至远程主机。",[19,123320,123321],{},[30,123322,123323],{},"1.生成密钥对",[19,123325,123326],{},"本地客户端生成公私钥：（一路回车默认即可）",[117,123328,123330],{"className":121345,"code":123329,"language":121347,"meta":121348,"style":122},"ssh-keygen\n",[124,123331,123332],{"__ignoreMap":122},[127,123333,123334],{"class":129,"line":130},[127,123335,123329],{},[19,123337,123338],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[632,123340,123341,123344],{},[635,123342,123343],{},"id_rsa （私钥）；",[635,123345,123346],{},"id_rsa.pub (公钥)。",[19,123348,123349],{},[30,123350,123351],{},"2.公钥上传",[19,123353,123354],{},"上传指令如下：",[117,123356,123358],{"className":121345,"code":123357,"language":121347,"meta":121348,"style":122},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[124,123359,123360],{"__ignoreMap":122},[127,123361,123362],{"class":129,"line":130},[127,123363,123357],{},[19,123365,123366],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123368,123369],{},"以后再远程登录就无需录入密码了。",[62,123371,123373],{"id":123372},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123375,123376],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123378,123379],{},[30,123380,123381],{},"1.准备工作",[19,123383,123384],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123386,123387],{},[30,123388,123389],{},"2.为VScode安装远程开发插件",[19,123391,123392,123393,123396,123397,123400,123401,28925],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[124,123394,123395],{},"扩展：商店","的搜索栏输入",[124,123398,123399],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[124,123402,123403],{},"安装",[19,123405,123406],{},[23,123407],{"alt":122,"src":123408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123410,123411],{},[30,123412,123413],{},"3.配置远程连接",[19,123415,123416,123417,123420,123421,123424],{},"步骤1：使用快捷键",[124,123418,123419],{},"ctrl + shift + p","打开命令输入窗口，并输入",[124,123422,123423],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123426,123427],{},[23,123428],{"alt":122,"src":123429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123431,123432,123433,28925],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[124,123434,123435],{},"Add New SSH Host",[19,123437,123438],{},[23,123439],{"alt":122,"src":123440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123442,123443,123444,123447,123448,123451,123452,123455],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[124,123445,123446],{},"ssh +X ubuntu@192.168.43.164","，其中，",[124,123449,123450],{},"ubuntu","需要替换为你的登录用户名，",[124,123453,123454],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123457,123458],{},[23,123459],{"alt":122,"src":123460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123462,123463],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123465,123466],{},[23,123467],{"alt":122,"src":123468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123470,123471],{},[23,123472],{"alt":122,"src":123473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123475,123476],{},[30,123477,123478],{},"4.使用",[19,123480,123481,123482,123420,123484,123486],{},"步骤1：继续使用快捷键",[124,123483,123419],{},[124,123485,123423],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123488,123489],{},[23,123490],{"alt":122,"src":123491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123493,123494,123495,123498],{},"或者，也可以点击侧边栏的",[124,123496,123497],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123500,123501],{},[23,123502],{"alt":122,"src":123503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123505,123506,123507,123510,123511,123514],{},"步骤2：选择菜单栏的",[124,123508,123509],{},"文件","下的",[124,123512,123513],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123516,123517],{},[23,123518],{"alt":122,"src":123519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123521,123522],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123524,123526],{"id":123525},"_73-远程桌面","7.3 远程桌面",[19,123528,123529],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123531,123532],{},"我们选择使用VNC来看。",[632,123534,123535],{},[635,123536,123537],{},"安装VNC服务器：",[19,123539,123540],{},"这里以TigerVNC为例进行安装：",[117,123542,123544],{"className":117825,"code":123543,"language":117827,"meta":122,"style":122},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[124,123545,123546],{"__ignoreMap":122},[127,123547,123548,123550,123552,123554,123557],{"class":129,"line":130},[127,123549,25117],{"class":143},[127,123551,117846],{"class":781},[127,123553,24374],{"class":781},[127,123555,123556],{"class":781}," tigervnc-standalone-server",[127,123558,123559],{"class":781}," tigervnc-common\n",[632,123561,123562],{"start":137},[635,123563,123564],{},"设置VNC密码：",[19,123566,123567],{},"为VNC用户设置密码，运行以下命令：",[117,123569,123571],{"className":117825,"code":123570,"language":117827,"meta":122,"style":122},"vncpasswd\n",[124,123572,123573],{"__ignoreMap":122},[127,123574,123575],{"class":129,"line":130},[127,123576,123570],{"class":143},[632,123578,123579],{"start":151},[635,123580,123581],{},"配置VNC启动脚本:",[19,123583,123584],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[117,123586,123588],{"className":117825,"code":123587,"language":117827,"meta":122,"style":122},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[124,123589,123590,123599],{"__ignoreMap":122},[127,123591,123592,123594,123596],{"class":129,"line":130},[127,123593,101795],{"class":143},[127,123595,29756],{"class":154},[127,123597,123598],{"class":781}," ~\u002F.vnc\n",[127,123600,123601,123604],{"class":129,"line":137},[127,123602,123603],{"class":143},"nano",[127,123605,123606],{"class":781}," ~\u002F.vnc\u002Fxstartup\n",[19,123608,123609],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[117,123611,123613],{"className":117825,"code":123612,"language":117827,"meta":122,"style":122},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[124,123614,123615,123620,123628,123635],{"__ignoreMap":122},[127,123616,123617],{"class":129,"line":130},[127,123618,123619],{"class":133},"#!\u002Fbin\u002Fsh\n",[127,123621,123622,123625],{"class":129,"line":137},[127,123623,123624],{"class":154},"unset",[127,123626,123627],{"class":781}," SESSION_MANAGER\n",[127,123629,123630,123632],{"class":129,"line":151},[127,123631,123624],{"class":154},[127,123633,123634],{"class":781}," DBUS_SESSION_BUS_ADDRESS\n",[127,123636,123637],{"class":129,"line":167},[127,123638,123639],{"class":143},"gnome-session\n",[19,123641,123642],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[632,123644,123645],{"start":167},[635,123646,123647],{},"给予执行权限：",[19,123649,123650],{},"为xstartup文件设置执行权限：",[117,123652,123654],{"className":117825,"code":123653,"language":117827,"meta":122,"style":122},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[124,123655,123656],{"__ignoreMap":122},[127,123657,123658,123660,123663],{"class":129,"line":130},[127,123659,25152],{"class":143},[127,123661,123662],{"class":781}," +x",[127,123664,123606],{"class":781},[632,123666,123667],{"start":415},[635,123668,123669],{},"启动VNC服务器：",[117,123671,123673],{"className":117825,"code":123672,"language":117827,"meta":122,"style":122},"vncserver -geometry 1920x1080 -localhost=0\n",[124,123674,123675],{"__ignoreMap":122},[127,123676,123677,123680,123683,123686],{"class":129,"line":130},[127,123678,123679],{"class":143},"vncserver",[127,123681,123682],{"class":154}," -geometry",[127,123684,123685],{"class":781}," 1920x1080",[127,123687,123688],{"class":154}," -localhost=0\n",[19,123690,123691],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123693,123694],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[632,123696,123697],{"start":421},[635,123698,123699],{},"查看已开启的VNC服务器：",[117,123701,123703],{"className":117825,"code":123702,"language":117827,"meta":122,"style":122},"vncserver -list\n",[124,123704,123705],{"__ignoreMap":122},[127,123706,123707,123709],{"class":129,"line":130},[127,123708,123679],{"class":143},[127,123710,123711],{"class":154}," -list\n",[19,123713,123714],{},[23,123715],{"alt":122,"src":123716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[632,123718,123719],{"start":1766},[635,123720,123721],{},"连接到VNC服务器：",[19,123723,123724],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[632,123726,123727],{"start":1856},[635,123728,123729],{},"停止VNC服务器：",[19,123731,123732],{},"如果需要停止VNC服务器，可以使用以下命令：",[117,123734,123736],{"className":117825,"code":123735,"language":117827,"meta":122,"style":122},"vncserver -kill :1\n",[124,123737,123738],{"__ignoreMap":122},[127,123739,123740,123742,123745],{"class":129,"line":130},[127,123741,123679],{"class":143},[127,123743,123744],{"class":154}," -kill",[127,123746,123747],{"class":781}," :1\n",[19,123749,123750],{},"将:1替换为你实际使用的显示编号。",[19,123752,123753],{},[23,123754],{"alt":122,"src":123755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123757,123758],{},[23,123759],{"alt":122,"src":123760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123762,123764],{"id":123763},"_74-usb端口设置","7.4 USB端口设置",[19,123766,123767],{},[30,123768,123769],{},"首先先配置好权限",[117,123771,123773],{"className":117825,"code":123772,"language":117827,"meta":122,"style":122},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[124,123774,123775,123780,123793,123800,123805],{"__ignoreMap":122},[127,123776,123777],{"class":129,"line":130},[127,123778,123779],{"class":133},"# 将用户权限提高\n",[127,123781,123782,123784,123786,123788,123791],{"class":129,"line":137},[127,123783,25117],{"class":143},[127,123785,27114],{"class":781},[127,123787,27117],{"class":154},[127,123789,123790],{"class":781}," dialout",[127,123792,27122],{"class":147},[127,123794,123795,123797],{"class":129,"line":151},[127,123796,27141],{"class":143},[127,123798,123799],{"class":781}," dialout\n",[127,123801,123802],{"class":129,"line":167},[127,123803,123804],{"class":133},"# 查看下面命令是否输出dialout（若输出才正常）\n",[127,123806,123807],{"class":129,"line":415},[127,123808,123809],{"class":143},"groups\n",[19,123811,123812],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[62,123814,123816],{"id":123815},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123818,123819,123822],{},[30,123820,123821],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123824,123825,123828],{},[30,123826,123827],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123830,123831],{},[30,123832,123833],{},"流程如下：",[19,123835,123836],{},"（1）.查找设备idVendor和idProduct",[19,123838,123839,123840,123843],{},"接入两个USB设备，在终端调用指令",[124,123841,123842],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123845,123846],{},[23,123847],{"alt":122,"src":123848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123850,123851,123852,123855],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[124,123853,123854],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123857,123858],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123860,123861],{},"（2）.编写映射规则",[19,123863,123864,123865,123868],{},"在",[124,123866,123867],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[117,123870,123872],{"className":117825,"code":123871,"language":117827,"meta":122,"style":122},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[124,123873,123874],{"__ignoreMap":122},[127,123875,123876,123878,123880],{"class":129,"line":130},[127,123877,25117],{"class":143},[127,123879,119112],{"class":781},[127,123881,123882],{"class":781}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123884,123885],{},"输入如下内容：",[117,123887,123889],{"className":117825,"code":123888,"language":117827,"meta":122,"style":122},"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",[124,123890,123891,123921],{"__ignoreMap":122},[127,123892,123893,123896,123898,123901,123904,123907,123910,123912,123915,123918],{"class":129,"line":130},[127,123894,123895],{"class":147},"KERNEL",[127,123897,725],{"class":290},[127,123899,123900],{"class":781},"=\"ttyUSB*\",",[127,123902,123903],{"class":143}," ATTRS",[127,123905,123906],{"class":781},"{idVendor}==",[127,123908,123909],{"class":143},"\"10c4\"",[127,123911,1053],{"class":143},[127,123913,123914],{"class":781}," ATTRS{idProduct}==\"ea60\",",[127,123916,123917],{"class":781}," MODE:=\"0777\",",[127,123919,123920],{"class":781}," SYMLINK+=\"mylidar\"\n",[127,123922,123923,123925,123927,123929,123931,123933,123936,123938,123941,123943],{"class":129,"line":137},[127,123924,123895],{"class":147},[127,123926,725],{"class":290},[127,123928,123900],{"class":781},[127,123930,123903],{"class":143},[127,123932,123906],{"class":781},[127,123934,123935],{"class":143},"\"1a86\"",[127,123937,1053],{"class":143},[127,123939,123940],{"class":781}," ATTRS{idProduct}==\"7523\",",[127,123942,123917],{"class":781},[127,123944,123945],{"class":781}," SYMLINK+=\"mycar\"\n",[19,123947,123948],{},"代码解释：",[1681,123950,123951,123954,123957,123960],{},[635,123952,123953],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[635,123955,123956],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[635,123958,123959],{},"SYMLINK是符号连接，即绑定的别名；",[635,123961,123962],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123964,123965,123966,123969,123972],{},"***小提示：***",[533,123967,123968],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[124,123970,123971],{},"\u002Fetc\u002Fudev\u002Frule.d",[533,123973,123974],{},"目录即可。",[19,123976,123977],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123979,123980],{},"（3）.使规则生效",[19,123982,123983],{},"在终端下输入如下指令：",[117,123985,123987],{"className":117825,"code":123986,"language":117827,"meta":122,"style":122},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[124,123988,123989,123994,124006,124017,124021,124026,124039],{"__ignoreMap":122},[127,123990,123991],{"class":129,"line":130},[127,123992,123993],{"class":133},"# Ubuntu用下方命令\n",[127,123995,123996,123998,124000,124003],{"class":129,"line":137},[127,123997,25117],{"class":143},[127,123999,120577],{"class":781},[127,124001,124002],{"class":781}," udev",[127,124004,124005],{"class":781}," reload\n",[127,124007,124008,124010,124012,124014],{"class":129,"line":151},[127,124009,25117],{"class":143},[127,124011,120577],{"class":781},[127,124013,124002],{"class":781},[127,124015,124016],{"class":781}," restart\n",[127,124018,124019],{"class":129,"line":167},[127,124020,2942],{"emptyLinePlaceholder":606},[127,124022,124023],{"class":129,"line":415},[127,124024,124025],{"class":133},"#Fedora用下方命令\n",[127,124027,124028,124030,124033,124036],{"class":129,"line":421},[127,124029,25117],{"class":143},[127,124031,124032],{"class":781}," udevadm",[127,124034,124035],{"class":781}," control",[127,124037,124038],{"class":154}," --reload\n",[127,124040,124041,124043,124045],{"class":129,"line":1766},[127,124042,25117],{"class":143},[127,124044,124032],{"class":781},[127,124046,124047],{"class":781}," trigger\n",[19,124049,124050],{},"再重新插拔设备即可。",[19,124052,124053],{},"（4）.测试",[19,124055,124056],{},"终端下输入如下指令",[117,124058,124060],{"className":117825,"code":124059,"language":117827,"meta":122,"style":122},"ll \u002Fdev | grep ttyUSB\n",[124,124061,124062],{"__ignoreMap":122},[127,124063,124064,124067,124070,124072,124074],{"class":129,"line":130},[127,124065,124066],{"class":143},"ll",[127,124068,124069],{"class":781}," \u002Fdev",[127,124071,25650],{"class":290},[127,124073,30776],{"class":143},[127,124075,124076],{"class":781}," ttyUSB\n",[19,124078,124079],{},"运行结果如下：",[19,124081,124082],{},[23,124083],{"alt":122,"src":124084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124086,124087,124088,124091],{},"也可以多次插拔USB设备，会发现设备端口",[124,124089,124090],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124093,124094],{},[30,124095,118493],{},[19,124097,124098],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[62,124100,124102],{"id":124101},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124104,124105,124107],{},[30,124106,123821],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124109,124110,124112],{},[30,124111,123827],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124114,124115],{},[30,124116,123833],{},[19,124118,124119],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124121,124122],{},"调用如下指令查看第一台雷达的USB信息：",[117,124124,124126],{"className":117825,"code":124125,"language":117827,"meta":122,"style":122},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[124,124127,124128,124148],{"__ignoreMap":122},[127,124129,124130,124133,124135,124138,124141,124143,124145],{"class":129,"line":130},[127,124131,124132],{"class":143},"udevadm",[127,124134,70354],{"class":781},[127,124136,124137],{"class":154}," --attribute-walk",[127,124139,124140],{"class":154}," --name=\u002Fdev\u002FttyUSB0",[127,124142,25650],{"class":290},[127,124144,30776],{"class":143},[127,124146,124147],{"class":781}," KERNELS\n",[127,124149,124150,124152,124154,124156,124159,124161,124163],{"class":129,"line":137},[127,124151,124132],{"class":143},[127,124153,70354],{"class":781},[127,124155,124137],{"class":154},[127,124157,124158],{"class":154}," --name=\u002Fdev\u002FttyACM0",[127,124160,25650],{"class":290},[127,124162,30776],{"class":143},[127,124164,124147],{"class":781},[19,124166,124167],{},[23,124168],{"alt":122,"src":124169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124171,124172],{},"调用如下指令查看第二台雷达的USB信息：",[117,124174,124176],{"className":117825,"code":124175,"language":117827,"meta":122,"style":122},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[124,124177,124178],{"__ignoreMap":122},[127,124179,124180,124182,124184,124186,124189,124191,124193],{"class":129,"line":130},[127,124181,124132],{"class":143},[127,124183,70354],{"class":781},[127,124185,124137],{"class":154},[127,124187,124188],{"class":154}," --name=\u002Fdev\u002FttyUSB1",[127,124190,25650],{"class":290},[127,124192,30776],{"class":143},[127,124194,124147],{"class":781},[19,124196,124197,124198,124201,124202,124205,124206,124209],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[124,124199,124200],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[124,124203,124204],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[30,124207,124208],{},"唯一性标识","”。",[19,124211,123861],{},[19,124213,123864,124214,124216],{},[124,124215,123867],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[117,124218,124219],{"className":117825,"code":123871,"language":117827,"meta":122,"style":122},[124,124220,124221],{"__ignoreMap":122},[127,124222,124223,124225,124227],{"class":129,"line":130},[127,124224,25117],{"class":143},[127,124226,119112],{"class":781},[127,124228,123882],{"class":781},[117,124230,124232],{"className":117825,"code":124231,"language":117827,"meta":122,"style":122},"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",[124,124233,124234,124263],{"__ignoreMap":122},[127,124235,124236,124238,124240,124242,124245,124247,124250,124253,124255,124258,124260],{"class":129,"line":130},[127,124237,123895],{"class":147},[127,124239,725],{"class":290},[127,124241,123900],{"class":781},[127,124243,124244],{"class":147}," KERNELS",[127,124246,725],{"class":290},[127,124248,124249],{"class":781},"=\"1-1.3:1.0\",",[127,124251,124252],{"class":143}," MODE:",[127,124254,725],{"class":781},[127,124256,124257],{"class":143},"\"0777\"",[127,124259,1053],{"class":143},[127,124261,124262],{"class":781}," SYMLINK+=\"rplidar_front\"\n",[127,124264,124265,124267,124269,124271,124273,124275,124278,124280,124282,124284,124286],{"class":129,"line":137},[127,124266,123895],{"class":147},[127,124268,725],{"class":290},[127,124270,123900],{"class":781},[127,124272,124244],{"class":147},[127,124274,725],{"class":290},[127,124276,124277],{"class":781},"=\"1-1.4:1.0\",",[127,124279,124252],{"class":143},[127,124281,725],{"class":781},[127,124283,124257],{"class":143},[127,124285,1053],{"class":143},[127,124287,124288],{"class":781}," SYMLINK+=\"rplidar_back\"\n",[19,124290,123980],{},[19,124292,123983],{},[117,124294,124295],{"className":117825,"code":123986,"language":117827,"meta":122,"style":122},[124,124296,124297,124301,124311,124321,124325,124329,124339],{"__ignoreMap":122},[127,124298,124299],{"class":129,"line":130},[127,124300,123993],{"class":133},[127,124302,124303,124305,124307,124309],{"class":129,"line":137},[127,124304,25117],{"class":143},[127,124306,120577],{"class":781},[127,124308,124002],{"class":781},[127,124310,124005],{"class":781},[127,124312,124313,124315,124317,124319],{"class":129,"line":151},[127,124314,25117],{"class":143},[127,124316,120577],{"class":781},[127,124318,124002],{"class":781},[127,124320,124016],{"class":781},[127,124322,124323],{"class":129,"line":167},[127,124324,2942],{"emptyLinePlaceholder":606},[127,124326,124327],{"class":129,"line":415},[127,124328,124025],{"class":133},[127,124330,124331,124333,124335,124337],{"class":129,"line":421},[127,124332,25117],{"class":143},[127,124334,124032],{"class":781},[127,124336,124035],{"class":781},[127,124338,124038],{"class":154},[127,124340,124341,124343,124345],{"class":129,"line":1766},[127,124342,25117],{"class":143},[127,124344,124032],{"class":781},[127,124346,124047],{"class":781},[19,124348,124050],{},[19,124350,124053],{},[19,124352,124056,124353,124356],{},[124,124354,124355],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124358,124359],{},[23,124360],{"alt":122,"src":124361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124363,124364],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124366,124367,124369],{},[30,124368,118493],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[62,124371,124373],{"id":124372},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124375,124376],{},"（1）.查看所连接的主机USB接口的信息",[117,124378,124380],{"className":117825,"code":124379,"language":117827,"meta":122,"style":122},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[124,124381,124382,124412],{"__ignoreMap":122},[127,124383,124384,124386,124388,124391,124393,124395,124397,124399,124402,124405,124407,124410],{"class":129,"line":130},[127,124385,124132],{"class":143},[127,124387,70354],{"class":781},[127,124389,124390],{"class":154}," -a",[127,124392,29756],{"class":154},[127,124394,28962],{"class":147},[127,124396,124132],{"class":143},[127,124398,70354],{"class":781},[127,124400,124401],{"class":154}," -q",[127,124403,124404],{"class":781}," path",[127,124406,25656],{"class":154},[127,124408,124409],{"class":781}," \u002Fdev\u002FttyACM0",[127,124411,687],{"class":147},[127,124413,124414,124416,124418,124420,124422,124424,124426,124428,124430,124432,124434,124437],{"class":129,"line":137},[127,124415,124132],{"class":143},[127,124417,70354],{"class":781},[127,124419,124390],{"class":154},[127,124421,29756],{"class":154},[127,124423,28962],{"class":147},[127,124425,124132],{"class":143},[127,124427,70354],{"class":781},[127,124429,124401],{"class":154},[127,124431,124404],{"class":781},[127,124433,25656],{"class":154},[127,124435,124436],{"class":781}," \u002Fdev\u002FttyUSB0",[127,124438,687],{"class":147},[19,124440,124441],{},[23,124442],{"alt":122,"src":124443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124445,124446],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124448,123861],{},[19,124450,123864,124451,124216],{},[124,124452,123867],{},[117,124454,124455],{"className":117825,"code":123871,"language":117827,"meta":122,"style":122},[124,124456,124457],{"__ignoreMap":122},[127,124458,124459,124461,124463],{"class":129,"line":130},[127,124460,25117],{"class":143},[127,124462,119112],{"class":781},[127,124464,123882],{"class":781},[117,124466,124468],{"className":117825,"code":124467,"language":117827,"meta":122,"style":122},"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",[124,124469,124470,124498,124524],{"__ignoreMap":122},[127,124471,124472,124474,124476,124479,124481,124483,124485,124487,124490,124493,124495],{"class":129,"line":130},[127,124473,123895],{"class":147},[127,124475,725],{"class":290},[127,124477,124478],{"class":781},"=\"ttyACM*\",",[127,124480,123903],{"class":143},[127,124482,123906],{"class":781},[127,124484,123935],{"class":143},[127,124486,1053],{"class":143},[127,124488,124489],{"class":781}," ATTRS{idProduct}==\"55d4\",",[127,124491,124492],{"class":781}," ATTRS{serial}==\"0001\",",[127,124494,123917],{"class":781},[127,124496,124497],{"class":781}," SYMLINK+=\"ttyACM_MCU\"\n",[127,124499,124500,124502,124504,124506,124508,124510,124512,124514,124516,124519,124521],{"class":129,"line":137},[127,124501,123895],{"class":147},[127,124503,725],{"class":290},[127,124505,124478],{"class":781},[127,124507,123903],{"class":143},[127,124509,123906],{"class":781},[127,124511,123935],{"class":143},[127,124513,1053],{"class":143},[127,124515,124489],{"class":781},[127,124517,124518],{"class":781}," ATTRS{serial}==\"0002\",",[127,124520,123917],{"class":781},[127,124522,124523],{"class":781}," SYMLINK+=\"ttyACM_Lidar\"\n",[127,124525,124526,124528,124530,124532,124534,124536,124538,124540,124542,124544],{"class":129,"line":151},[127,124527,123895],{"class":147},[127,124529,725],{"class":290},[127,124531,123900],{"class":781},[127,124533,123903],{"class":143},[127,124535,123906],{"class":781},[127,124537,123935],{"class":143},[127,124539,1053],{"class":143},[127,124541,123940],{"class":781},[127,124543,123917],{"class":781},[127,124545,124546],{"class":781}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124548,123980],{},[19,124550,123983],{},[117,124552,124553],{"className":117825,"code":123986,"language":117827,"meta":122,"style":122},[124,124554,124555,124559,124569,124579,124583,124587,124597],{"__ignoreMap":122},[127,124556,124557],{"class":129,"line":130},[127,124558,123993],{"class":133},[127,124560,124561,124563,124565,124567],{"class":129,"line":137},[127,124562,25117],{"class":143},[127,124564,120577],{"class":781},[127,124566,124002],{"class":781},[127,124568,124005],{"class":781},[127,124570,124571,124573,124575,124577],{"class":129,"line":151},[127,124572,25117],{"class":143},[127,124574,120577],{"class":781},[127,124576,124002],{"class":781},[127,124578,124016],{"class":781},[127,124580,124581],{"class":129,"line":167},[127,124582,2942],{"emptyLinePlaceholder":606},[127,124584,124585],{"class":129,"line":415},[127,124586,124025],{"class":133},[127,124588,124589,124591,124593,124595],{"class":129,"line":421},[127,124590,25117],{"class":143},[127,124592,124032],{"class":781},[127,124594,124035],{"class":781},[127,124596,124038],{"class":154},[127,124598,124599,124601,124603],{"class":129,"line":1766},[127,124600,25117],{"class":143},[127,124602,124032],{"class":781},[127,124604,124047],{"class":781},[19,124606,124607,124608],{},"再重新插拔设备即可，或者 ",[30,124609,124610],{},"直接重启系统。",[19,124612,124053],{},[19,124614,124056,124615,124356],{},[124,124616,124355],{},[19,124618,124619],{},[23,124620],{"alt":122,"src":124621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124623,124364],{},[19,124625,124626,124628],{},[30,124627,118493],{}," 一些设备可能没有串口号等。",[62,124630,124632],{"id":124631},"_744-其他注意事项","7.4.4 其他注意事项",[19,124634,124635,124636,124638,124639,124642,124643,18951,124646,124649,124650,124652],{},"并非所有的USB设备端口号都是",[124,124637,124090],{},"的格式，比如Arduino的端口号可能是",[124,124640,124641],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[124,124644,124645],{},"videon",[124,124647,124648],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[124,124651,124645],{},"端口，绑定时需要关联的也是该接口。",[19,124654,124655,124656,124659,124660,124663,124664,124666,124667,124670,124671,124674,124675,124678,124679,124678,124682,124678,124685,28925],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[124,124657,124658],{},"KERNEL==\"ttyUSB*\"","修改为",[124,124661,124662],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[124,124665,124658],{},"修改为类似于",[124,124668,124669],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[124,124672,124673],{},"video[0,2,4,6]","表示可以绑定的端口为",[124,124676,124677],{},"video0","或",[124,124680,124681],{},"video2",[124,124683,124684],{},"video4",[124,124686,124687],{},"video6",[14,124689,124691],{"id":124690},"_75-挂载内网网页","7.5 挂载内网网页",[19,124693,124694],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124696,124697],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124699,124700],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124702,124703,124704],{},"Termux 下载地址（F-Droid）：",[457,124705,124706],{"href":124706,"rel":124707},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24405],[19,124709,124710],{},"首先打开app后，先更新软件缓存：",[117,124712,124714],{"className":117825,"code":124713,"language":117827,"meta":122,"style":122},"pkg update\n",[124,124715,124716],{"__ignoreMap":122},[127,124717,124718,124721],{"class":129,"line":130},[127,124719,124720],{"class":143},"pkg",[127,124722,26783],{"class":781},[19,124724,124725],{},"然后换源",[117,124727,124729],{"className":117825,"code":124728,"language":117827,"meta":122,"style":122},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[124,124730,124731],{"__ignoreMap":122},[127,124732,124733,124735,124738],{"class":129,"line":130},[127,124734,123603],{"class":143},[127,124736,124737],{"class":147}," $PREFIX",[127,124739,124740],{"class":781},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124742,124743],{},"将该文件内容替换为下面：",[117,124745,124747],{"className":117825,"code":124746,"language":117827,"meta":122,"style":122},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[124,124748,124749],{"__ignoreMap":122},[127,124750,124751,124754,124757,124760],{"class":129,"line":130},[127,124752,124753],{"class":143},"deb",[127,124755,124756],{"class":781}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[127,124758,124759],{"class":781}," stable",[127,124761,124762],{"class":781}," main\n",[1681,124764,124765,124792],{},[635,124766,124767,124768,124770,124771],{},"如果你使用的是",[124,124769,123603],{},"编辑器：",[1681,124772,124773,124780,124786],{},[635,124774,124775,124776,124779],{},"按 ",[124,124777,124778],{},"Ctrl+O"," 保存文件。",[635,124781,124775,124782,124785],{},[124,124783,124784],{},"Enter"," 确认文件名。",[635,124787,124775,124788,124791],{},[124,124789,124790],{},"Ctrl+X"," 退出编辑器。",[635,124793,124767,124794,124770,124797],{},[124,124795,124796],{},"vim",[1681,124798,124799,124805],{},[635,124800,124775,124801,124804],{},[124,124802,124803],{},"Esc"," 退出编辑模式。",[635,124806,124807,124808,124810],{},"输入 ",[124,124809,119750],{}," 保存并退出。",[19,124812,124813],{},"接下来重新更新软件源：",[117,124815,124817],{"className":117825,"code":124816,"language":117827,"meta":122,"style":122},"pkg update && pkg upgrade\n",[124,124818,124819],{"__ignoreMap":122},[127,124820,124821,124823,124825,124827,124829],{"class":129,"line":130},[127,124822,124720],{"class":143},[127,124824,117876],{"class":781},[127,124826,26731],{"class":147},[127,124828,124720],{"class":143},[127,124830,117862],{"class":781},[19,124832,124833],{},"安装python：",[117,124835,124837],{"className":117825,"code":124836,"language":117827,"meta":122,"style":122},"pkg install python\n",[124,124838,124839],{"__ignoreMap":122},[127,124840,124841,124843,124845],{"class":129,"line":130},[127,124842,124720],{"class":143},[127,124844,24374],{"class":781},[127,124846,124847],{"class":781}," python\n",[19,124849,124850,253],{},[30,124851,124852],{},"通过Termux访问设备存储",[19,124854,124855],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[117,124857,124859],{"className":117825,"code":124858,"language":117827,"meta":122,"style":122},"termux-setup-storage\n",[124,124860,124861],{"__ignoreMap":122},[127,124862,124863],{"class":129,"line":130},[127,124864,124858],{"class":143},[632,124866,124867],{},[635,124868,124869,253,124872],{},[30,124870,124871],{},"进入HTML文件所在的目录",[632,124873,124874],{},[635,124875,124876,124877,124879],{},"使用",[124,124878,101805],{},"命令进入HTML文件所在的目录：",[117,124881,124883],{"className":117825,"code":124882,"language":117827,"meta":122,"style":122},"cd ~\u002Fyour_html_folder\n",[124,124884,124885],{"__ignoreMap":122},[127,124886,124887,124889],{"class":129,"line":130},[127,124888,101805],{"class":154},[127,124890,124891],{"class":781}," ~\u002Fyour_html_folder\n",[632,124893,124894],{"start":137},[635,124895,124896,253,124899,124904,124921],{},[30,124897,124898],{},"启动Python HTTP服务器",[632,124900,124901],{},[635,124902,124903],{},"运行以下命令启动一个简单的HTTP服务器：",[117,124905,124907],{"className":117825,"code":124906,"language":117827,"meta":122,"style":122},"python -m http.server 8000\n",[124,124908,124909],{"__ignoreMap":122},[127,124910,124911,124913,124915,124918],{"class":129,"line":130},[127,124912,30920],{"class":143},[127,124914,101411],{"class":154},[127,124916,124917],{"class":781}," http.server",[127,124919,124920],{"class":154}," 8000\n",[632,124922,124923],{"start":151},[635,124924,124925,124926,124929],{},"这会在端口",[124,124927,124928],{},"8000","上启动一个Web服务器。",[1681,124931,124932],{},[635,124933,124934],{},"启动服务器后，Termux会显示日志信息，例如：",[117,124936,124938],{"className":121345,"code":124937,"language":121347,"meta":121348,"style":122},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[124,124939,124940],{"__ignoreMap":122},[127,124941,124942],{"class":129,"line":130},[127,124943,124937],{},[1681,124945,124946],{},[635,124947,124948],{},"这表示服务器已成功启动。",[19,124950,124951],{},[30,124952,124953],{},"在浏览器中访问HTML文件",[632,124955,124956],{},[635,124957,124958,253,124961,124966],{},[30,124959,124960],{},"在同一设备上访问",[632,124962,124963],{},[635,124964,124965],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[117,124967,124970],{"className":124968,"code":124969,"language":72193,"meta":122,"style":122},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[124,124971,124972],{"__ignoreMap":122},[127,124973,124974,124977],{"class":129,"line":130},[127,124975,124976],{"class":147},"http:",[127,124978,124979],{"class":133},"\u002F\u002Flocalhost:8000\n",[1681,124981,124982],{},[635,124983,124984,124985,124988],{},"如果HTML文件中有",[124,124986,124987],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124990,124992],{"id":124991},"_76-linux重点知识","7.6 Linux重点知识",[62,124994,124996],{"id":124995},"_761-关于点的说明","7.6.1 关于点的说明",[19,124998,124999],{},[23,125000],{"alt":122,"src":125001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125003,125004],{},"一点本目录，两点上目录",[62,125006,125008],{"id":125007},"_762-目录","7.6.2 目录",[22539,125010,125012],{"id":125011},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125014,125015],{},[30,125016,125017],{},"\u002Fboot:",[19,125019,125020],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125022,125023],{},[30,125024,125025],{},"\u002Fetc:",[19,125027,125028],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125030,125031],{},[30,125032,125033],{},"\u002Flib：",[19,125035,125036],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125038,125039],{},[30,125040,125041],{},"\u002Fsys:",[19,125043,125044],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22539,125046,125048],{"id":125047},"_7622-指令集合","7.6.2.2 指令集合",[19,125050,125051],{},[30,125052,125053],{},"\u002Fbin:",[19,125055,125056],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125058,125059],{},[30,125060,125061],{},"\u002Fsbin:",[19,125063,125064],{},"只有系统管理员才能使用的程序和指令",[22539,125066,125068],{"id":125067},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125070,125071],{},[30,125072,125073],{},"\u002Fdev:",[19,125075,125076],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125078,125079],{},[30,125080,125081],{},"\u002Fmedia:",[19,125083,125084],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125086,125087],{},[30,125088,125089],{},"\u002Fmnt:",[19,125091,125092],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22539,125094,125096],{"id":125095},"_7624-临时文件","7.6.2.4 临时文件",[19,125098,125099],{},[30,125100,125101],{},"\u002Frun:",[19,125103,125104],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125106,125107],{},[30,125108,125109],{},"\u002Flost+found:",[19,125111,125112],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125114,125115],{},[30,125116,125117],{},"\u002Ftmp:",[19,125119,125120],{},"这个目录是用来存放一些临时文件的",[22539,125122,125124],{"id":125123},"_7625-账户","7.6.2.5 账户",[19,125126,125127],{},[30,125128,125129],{},"\u002Froot：",[19,125131,125132],{},"系统管理员的用户主目录",[19,125134,125135,253],{},[30,125136,125137],{},"\u002Fhome",[19,125139,125140],{},"用户的主目录，以用户的账号命名的",[19,125142,125143,253],{},[30,125144,125145],{},"\u002Fusr",[19,125147,125148],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125150,125151],{},[30,125152,125153],{},"\u002Fusr\u002Fbin：",[19,125155,125156],{},"系统用户使用的应用程序与指令",[19,125158,125159],{},[30,125160,125161],{},"\u002Fusr\u002Fsbin：",[19,125163,125164],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125166,125167],{},[30,125168,125169],{},"\u002Fusr\u002Fsrc：",[19,125171,125172],{},"内核源代码默认的放置目录",[22539,125174,125176],{"id":125175},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125178,125179],{},[30,125180,125181],{},"\u002Fvar：",[19,125183,125184],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125186,125187],{},[30,125188,125189],{},"\u002Fproc:",[19,125191,125192,125193,125196],{},"管理 ",[30,125194,125195],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22539,125198,125200],{"id":125199},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125202,125203],{},[30,125204,125205],{},"\u002Fopt:",[19,125207,125208],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125210,125211],{},[30,125212,125213],{},"\u002Fsrv:",[19,125215,125216],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[62,125218,125220],{"id":125219},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125222,125223],{},[23,125224],{"alt":122,"src":125225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125227,125228],{},"windows-->linux:",[19,125230,125231],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125233,125234],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125236,125237],{},"linux传输文件到windows",[19,125239,125240],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[62,125242,125244],{"id":125243},"_764-易忘知识","7.6.4 易忘知识",[19,125246,125247],{},"操作系统内核查看",[117,125249,125250],{"className":117825,"code":121819,"language":117827,"meta":122,"style":122},[124,125251,125252],{"__ignoreMap":122},[127,125253,125254,125256],{"class":129,"line":130},[127,125255,70737],{"class":143},[127,125257,121828],{"class":154},[19,125259,125260],{},[23,125261],{"alt":122,"src":125262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125264,125265],{},[23,125266],{"alt":122,"src":125267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[117,125269,125271],{"className":117825,"code":125270,"language":117827,"meta":122,"style":122},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[124,125272,125273,125285],{"__ignoreMap":122},[127,125274,125275,125277,125280,125283],{"class":129,"line":130},[127,125276,122036],{"class":143},[127,125278,125279],{"class":781}," mvtest",[127,125281,125282],{"class":781}," mvtest2",[127,125284,3216],{"class":147},[127,125286,125287],{"class":129,"line":137},[127,125288,125289],{"class":143},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125291,125292],{},[23,125293],{"alt":122,"src":125294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125296,125297],{},[23,125298],{"alt":122,"src":125299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125301,125302,125303,125306],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[124,125304,125305],{},"du -a"," 可以快速查看磁盘使用细节。",[62,125308,125310],{"id":125309},"_765-vim","7.6.5 Vim",[19,125312,125313],{},[23,125314],{"alt":122,"src":125315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125317,125318],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125320,125321],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125323,125324],{},[30,125325,125326],{},"1.命令模式：",[19,125328,125329],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125331,125332],{},"x 删除当前光标所在处的字符",[19,125334,125335],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125337,125338],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125340,125341],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125343,125344],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125346,125347],{},"dd 剪切当前行",[19,125349,125350],{},"yy 复制当前行",[19,125352,125353],{},"p 粘贴剪贴板内容到光标下方",[19,125355,125356],{},"P 粘贴剪贴板内容到光标上方",[19,125358,125359],{},"u 撤销上一次操作",[19,125361,125362],{},"ctrl+r 重做上一次操作",[19,125364,125365,125367],{},[1469,125366],{}," 保存文件",[19,125369,125370,125372],{},[1319,125371],{}," 退出Vim编辑器",[19,125374,125375,125377],{},[1319,125376],{},"! 强制退出Vim编辑器，不保存修改",[19,125379,125380],{},[30,125381,125382],{},"2.输入模式：",[19,125384,125385],{},[23,125386],{"alt":122,"src":125387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125389,125390],{},[30,125391,125392],{},"3.底线命令模式：",[19,125394,125395],{},[23,125396],{"alt":122,"src":125397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125399,125400],{},"按下esc可以退出底线命令模式",[62,125402,125404],{"id":125403},"_766-apt","7.6.6 apt",[19,125406,125407],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[62,125409,125411],{"id":125410},"_767-home与root的区别","7.6.7 home与root的区别",[19,125413,125414],{},[23,125415],{"alt":122,"src":125416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125418,125419],{},[23,125420],{"alt":122,"src":125421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125423,125424],{},[23,125425],{"alt":122,"src":125426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125428,125429],{},[23,125430],{"alt":122,"src":125431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[62,125433,125435],{"id":125434},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125437,125438],{},[457,125439,125440],{"href":125440,"rel":125441},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24405],[632,125443,125444,125447],{},[635,125445,125446],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[635,125448,125449],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125451,125452],{},[23,125453],{"alt":122,"src":125454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125456,125457],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125459,125460],{},[23,125461],{"alt":122,"src":125462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[117,125464,125466],{"className":121345,"code":125465,"language":121347,"meta":121348,"style":122},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[124,125467,125468,125473],{"__ignoreMap":122},[127,125469,125470],{"class":129,"line":130},[127,125471,125472],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[127,125474,125475],{"class":129,"line":137},[127,125476,125477],{},".\u002Fpycharm.sh\n",[19,125479,125480],{},"3️⃣创建.desktop文件",[19,125482,125483],{},[30,125484,125485],{},"原理：",[1681,125487,125488,125498],{},[635,125489,125490,125491,125497],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[30,125492,125493,125496],{},[124,125494,125495],{},".desktop"," 文件"," 来识别应用。",[635,125499,125500,125502,125503],{},[124,125501,125495],{}," 文件相当于一个“应用注册表”，告诉系统：",[1681,125504,125505,125508,125511,125514,125517],{},[635,125506,125507],{},"应用名字（Name）",[635,125509,125510],{},"图标（Icon）",[635,125512,125513],{},"执行命令（Exec）",[635,125515,125516],{},"分类（Categories）",[635,125518,125519],{},"是否需要终端（Terminal）",[117,125521,125523],{"className":121345,"code":125522,"language":121347,"meta":121348,"style":122},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[124,125524,125525,125530],{"__ignoreMap":122},[127,125526,125527],{"class":129,"line":130},[127,125528,125529],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[127,125531,125532],{"class":129,"line":137},[127,125533,125534],{},"nano pycharm.desktop\n",[19,125536,125537],{},"nano是一个命令行下的编辑器，也可以使用vim",[117,125539,125541],{"className":121345,"code":125540,"language":121347,"meta":121348,"style":122},"[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",[124,125542,125543,125548,125553,125558,125563,125568,125573,125578,125583,125588],{"__ignoreMap":122},[127,125544,125545],{"class":129,"line":130},[127,125546,125547],{},"[Desktop Entry]\n",[127,125549,125550],{"class":129,"line":137},[127,125551,125552],{},"Version=1.0\n",[127,125554,125555],{"class":129,"line":151},[127,125556,125557],{},"Type=Application\n",[127,125559,125560],{"class":129,"line":167},[127,125561,125562],{},"Name=PyCharm\n",[127,125564,125565],{"class":129,"line":415},[127,125566,125567],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[127,125569,125570],{"class":129,"line":421},[127,125571,125572],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[127,125574,125575],{"class":129,"line":1766},[127,125576,125577],{},"Comment=JetBrains PyCharm IDE\n",[127,125579,125580],{"class":129,"line":1856},[127,125581,125582],{},"Categories=Development;IDE;\n",[127,125584,125585],{"class":129,"line":1862},[127,125586,125587],{},"Terminal=false\n",[127,125589,125590],{"class":129,"line":1874},[127,125591,125592],{},"StartupWMClass=jetbrains-pycharm\n",[1681,125594,125595,125601,125607,125613],{},[635,125596,125597,125600],{},[124,125598,125599],{},"Exec"," → 点击图标时执行的命令",[635,125602,125603,125606],{},[124,125604,125605],{},"Icon"," → 显示在菜单和桌面上的图标",[635,125608,125609,125612],{},[124,125610,125611],{},"Terminal=false"," → 不打开终端",[635,125614,125615,125618],{},[124,125616,125617],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125620,125621,125622],"blockquote",{},[19,125623,125624,125625,125627,125628],{},"可以理解成 ",[124,125626,125495],{}," 文件是 Linux 的 ",[30,125629,125630],{},"快捷方式配置文件",[19,125632,125633],{},"4️⃣设置可执行权限",[117,125635,125637],{"className":121345,"code":125636,"language":121347,"meta":121348,"style":122},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[124,125638,125639],{"__ignoreMap":122},[127,125640,125641],{"class":129,"line":130},[127,125642,125636],{},[19,125644,125645],{},"5️⃣桌面图标启动的话如下：",[117,125647,125649],{"className":121345,"code":125648,"language":121347,"meta":121348,"style":122},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[124,125650,125651,125656],{"__ignoreMap":122},[127,125652,125653],{"class":129,"line":130},[127,125654,125655],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[127,125657,125658],{"class":129,"line":137},[127,125659,125660],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[632,125662,125663],{"start":151},[635,125664,125665],{},"下载Appimage文件实现软件的安装",[19,125667,125668],{},"1️⃣先下载appimage",[19,125670,125671],{},[457,125672,125673],{"href":125673,"rel":125674},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24405],[19,125676,125677],{},[23,125678],{"alt":122,"src":125679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125681,125682],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125684,125685],{},[23,125686],{"alt":122,"src":125687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125689,125690],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125692,125693],{},[23,125694],{"alt":122,"src":125695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125697,125698],{},[23,125699],{"alt":122,"src":125700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125702,125703,125704,125707],{},"3️⃣给他们放在",[124,125705,125706],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125709,125710],{},"4️⃣给软件执行权限",[117,125712,125714],{"className":121345,"code":125713,"language":121347,"meta":121348,"style":122},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[124,125715,125716,125721],{"__ignoreMap":122},[127,125717,125718],{"class":129,"line":130},[127,125719,125720],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[127,125722,125723],{"class":129,"line":137},[127,125724,125725],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125727,125728],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[117,125730,125732],{"className":117825,"code":125731,"language":117827,"meta":122,"style":122},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[124,125733,125734,125741,125748,125754],{"__ignoreMap":122},[127,125735,125736,125738],{"class":129,"line":130},[127,125737,101805],{"class":154},[127,125739,125740],{"class":781}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[127,125742,125743,125745],{"class":129,"line":137},[127,125744,101812],{"class":143},[127,125746,125747],{"class":781}," .\u002Fqqmusic.desktop\n",[127,125749,125750,125752],{"class":129,"line":151},[127,125751,124796],{"class":143},[127,125753,125747],{"class":781},[127,125755,125756,125758,125760,125762],{"class":129,"line":167},[127,125757,25117],{"class":143},[127,125759,25120],{"class":781},[127,125761,123662],{"class":781},[127,125763,125747],{"class":781},[19,125765,125766,125768],{},[124,125767,101812],{},"：一个 Linux 命令，主要功能是：",[1681,125770,125771,125774],{},[635,125772,125773],{},"如果文件不存在，就创建一个新的空文件",[635,125775,125776],{},"如果文件已存在，就更新该文件的最后修改时间",[117,125778,125780],{"className":121345,"code":125779,"language":121347,"meta":121348,"style":122},"[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",[124,125781,125782,125786,125791,125796,125801,125805,125810],{"__ignoreMap":122},[127,125783,125784],{"class":129,"line":130},[127,125785,125547],{},[127,125787,125788],{"class":129,"line":137},[127,125789,125790],{},"Name=QQ音乐\n",[127,125792,125793],{"class":129,"line":151},[127,125794,125795],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[127,125797,125798],{"class":129,"line":167},[127,125799,125800],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[127,125802,125803],{"class":129,"line":415},[127,125804,125557],{},[127,125806,125807],{"class":129,"line":421},[127,125808,125809],{},"Categories=Audio;Music;Player;\n",[127,125811,125812],{"class":129,"line":1766},[127,125813,125814],{},"Comment=QQ Music Client for Linux\n",[19,125816,125817],{},"将文件复制进去",[19,125819,125820],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125822,125823],{},[23,125824],{"alt":122,"src":125825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125827,125828],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125830,125831],{},[23,125832],{"alt":122,"src":125833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125835,125836,125837,125840,125841,125844],{},"如果你用的不是KDE，那么也可以直接修改",[124,125838,125839],{},"qqmuic.desktop","：在exec的末尾加上",[124,125842,125843],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[117,125846,125848],{"className":121345,"code":125847,"language":121347,"meta":121348,"style":122},"[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",[124,125849,125850,125854,125858,125863,125867,125871,125875],{"__ignoreMap":122},[127,125851,125852],{"class":129,"line":130},[127,125853,125547],{},[127,125855,125856],{"class":129,"line":137},[127,125857,125790],{},[127,125859,125860],{"class":129,"line":151},[127,125861,125862],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[127,125864,125865],{"class":129,"line":167},[127,125866,125800],{},[127,125868,125869],{"class":129,"line":415},[127,125870,125557],{},[127,125872,125873],{"class":129,"line":421},[127,125874,125809],{},[127,125876,125877],{"class":129,"line":1766},[127,125878,125814],{},[19,125880,125881],{},[23,125882],{"alt":122,"src":125883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125885,125886],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[117,125888,125890],{"className":121345,"code":125889,"language":121347,"meta":121348,"style":122},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[124,125891,125892],{"__ignoreMap":122},[127,125893,125894],{"class":129,"line":130},[127,125895,125889],{},[632,125897,125898],{"start":167},[635,125899,125900],{},"去Flathub上安装软件",[19,125902,125903],{},[457,125904,125905],{"href":125905,"rel":125906},"https:\u002F\u002Fflathub.org\u002F",[24405],[19,125908,125909],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125911,125912],{},[23,125913],{"alt":122,"src":125914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[117,125916,125918],{"className":121345,"code":125917,"language":121347,"meta":121348,"style":122},"flatpak install flathub com.obsproject.Studio\n",[124,125919,125920],{"__ignoreMap":122},[127,125921,125922],{"class":129,"line":130},[127,125923,125917],{},[19,125925,125926],{},[23,125927],{"alt":122,"src":125928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125930,125931],{},"2️⃣运行软件",[19,125933,125934],{},"a.官方方式：",[19,125936,125937],{},[23,125938],{"alt":122,"src":125939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[117,125941,125942],{"className":121345,"code":125917,"language":121347,"meta":121348,"style":122},[124,125943,125944],{"__ignoreMap":122},[127,125945,125946],{"class":129,"line":130},[127,125947,125917],{},[19,125949,125950],{},"b.当普通软件运行：",[19,125952,125953],{},[23,125954],{"alt":122,"src":125955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125957,125958],{},[23,125959],{"alt":122,"src":125960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[575,125962,125963],{},"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":122,"searchDepth":137,"depth":137,"links":125965},[125966,125967,125972,125973,125979,125980],{"id":122698,"depth":137,"text":122699},{"id":123040,"depth":137,"text":123041,"children":125968},[125969,125970,125971],{"id":123044,"depth":151,"text":123045},{"id":123111,"depth":151,"text":123112},{"id":123372,"depth":151,"text":123373},{"id":123525,"depth":137,"text":123526},{"id":123763,"depth":137,"text":123764,"children":125974},[125975,125976,125977,125978],{"id":123815,"depth":151,"text":123816},{"id":124101,"depth":151,"text":124102},{"id":124372,"depth":151,"text":124373},{"id":124631,"depth":151,"text":124632},{"id":124690,"depth":137,"text":124691},{"id":124991,"depth":137,"text":124992,"children":125981},[125982,125983,125984,125985,125986,125987,125988,125989],{"id":124995,"depth":151,"text":124996},{"id":125007,"depth":151,"text":125008},{"id":125219,"depth":151,"text":125220},{"id":125243,"depth":151,"text":125244},{"id":125309,"depth":151,"text":125310},{"id":125403,"depth":151,"text":125404},{"id":125410,"depth":151,"text":125411},{"id":125434,"depth":151,"text":125435},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122690,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125996,"title":125997,"body":125998,"description":603,"extension":604,"meta":126002,"navigation":606,"path":126003,"seo":126004,"stem":126005,"__hash__":126006},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125999,"toc":126000},[],{"title":122,"searchDepth":137,"depth":137,"links":126001},[],{"category":30803},"\u002Fwiki\u002F2025-01-27-linux",{"title":125997,"description":603},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126008,"title":126009,"body":126010,"description":126014,"extension":604,"meta":126405,"navigation":606,"path":126406,"seo":126407,"stem":126408,"__hash__":126409},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126011,"toc":126403},[126012,126015,126019,126036,126039,126092,126096,126098,126138,126147,126151,126154,126395,126400],[19,126013,126014],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126016,126018],{"id":126017},"_1ubuntu环境配置","1.Ubuntu环境配置",[632,126020,126021,126024,126027,126030,126033],{},[635,126022,126023],{},"ubuntu环境换源",[635,126025,126026],{},"安装cuda",[635,126028,126029],{},"安装miniconda",[635,126031,126032],{},"安装pytorch",[635,126034,126035],{},"安装genesis",[19,126037,126038],{},"参考链接：",[117,126040,126042],{"className":24362,"code":126041,"language":24364,"meta":122,"style":122},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[124,126043,126044],{"__ignoreMap":122},[127,126045,126046,126049,126052,126055,126057,126060,126063,126065,126068,126071,126073,126076,126079,126081,126084,126087,126089],{"class":129,"line":130},[127,126047,126048],{"class":143},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[127,126050,126051],{"class":781},"=blogdetail",[127,126053,126054],{"class":147},"&sharetype",[127,126056,725],{"class":290},[127,126058,126059],{"class":781},"blogdetail",[127,126061,126062],{"class":147},"&sharerId",[127,126064,725],{"class":290},[127,126066,126067],{"class":781},"144728092",[127,126069,126070],{"class":147},"&sharerefer",[127,126072,725],{"class":290},[127,126074,126075],{"class":781},"PC",[127,126077,126078],{"class":147},"&sharesource",[127,126080,725],{"class":290},[127,126082,126083],{"class":781},"qq_69379513",[127,126085,126086],{"class":147},"&sharefrom",[127,126088,725],{"class":290},[127,126090,126091],{"class":781},"from_link\n",[10,126093,126095],{"id":126094},"_2genesis-报错issue","2.Genesis 报错issue",[19,126097,126038],{},[117,126099,126100],{"className":24362,"code":126041,"language":24364,"meta":122,"style":122},[124,126101,126102],{"__ignoreMap":122},[127,126103,126104,126106,126108,126110,126112,126114,126116,126118,126120,126122,126124,126126,126128,126130,126132,126134,126136],{"class":129,"line":130},[127,126105,126048],{"class":143},[127,126107,126051],{"class":781},[127,126109,126054],{"class":147},[127,126111,725],{"class":290},[127,126113,126059],{"class":781},[127,126115,126062],{"class":147},[127,126117,725],{"class":290},[127,126119,126067],{"class":781},[127,126121,126070],{"class":147},[127,126123,725],{"class":290},[127,126125,126075],{"class":781},[127,126127,126078],{"class":147},[127,126129,725],{"class":290},[127,126131,126083],{"class":781},[127,126133,126086],{"class":147},[127,126135,725],{"class":290},[127,126137,126091],{"class":781},[117,126139,126141],{"className":24362,"code":126140,"language":24364,"meta":122,"style":122},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[124,126142,126143],{"__ignoreMap":122},[127,126144,126145],{"class":129,"line":130},[127,126146,126140],{"class":143},[10,126148,126150],{"id":126149},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126152,126153],{},"hello_robot.py",[117,126155,126157],{"className":30918,"code":126156,"language":30920,"meta":122,"style":122},"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",[124,126158,126159,126165,126180,126184,126196,126208,126212,126225,126229,126248,126258,126268,126282,126286,126290,126295,126299,126309,126316,126330,126337,126347,126352,126356,126374,126379,126383,126390],{"__ignoreMap":122},[127,126160,126161,126163],{"class":129,"line":130},[127,126162,30932],{"class":290},[127,126164,45845],{"class":147},[127,126166,126167,126170,126173,126175,126177],{"class":129,"line":137},[127,126168,126169],{"class":147},"os.environ[",[127,126171,126172],{"class":781},"'PYOPENGL_PLATFORM'",[127,126174,4985],{"class":147},[127,126176,725],{"class":290},[127,126178,126179],{"class":781}," 'glx'\n",[127,126181,126182],{"class":129,"line":151},[127,126183,2942],{"emptyLinePlaceholder":606},[127,126185,126186,126188,126191,126193],{"class":129,"line":167},[127,126187,30932],{"class":290},[127,126189,126190],{"class":147}," genesis ",[127,126192,31923],{"class":290},[127,126194,126195],{"class":147}," gs\n",[127,126197,126198,126200,126203,126205],{"class":129,"line":415},[127,126199,31277],{"class":290},[127,126201,126202],{"class":147}," pynput ",[127,126204,30932],{"class":290},[127,126206,126207],{"class":147}," keyboard\n",[127,126209,126210],{"class":129,"line":421},[127,126211,2942],{"emptyLinePlaceholder":606},[127,126213,126214,126217,126220,126222],{"class":129,"line":1766},[127,126215,126216],{"class":147},"gs.init(",[127,126218,126219],{"class":5758},"backend",[127,126221,725],{"class":290},[127,126223,126224],{"class":147},"gs.gpu)\n",[127,126226,126227],{"class":129,"line":1856},[127,126228,2942],{"emptyLinePlaceholder":606},[127,126230,126231,126234,126236,126239,126242,126244,126246],{"class":129,"line":1862},[127,126232,126233],{"class":147},"scene ",[127,126235,725],{"class":290},[127,126237,126238],{"class":147}," gs.Scene(",[127,126240,126241],{"class":5758},"show_viewer",[127,126243,725],{"class":290},[127,126245,32016],{"class":154},[127,126247,687],{"class":147},[127,126249,126250,126253,126255],{"class":129,"line":1874},[127,126251,126252],{"class":147},"plane ",[127,126254,725],{"class":290},[127,126256,126257],{"class":147}," scene.add_entity(gs.morphs.Plane())\n",[127,126259,126260,126263,126265],{"class":129,"line":2155},[127,126261,126262],{"class":147},"franka ",[127,126264,725],{"class":290},[127,126266,126267],{"class":147}," scene.add_entity(\n",[127,126269,126270,126273,126275,126277,126280],{"class":129,"line":2160},[127,126271,126272],{"class":147},"    gs.morphs.MJCF(",[127,126274,45894],{"class":5758},[127,126276,725],{"class":290},[127,126278,126279],{"class":781},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[127,126281,38587],{"class":147},[127,126283,126284],{"class":129,"line":2166},[127,126285,687],{"class":147},[127,126287,126288],{"class":129,"line":2171},[127,126289,2942],{"emptyLinePlaceholder":606},[127,126291,126292],{"class":129,"line":2185},[127,126293,126294],{"class":147},"scene.build()\n",[127,126296,126297],{"class":129,"line":2190},[127,126298,2942],{"emptyLinePlaceholder":606},[127,126300,126301,126303,126306],{"class":129,"line":2196},[127,126302,32487],{"class":290},[127,126304,126305],{"class":143}," on_press",[127,126307,126308],{"class":147},"(key):\n",[127,126310,126311,126314],{"class":129,"line":2217},[127,126312,126313],{"class":290},"    try",[127,126315,4281],{"class":147},[127,126317,126318,126320,126323,126325,126328],{"class":129,"line":2222},[127,126319,3039],{"class":290},[127,126321,126322],{"class":147}," key.char ",[127,126324,3491],{"class":290},[127,126326,126327],{"class":781}," 'q'",[127,126329,4281],{"class":147},[127,126331,126332,126334],{"class":129,"line":2236},[127,126333,16273],{"class":290},[127,126335,126336],{"class":154}," False\n",[127,126338,126339,126342,126345],{"class":129,"line":2241},[127,126340,126341],{"class":290},"    except",[127,126343,126344],{"class":154}," AttributeError",[127,126346,4281],{"class":147},[127,126348,126349],{"class":129,"line":2270},[127,126350,126351],{"class":290},"        pass\n",[127,126353,126354],{"class":129,"line":2275},[127,126355,2942],{"emptyLinePlaceholder":606},[127,126357,126358,126361,126363,126366,126369,126371],{"class":129,"line":2292},[127,126359,126360],{"class":147},"listener ",[127,126362,725],{"class":290},[127,126364,126365],{"class":147}," keyboard.Listener(",[127,126367,126368],{"class":5758},"on_press",[127,126370,725],{"class":290},[127,126372,126373],{"class":147},"on_press)\n",[127,126375,126376],{"class":129,"line":2297},[127,126377,126378],{"class":147},"listener.start()\n",[127,126380,126381],{"class":129,"line":2302},[127,126382,2942],{"emptyLinePlaceholder":606},[127,126384,126385,126387],{"class":129,"line":2307},[127,126386,109192],{"class":290},[127,126388,126389],{"class":147}," listener.running:\n",[127,126391,126392],{"class":129,"line":2321},[127,126393,126394],{"class":147},"    scene.step()\n",[19,126396,126397],{},[23,126398],{"alt":122,"src":126399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[575,126401,126402],{},"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":122,"searchDepth":137,"depth":137,"links":126404},[],{"category":23919},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126009,"description":126014},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126411,"title":126412,"body":126413,"description":603,"extension":604,"meta":126428,"navigation":606,"path":126429,"seo":126430,"stem":126431,"__hash__":126432},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126414,"toc":126425},[126415,126418,126422],[10,126416,126412],{"id":126417},"_1-基础知识",[14,126419,126421],{"id":126420},"_11-js的组成","1.1 js的组成",[19,126423,126424],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":122,"searchDepth":137,"depth":137,"links":126426},[126427],{"id":126420,"depth":137,"text":126421},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126412,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126434,"title":126435,"body":126436,"description":603,"extension":604,"meta":126575,"navigation":606,"path":126576,"seo":126577,"stem":126578,"__hash__":126579},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126437,"toc":126563},[126438,126441,126445,126448,126452,126462,126466,126469,126472,126475,126479,126486,126492,126496,126502,126513,126517,126520,126524,126527,126531,126534,126538,126541,126545,126548,126551,126554,126557,126560],[10,126439,126435],{"id":126440},"_2-vscode必备内容",[14,126442,126444],{"id":126443},"_21-标签分类","2.1 标签分类",[19,126446,126447],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126449,126451],{"id":126450},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126453,126454,126455,126457,126458,126461],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[124,126456,902],{}," 然后按 ",[124,126459,126460],{},"Tab","，快速自动生成基本结构。",[14,126463,126465],{"id":126464},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126467,126468],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126470,126471],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126473,126474],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126476,126478],{"id":126477},"_24-视图缩放","2.4 视图缩放",[19,126480,126481,126482,126485],{},"缩放视图 ",[124,126483,126484],{},"ctrl+"," 可实现代码增大。",[19,126487,126488,126491],{},[124,126489,126490],{},"ctrl-"," 可实现代码减小。",[14,126493,126495],{"id":126494},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126497,126498,126499,28925],{},"VSCode 新建文件快捷键为 ",[124,126500,126501],{},"ctrl+N",[19,126503,126504,126505,126508,126509,126512],{},"保存快捷键为 ",[124,126506,126507],{},"ctrl+S","，将文本保存为 ",[124,126510,126511],{},".html"," 文件。",[14,126514,126516],{"id":126515},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126518,126519],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126521,126523],{"id":126522},"_27-vscode-icons","2.7 vscode-icons",[19,126525,126526],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126528,126530],{"id":126529},"_28-easy-less","2.8 Easy LESS",[19,126532,126533],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126535,126537],{"id":126536},"_29-会了吧插件","2.9 会了吧插件",[19,126539,126540],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126542,126544],{"id":126543},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126546,126547],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126549,126550],{},"②选定多个相同的单词:ctrl+D",[19,126552,126553],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126555,126556],{},"④全局替换某些单词:ctrl+h",[19,126558,126559],{},"⑤快速定位到某一行:ctrl+g",[19,126561,126562],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":122,"searchDepth":137,"depth":137,"links":126564},[126565,126566,126567,126568,126569,126570,126571,126572,126573,126574],{"id":126443,"depth":137,"text":126444},{"id":126450,"depth":137,"text":126451},{"id":126464,"depth":137,"text":126465},{"id":126477,"depth":137,"text":126478},{"id":126494,"depth":137,"text":126495},{"id":126515,"depth":137,"text":126516},{"id":126522,"depth":137,"text":126523},{"id":126529,"depth":137,"text":126530},{"id":126536,"depth":137,"text":126537},{"id":126543,"depth":137,"text":126544},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126435,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126581,"title":126582,"body":126583,"description":603,"extension":604,"meta":126742,"navigation":606,"path":126743,"seo":126744,"stem":126745,"__hash__":126746},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126584,"toc":126734},[126585,126588,126592,126602,126608,126614,126618,126627,126631,126636,126639,126642,126646,126649,126659,126668,126677,126686,126696,126703,126708,126713,126726],[10,126586,126582],{"id":126587},"_3-html文本与容器标签",[14,126589,126591],{"id":126590},"_31-标题标签","3.1 标题标签",[19,126593,126594,126597,126598,126601],{},[124,126595,126596],{},"\u003Ch1>","我是一级标签",[124,126599,126600],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126603,126604,126597,126606],{},[124,126605,126596],{},[124,126607,126600],{},[19,126609,123864,126610,126613],{},[124,126611,126612],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126615,126617],{"id":126616},"_32-段落标签","3.2 段落标签",[19,126619,126620,126623,126624],{},[124,126621,126622],{},"\u003Cp>","....",[124,126625,126626],{},"\u003C\u002Fp>",[14,126628,126630],{"id":126629},"_33-换行标签","3.3 换行标签",[19,126632,126633],{},[124,126634,126635],{},"\u003Cbr \u002F>",[19,126637,126638],{},"具有强制换行的作用",[19,126640,126641],{},"单标签",[14,126643,126645],{"id":126644},"_34-文本格式化标签","3.4 文本格式化标签",[19,126647,126648],{},"提供粗体、斜体和下划线等效果",[19,126650,126651,126652,83068,126655,126658],{},"加粗：",[124,126653,126654],{},"\u003Cstrong>...\u003C\u002Fstrong>",[124,126656,126657],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126660,126661,126662,83068,126665,126658],{},"斜体：",[124,126663,126664],{},"\u003Cem>...\u003C\u002Fem>",[124,126666,126667],{},"\u003Ci>...\u003C\u002Fi>",[19,126669,126670,126671,83068,126674,126658],{},"删除线：",[124,126672,126673],{},"\u003Cdel>...\u003C\u002Fdel>",[124,126675,126676],{},"\u003Cs>...\u003C\u002Fs>",[19,126678,126679,126680,83068,126683,126658],{},"下划线：",[124,126681,126682],{},"\u003Cins>...\u003C\u002Fins>",[124,126684,126685],{},"\u003Cu>...\u003C\u002Fu>",[14,126687,126689,126690,18951,126693,103222],{"id":126688},"_35-div和span标签","3.5 ",[124,126691,126692],{},"\u003Cdiv>",[124,126694,126695],{},"\u003Cspan>",[19,126697,126698,101547,126700,126702],{},[124,126699,126692],{},[124,126701,126695],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126704,126705],{},[124,126706,126707],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126709,126710],{},[124,126711,126712],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126714,126715,126716,126718,126719,126721,126722,126725],{},"两者特点：①",[124,126717,126692],{}," 标签用来布局，但一行通常只放一个 ",[124,126720,126692],{},"。可以理解为一个大盒子，独占一行，在 ",[124,126723,126724],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126727,77778,126728,126730,126731,126733],{},[124,126729,126695],{}," 标签也可用于布局，一行可以放多个 ",[124,126732,126695],{},"，可理解为小盒子。",{"title":122,"searchDepth":137,"depth":137,"links":126735},[126736,126737,126738,126739,126740],{"id":126590,"depth":137,"text":126591},{"id":126616,"depth":137,"text":126617},{"id":126629,"depth":137,"text":126630},{"id":126644,"depth":137,"text":126645},{"id":126688,"depth":137,"text":126741},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126582,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126748,"title":126749,"body":126750,"description":603,"extension":604,"meta":126946,"navigation":606,"path":126947,"seo":126948,"stem":126949,"__hash__":126950},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126751,"toc":126938},[126752,126755,126759,126762,126768,126775,126781,126787,126790,126793,126796,126799,126802,126805,126808,126812,126815,126818,126821,126827,126833,126839,126846,126850,126856,126862,126865,126868,126874,126880,126886,126889,126892,126896,126899,126909,126915,126919,126928,126932,126935],[10,126753,126749],{"id":126754},"_4-html图像与链接",[14,126756,126758],{"id":126757},"_41-图像标签","4.1 图像标签",[19,126760,126761],{},"（1）标签",[19,126763,126764,126767],{},[124,126765,126766],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126769,126770,126771,126774],{},"src是",[124,126772,126773],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126776,126777,126778],{},"alt:文本，替换文本。图像不能显示的文字 ",[124,126779,126780],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126782,126783,126784],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[124,126785,126786],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126788,126789],{},"width:像素，设置图像的宽度",[19,126791,126792],{},"height:像素，设置图像的高度",[19,126794,126795],{},"border：像素，设置图像的边框粗细",[19,126797,126798],{},"（2）图像标签属性的注意点：",[19,126800,126801],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126803,126804],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126806,126807],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126809,126811],{"id":126810},"_42-路径注意要点","4.2 路径注意要点：",[19,126813,126814],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126816,126817],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126819,126820],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126822,126823,126824],{},"①同一级路径：图像文件位于HTML文件同一级，如",[124,126825,126826],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126828,126829,126830],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[124,126831,126832],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126834,126835,126836],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[124,126837,126838],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126840,126841,126842,926],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[457,126843,126844],{"href":126844,"rel":126845},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24405],[14,126847,126849],{"id":126848},"_43-超链接标签","4.3 超链接标签",[19,126851,126852,126855],{},[124,126853,126854],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126857,126858,126859],{},"①语法格式：",[124,126860,126861],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126863,126864],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126866,126867],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126869,126870,126871],{},"③链接分类：外部链接：",[124,126872,126873],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126875,126876,126877],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[124,126878,126879],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126881,126882,126883],{},"空链接：如果当时没有确定链接目标时，",[124,126884,126885],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126887,126888],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126890,126891],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126893,126895],{"id":126894},"_44-锚点链接","4.4 锚点链接",[19,126897,126898],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126900,126901,126902,126905,126906],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[124,126903,126904],{},"\u003Ca href=\"#two\">","第二级",[124,126907,126908],{},"\u003C\u002Fa>",[19,126910,126911,126912],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[124,126913,126914],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126916,126918],{"id":126917},"_45-注释标签","4.5 注释标签",[19,126920,126921,126924,126925],{},[124,126922,126923],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[124,126926,126927],{},"ctrl+\u002F",[14,126929,126931],{"id":126930},"_46-特殊字符","4.6 特殊字符",[19,126933,126934],{},"可以实现添加多个空格",[23,126936],{"style":25,"src":126937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":122,"searchDepth":137,"depth":137,"links":126939},[126940,126941,126942,126943,126944,126945],{"id":126757,"depth":137,"text":126758},{"id":126810,"depth":137,"text":126811},{"id":126848,"depth":137,"text":126849},{"id":126894,"depth":137,"text":126895},{"id":126917,"depth":137,"text":126918},{"id":126930,"depth":137,"text":126931},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126749,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126952,"title":126953,"body":126954,"description":603,"extension":604,"meta":127244,"navigation":606,"path":127245,"seo":127246,"stem":127247,"__hash__":127248},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126955,"toc":127235},[126956,126959,126963,126966,126969,126972,126975,126978,126981,126984,126987,126990,127010,127016,127020,127023,127026,127029,127032,127035,127038,127042,127045,127048,127051,127054,127067,127072,127075,127078,127091,127094,127097,127100,127103,127106,127110,127113,127120,127123,127126,127129,127132,127135,127141,127144,127147,127153,127156,127159,127162,127167,127170,127173,127187,127194,127197,127200,127207,127216,127219,127222,127225,127229,127232],[10,126957,126953],{"id":126958},"_5-html表格列表与表单",[14,126960,126962],{"id":126961},"_51-表格标签","5.1 表格标签",[19,126964,126965],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126967,126968],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126970,126971],{},"②表格基本语法：",[23,126973],{"style":25,"src":126974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126976,126977],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[23,126979],{"style":25,"src":126980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126982,126983],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[23,126985],{"style":25,"src":126986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126988,126989],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126991,126992,126995,126996,126998,126999,127002,127003,127005,127006,127009],{},[124,126993,126994],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[124,126997,126994],{},"内部必须拥有",[124,127000,127001],{},"\u003Ctr>","标签，一般位于第一行，",[124,127004,126994],{},"比",[124,127007,127008],{},"\u003Cth>","范围广",[19,127011,127012,127015],{},[124,127013,127014],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127017,127019],{"id":127018},"_52-合并单元格","5.2 合并单元格",[19,127021,127022],{},"（1）合并单元格方式：",[19,127024,127025],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127027,127028],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127030,127031],{},"（2）目标单元格：",[19,127033,127034],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127036,127037],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127039,127041],{"id":127040},"_53-列表标签","5.3 列表标签",[19,127043,127044],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127046,127047],{},"①无序列表：",[23,127049],{"style":25,"src":127050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127052,127053],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127055,127056,127059,127060,127063,127064,127066],{},[124,127057,127058],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[124,127061,127062],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[124,127065,127058],{},"中输入其他标签或文字是不对的",[19,127068,127069,127071],{},[124,127070,127062],{},"之间相当于一个容器，可以容纳所有元素",[19,127073,127074],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127076,127077],{},"在css中去除前边的小圆点采用如下代码:",[117,127079,127081],{"className":119,"code":127080,"language":121,"meta":122,"style":122},"list-style: none;\n",[124,127082,127083],{"__ignoreMap":122},[127,127084,127085,127088],{"class":129,"line":130},[127,127086,127087],{"class":140},"list-style",[127,127089,127090],{"class":147},": none;\n",[19,127092,127093],{},"②有序列表：",[23,127095],{"style":25,"src":127096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127098,127099],{},"③自定义列表：",[23,127101],{"style":25,"src":127102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[23,127104],{"style":25,"src":127105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127107,127109],{"id":127108},"_54-表单标签","5.4 表单标签",[19,127111,127112],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127114,127115,127116,127119],{},"（1）表单域：包含单元素的区域，",[124,127117,127118],{},"\u003Cform>","标签可以实现信息的收集和传递。",[23,127121],{"style":25,"src":127122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127124,127125],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127127,127128],{},"表单元素提交必须有name属性",[19,127130,127131],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127133,127134],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127136,77755,127137,127140],{},[124,127138,127139],{},"\u003Cinput>","输入表单元素",[23,127142],{"style":25,"src":127143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[23,127145],{"style":25,"src":127146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127148,127149,127150],{},"单选按钮：",[124,127151,127152],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[23,127154],{"style":25,"src":127155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127157,127158],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[23,127160],{"style":25,"src":127161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127163,127164,127166],{},[30,127165,93],{}," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127168,127169],{},"②select下拉表单元素：可以节约页面控件",[23,127171],{"style":25,"src":127172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127174,127175,14337,127177,127180,127181,127183,127184,127186],{},[30,127176,32],{},[124,127178,127179],{},"\u003Cselect>","中至少包含一对",[124,127182,103243],{},"；在",[124,127185,103243],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127188,127189,127190,127193],{},"③",[124,127191,127192],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[23,127195],{"style":25,"src":127196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127198,127199],{},"3行20列",[14,127201,127203,127204,103222],{"id":127202},"_55-lable标签","5.5 ",[124,127205,127206],{},"\u003Clable>",[19,127208,127209,127210,127212,127213,127215],{},"它不是表单标签，但常常与表单标签搭配使用，",[124,127211,127206],{},"标签用于绑定一个表单标签，当点击",[124,127214,127206],{},"标签内的文本",[19,127217,127218],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[23,127220],{"style":25,"src":127221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[23,127223],{"style":25,"src":127224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127226,127228],{"id":127227},"_56-实例","5.6 实例",[23,127230],{"style":25,"src":127231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[575,127233,127234],{},"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":122,"searchDepth":137,"depth":137,"links":127236},[127237,127238,127239,127240,127241,127243],{"id":126961,"depth":137,"text":126962},{"id":127018,"depth":137,"text":127019},{"id":127040,"depth":137,"text":127041},{"id":127108,"depth":137,"text":127109},{"id":127202,"depth":137,"text":127242},"5.5 \u003Clable>标签",{"id":127227,"depth":137,"text":127228},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126953,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":4,"title":5,"body":127250,"description":603,"extension":604,"meta":127669,"navigation":606,"path":607,"seo":127670,"stem":609,"__hash__":610},{"type":7,"value":127251,"toc":127644},[127252,127254,127256,127258,127260,127264,127266,127268,127270,127272,127274,127276,127278,127280,127282,127284,127286,127288,127290,127292,127294,127296,127298,127302,127304,127306,127308,127310,127312,127314,127316,127346,127348,127350,127352,127354,127356,127358,127360,127362,127364,127366,127368,127370,127372,127374,127376,127378,127380,127382,127384,127386,127390,127392,127394,127398,127400,127402,127404,127406,127432,127434,127436,127438,127440,127444,127446,127448,127450,127452,127456,127458,127460,127462,127464,127466,127468,127470,127474,127476,127478,127480,127482,127484,127486,127522,127524,127526,127530,127532,127534,127536,127580,127582,127584,127586,127588,127614,127616,127618,127642],[10,127253,5],{"id":12},[14,127255,17],{"id":16},[19,127257,21],{},[23,127259],{"style":25,"src":26},[19,127261,127262],{},[30,127263,32],{},[19,127265,35],{},[19,127267,38],{},[19,127269,41],{},[19,127271,44],{},[23,127273],{"style":25,"src":47},[23,127275],{"style":25,"src":50},[23,127277],{"style":25,"src":53},[14,127279,57],{"id":56},[19,127281,60],{},[62,127283,65],{"id":64},[19,127285,68],{},[19,127287,71],{},[23,127289],{"style":25,"src":74},[62,127291,78],{"id":77},[19,127293,81],{},[19,127295,84],{},[23,127297],{"style":25,"src":87},[19,127299,90,127300,94],{},[30,127301,93],{},[19,127303,97],{},[19,127305,100],{},[19,127307,103],{},[19,127309,106],{},[23,127311],{"style":25,"src":109},[19,127313,112],{},[19,127315,115],{},[117,127317,127318],{"className":119,"code":120,"language":121,"meta":122,"style":122},[124,127319,127320,127324,127332,127342],{"__ignoreMap":122},[127,127321,127322],{"class":129,"line":130},[127,127323,134],{"class":133},[127,127325,127326,127328,127330],{"class":129,"line":137},[127,127327,19],{"class":140},[127,127329,144],{"class":143},[127,127331,148],{"class":147},[127,127333,127334,127336,127338,127340],{"class":129,"line":151},[127,127335,155],{"class":154},[127,127337,158],{"class":147},[127,127339,161],{"class":154},[127,127341,164],{"class":147},[127,127343,127344],{"class":129,"line":167},[127,127345,170],{"class":147},[62,127347,174],{"id":173},[19,127349,177],{},[23,127351],{"style":25,"src":180},[19,127353,183],{},[62,127355,187],{"id":186},[19,127357,190],{},[19,127359,193],{},[23,127361],{"style":25,"src":196},[19,127363,199],{},[19,127365,202],{},[62,127367,206],{"id":205},[19,127369,209],{},[19,127371,212],{},[19,127373,215],{},[62,127375,219],{"id":218},[23,127377],{"style":25,"src":222},[14,127379,226],{"id":225},[19,127381,229],{},[62,127383,233],{"id":232},[19,127385,236],{},[19,127387,127388,241],{},[30,127389,32],{},[62,127391,245],{"id":244},[19,127393,248],{},[19,127395,127396,253],{},[30,127397,93],{},[19,127399,256],{},[19,127401,259],{},[19,127403,262],{},[19,127405,265],{},[117,127407,127408],{"className":119,"code":268,"language":121,"meta":122,"style":122},[124,127409,127410,127416,127428],{"__ignoreMap":122},[127,127411,127412,127414],{"class":129,"line":130},[127,127413,275],{"class":140},[127,127415,148],{"class":147},[127,127417,127418,127420,127422,127424,127426],{"class":129,"line":137},[127,127419,282],{"class":154},[127,127421,158],{"class":147},[127,127423,287],{"class":154},[127,127425,291],{"class":290},[127,127427,164],{"class":147},[127,127429,127430],{"class":129,"line":151},[127,127431,170],{"class":147},[19,127433,300],{},[62,127435,304],{"id":303},[19,127437,307],{},[19,127439,310],{},[19,127441,127442,315],{},[30,127443,32],{},[19,127445,318],{},[19,127447,321],{},[62,127449,325],{"id":324},[19,127451,328],{},[19,127453,127454,253],{},[30,127455,333],{},[19,127457,336],{},[19,127459,339],{},[23,127461],{"style":25,"src":342},[62,127463,346],{"id":345},[23,127465],{"style":25,"src":349},[23,127467],{"style":25,"src":352},[19,127469,355],{},[19,127471,127472,253],{},[30,127473,93],{},[19,127475,362],{},[19,127477,365],{},[19,127479,368],{},[14,127481,372],{"id":371},[62,127483,376],{"id":375},[19,127485,379],{},[117,127487,127488],{"className":119,"code":382,"language":121,"meta":122,"style":122},[124,127489,127490,127494,127500,127510,127514,127518],{"__ignoreMap":122},[127,127491,127492],{"class":129,"line":130},[127,127493,389],{"class":133},[127,127495,127496,127498],{"class":129,"line":137},[127,127497,19],{"class":140},[127,127499,148],{"class":147},[127,127501,127502,127504,127506,127508],{"class":129,"line":151},[127,127503,400],{"class":154},[127,127505,158],{"class":147},[127,127507,405],{"class":154},[127,127509,164],{"class":147},[127,127511,127512],{"class":129,"line":167},[127,127513,412],{"class":133},[127,127515,127516],{"class":129,"line":415},[127,127517,418],{"class":133},[127,127519,127520],{"class":129,"line":421},[127,127521,170],{"class":147},[23,127523],{"style":25,"src":426},[62,127525,430],{"id":429},[19,127527,433,127528,437],{},[30,127529,436],{},[19,127531,440],{},[62,127533,444],{"id":443},[19,127535,447],{},[117,127537,127538],{"className":119,"code":450,"language":121,"meta":122,"style":122},[124,127539,127540,127546,127556,127560,127566,127576],{"__ignoreMap":122},[127,127541,127542,127544],{"class":129,"line":130},[127,127543,457],{"class":140},[127,127545,148],{"class":147},[127,127547,127548,127550,127552,127554],{"class":129,"line":137},[127,127549,464],{"class":154},[127,127551,158],{"class":147},[127,127553,469],{"class":154},[127,127555,164],{"class":147},[127,127557,127558],{"class":129,"line":151},[127,127559,170],{"class":147},[127,127561,127562,127564],{"class":129,"line":167},[127,127563,19],{"class":140},[127,127565,148],{"class":147},[127,127567,127568,127570,127572,127574],{"class":129,"line":415},[127,127569,464],{"class":154},[127,127571,158],{"class":147},[127,127573,490],{"class":154},[127,127575,164],{"class":147},[127,127577,127578],{"class":129,"line":421},[127,127579,170],{"class":147},[62,127581,500],{"id":499},[19,127583,503],{},[19,127585,506],{},[19,127587,509],{},[117,127589,127590],{"className":119,"code":512,"language":121,"meta":122,"style":122},[124,127591,127592,127598,127610],{"__ignoreMap":122},[127,127593,127594,127596],{"class":129,"line":130},[127,127595,19],{"class":140},[127,127597,148],{"class":147},[127,127599,127600,127602,127604,127606,127608],{"class":129,"line":137},[127,127601,525],{"class":154},[127,127603,158],{"class":147},[127,127605,530],{"class":154},[127,127607,533],{"class":290},[127,127609,164],{"class":147},[127,127611,127612],{"class":129,"line":151},[127,127613,170],{"class":147},[62,127615,543],{"id":542},[19,127617,546],{},[117,127619,127620],{"className":119,"code":549,"language":121,"meta":122,"style":122},[124,127621,127622,127628,127638],{"__ignoreMap":122},[127,127623,127624,127626],{"class":129,"line":130},[127,127625,19],{"class":140},[127,127627,148],{"class":147},[127,127629,127630,127632,127634,127636],{"class":129,"line":137},[127,127631,562],{"class":154},[127,127633,158],{"class":147},[127,127635,567],{"class":154},[127,127637,164],{"class":147},[127,127639,127640],{"class":129,"line":151},[127,127641,170],{"class":147},[575,127643,577],{},{"title":122,"searchDepth":137,"depth":137,"links":127645},[127646,127647,127655,127662],{"id":16,"depth":137,"text":17},{"id":56,"depth":137,"text":57,"children":127648},[127649,127650,127651,127652,127653,127654],{"id":64,"depth":151,"text":65},{"id":77,"depth":151,"text":78},{"id":173,"depth":151,"text":174},{"id":186,"depth":151,"text":187},{"id":205,"depth":151,"text":206},{"id":218,"depth":151,"text":219},{"id":225,"depth":137,"text":226,"children":127656},[127657,127658,127659,127660,127661],{"id":232,"depth":151,"text":233},{"id":244,"depth":151,"text":245},{"id":303,"depth":151,"text":304},{"id":324,"depth":151,"text":325},{"id":345,"depth":151,"text":346},{"id":371,"depth":137,"text":372,"children":127663},[127664,127665,127666,127667,127668],{"id":375,"depth":151,"text":376},{"id":429,"depth":151,"text":430},{"id":443,"depth":151,"text":444},{"id":499,"depth":151,"text":500},{"id":542,"depth":151,"text":543},{},{"title":5,"description":603},{"id":127672,"title":127673,"body":127674,"description":603,"extension":604,"meta":128323,"navigation":606,"path":128324,"seo":128325,"stem":128326,"__hash__":128327},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127675,"toc":128304},[127676,127679,127683,127687,127747,127751,127761,127764,127767,127771,127796,127800,127803,127806,127809,127812,127815,127819,127822,127825,127867,127870,127896,127902,127905,127909,127913,127919,127922,127925,127928,127931,127934,127937,127982,127986,127989,127992,127996,128000,128029,128032,128037,128040,128043,128046,128049,128053,128057,128060,128062,128065,128069,128072,128076,128079,128082,128085,128089,128093,128099,128109,128112,128115,128118,128121,128124,128247,128255,128263,128301],[10,127677,127673],{"id":127678},"_7-css引入方式与选择器进阶",[14,127680,127682],{"id":127681},"_71-css引入方式","7.1 css引入方式",[62,127684,127686],{"id":127685},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[117,127688,127692],{"className":127689,"code":127690,"language":127691,"meta":122,"style":122},"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",[124,127693,127694,127702,127709,127721,127734,127739],{"__ignoreMap":122},[127,127695,127696,127698,127700],{"class":129,"line":130},[127,127697,1584],{"class":147},[127,127699,575],{"class":140},[127,127701,51846],{"class":147},[127,127703,127704,127707],{"class":129,"line":137},[127,127705,127706],{"class":140},"  h1",[127,127708,148],{"class":147},[127,127710,127711,127714,127716,127719],{"class":129,"line":151},[127,127712,127713],{"class":154},"    color",[127,127715,158],{"class":147},[127,127717,127718],{"class":154},"blue",[127,127720,164],{"class":147},[127,127722,127723,127726,127728,127730,127732],{"class":129,"line":167},[127,127724,127725],{"class":154},"    font-size",[127,127727,158],{"class":147},[127,127729,1474],{"class":154},[127,127731,291],{"class":290},[127,127733,164],{"class":147},[127,127735,127736],{"class":129,"line":415},[127,127737,127738],{"class":147},"  }\n",[127,127740,127741,127743,127745],{"class":129,"line":421},[127,127742,52321],{"class":147},[127,127744,575],{"class":140},[127,127746,51846],{"class":147},[19,127748,127749,253],{},[30,127750,93],{},[19,127752,77755,127753,127756,127757,127760],{},[124,127754,127755],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[124,127758,127759],{},"\u003Chead>","标签中",[19,127762,127763],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127765,127766],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[62,127768,127770],{"id":127769},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[117,127772,127774],{"className":127689,"code":127773,"language":127691,"meta":122,"style":122},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[124,127775,127776],{"__ignoreMap":122},[127,127777,127778,127780,127782,127784,127786,127789,127792,127794],{"class":129,"line":130},[127,127779,1584],{"class":147},[127,127781,19],{"class":140},[127,127783,63159],{"class":143},[127,127785,725],{"class":147},[127,127787,127788],{"class":781},"\"color: red; font-size: 16px;\"",[127,127790,127791],{"class":147},">这是一个段落\u003C\u002F",[127,127793,19],{"class":140},[127,127795,51846],{"class":147},[19,127797,127798,253],{},[30,127799,93],{},[19,127801,127802],{},"①style其实就是标签的属性",[19,127804,127805],{},"②在双引号中间，写法要符合css规范",[19,127807,127808],{},"③可以控制当前的标签设置样式",[19,127810,127811],{},"④书写繁琐，简单时才用",[19,127813,127814],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[62,127816,127818],{"id":127817},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127820,127821],{},"使用最多，单独建一个css文件，然后html引用",[19,127823,127824],{},"①css文件部分： style.css",[117,127826,127828],{"className":119,"code":127827,"language":121,"meta":122,"style":122},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[124,127829,127830,127835,127841,127851,127863],{"__ignoreMap":122},[127,127831,127832],{"class":129,"line":130},[127,127833,127834],{"class":133},"\u002F* style.css *\u002F\n",[127,127836,127837,127839],{"class":129,"line":137},[127,127838,10],{"class":140},[127,127840,148],{"class":147},[127,127842,127843,127845,127847,127849],{"class":129,"line":151},[127,127844,400],{"class":154},[127,127846,158],{"class":147},[127,127848,127718],{"class":154},[127,127850,164],{"class":147},[127,127852,127853,127855,127857,127859,127861],{"class":129,"line":167},[127,127854,282],{"class":154},[127,127856,158],{"class":147},[127,127858,1474],{"class":154},[127,127860,291],{"class":290},[127,127862,164],{"class":147},[127,127864,127865],{"class":129,"line":415},[127,127866,170],{"class":147},[19,127868,127869],{},"②html部分",[117,127871,127873],{"className":127689,"code":127872,"language":127691,"meta":122,"style":122},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[124,127874,127875],{"__ignoreMap":122},[127,127876,127877,127879,127881,127883,127885,127887,127889,127891,127894],{"class":129,"line":130},[127,127878,1584],{"class":147},[127,127880,69538],{"class":140},[127,127882,69541],{"class":143},[127,127884,725],{"class":147},[127,127886,69546],{"class":781},[127,127888,61590],{"class":143},[127,127890,725],{"class":147},[127,127892,127893],{"class":781},"\"style.css\"",[127,127895,51846],{"class":147},[19,127897,127898,127901],{},[124,127899,127900],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127903,127904],{},"ctrl+0回到页面原来大小",[14,127906,127908],{"id":127907},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[62,127910,127912],{"id":127911},"_721-快速生成html","7.2.1 快速生成html",[19,127914,127915,127916],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[124,127917,127918],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127920,127921],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127923,127924],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127926,127927],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127929,127930],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127932,127933],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127935,127936],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[117,127938,127940],{"className":127689,"code":127939,"language":127691,"meta":122,"style":122},"\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",[124,127941,127942,127947,127952,127957,127962,127967,127972,127977],{"__ignoreMap":122},[127,127943,127944],{"class":129,"line":130},[127,127945,127946],{"class":133},"\u003C!-- Emmet 语法示例 -->\n",[127,127948,127949],{"class":129,"line":137},[127,127950,127951],{"class":133},"\u003C!-- div*3        → 生成3个div -->\n",[127,127953,127954],{"class":129,"line":151},[127,127955,127956],{"class":133},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[127,127958,127959],{"class":129,"line":167},[127,127960,127961],{"class":133},"\u003C!-- div+p        → 兄弟div和p -->\n",[127,127963,127964],{"class":129,"line":415},[127,127965,127966],{"class":133},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[127,127968,127969],{"class":129,"line":421},[127,127970,127971],{"class":133},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[127,127973,127974],{"class":129,"line":1766},[127,127975,127976],{"class":133},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[127,127978,127979],{"class":129,"line":1856},[127,127980,127981],{"class":133},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[62,127983,127985],{"id":127984},"_722-快速生成css","7.2.2 快速生成css",[19,127987,127988],{},"简写开头",[19,127990,127991],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127993,127995],{"id":127994},"_73-css复合选择器","7.3 css复合选择器",[62,127997,127999],{"id":127998},"_731-后代选择器","7.3.1 后代选择器",[117,128001,128003],{"className":119,"code":128002,"language":121,"meta":122,"style":122},".parent .child {\n  color: blue;\n}\n",[124,128004,128005,128015,128025],{"__ignoreMap":122},[127,128006,128007,128010,128013],{"class":129,"line":130},[127,128008,128009],{"class":143},".parent",[127,128011,128012],{"class":143}," .child",[127,128014,148],{"class":147},[127,128016,128017,128019,128021,128023],{"class":129,"line":137},[127,128018,400],{"class":154},[127,128020,158],{"class":147},[127,128022,127718],{"class":154},[127,128024,164],{"class":147},[127,128026,128027],{"class":129,"line":151},[127,128028,170],{"class":147},[19,128030,128031],{},"元素1 元素2 {样式声明}",[19,128033,128034],{},[30,128035,128036],{},"注意点:",[19,128038,128039],{},"①元素1和元素2中间用空格隔开",[19,128041,128042],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128044,128045],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128047,128048],{},"④元素1和元素2可以是任意基础选择器",[62,128050,128052],{"id":128051},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128054,128055],{},[30,128056,128036],{},[19,128058,128059],{},"①元素1和元素2中间用大于号隔开",[19,128061,128042],{},[19,128063,128064],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[62,128066,128068],{"id":128067},"_733-并集选择器","7.3.3 并集选择器",[19,128070,128071],{},"元素1，元素2 {样式声明}",[19,128073,128074],{},[30,128075,128036],{},[19,128077,128078],{},"①元素1和元素2中间用逗号隔开",[19,128080,128081],{},"②逗号可以理解为和的意思",[19,128083,128084],{},"③并集选择器通常用于集体声明",[62,128086,128088],{"id":128087},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128090,128091],{},[30,128092,128036],{},[19,128094,128095,128096,128098],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69538,128097],{},"－:visited－:hover－:active。",[19,128100,128101,128102,128105,128106,26281],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128103,128104],"hover",{}," 、 ",[128107,128108],"first-child",{},[19,128110,128111],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128113,128114],{},"link对没访问的进行设置",[19,128116,128117],{},"vistied对已访问的进行改变",[19,128119,128120],{},"hover鼠标经过就会变",[19,128122,128123],{},"active常按(点)就会变",[117,128125,128127],{"className":119,"code":128126,"language":121,"meta":122,"style":122},"\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",[124,128128,128129,128134,128143,128153,128163,128167,128176,128187,128191,128199,128209,128219,128223,128232,128243],{"__ignoreMap":122},[127,128130,128131],{"class":129,"line":130},[127,128132,128133],{"class":133},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[127,128135,128136,128138,128141],{"class":129,"line":137},[127,128137,457],{"class":140},[127,128139,128140],{"class":143},":link",[127,128142,148],{"class":147},[127,128144,128145,128147,128149,128151],{"class":129,"line":151},[127,128146,400],{"class":154},[127,128148,158],{"class":147},[127,128150,62902],{"class":154},[127,128152,164],{"class":147},[127,128154,128155,128157,128159,128161],{"class":129,"line":167},[127,128156,464],{"class":154},[127,128158,158],{"class":147},[127,128160,469],{"class":154},[127,128162,164],{"class":147},[127,128164,128165],{"class":129,"line":415},[127,128166,170],{"class":147},[127,128168,128169,128171,128174],{"class":129,"line":421},[127,128170,457],{"class":140},[127,128172,128173],{"class":143},":visited",[127,128175,148],{"class":147},[127,128177,128178,128180,128182,128185],{"class":129,"line":1766},[127,128179,400],{"class":154},[127,128181,158],{"class":147},[127,128183,128184],{"class":154},"purple",[127,128186,164],{"class":147},[127,128188,128189],{"class":129,"line":1856},[127,128190,170],{"class":147},[127,128192,128193,128195,128197],{"class":129,"line":1862},[127,128194,457],{"class":140},[127,128196,61473],{"class":143},[127,128198,148],{"class":147},[127,128200,128201,128203,128205,128207],{"class":129,"line":1874},[127,128202,400],{"class":154},[127,128204,158],{"class":147},[127,128206,55423],{"class":154},[127,128208,164],{"class":147},[127,128210,128211,128213,128215,128217],{"class":129,"line":2155},[127,128212,464],{"class":154},[127,128214,158],{"class":147},[127,128216,490],{"class":154},[127,128218,164],{"class":147},[127,128220,128221],{"class":129,"line":2160},[127,128222,170],{"class":147},[127,128224,128225,128227,128230],{"class":129,"line":2166},[127,128226,457],{"class":140},[127,128228,128229],{"class":143},":active",[127,128231,148],{"class":147},[127,128233,128234,128236,128238,128241],{"class":129,"line":2171},[127,128235,400],{"class":154},[127,128237,158],{"class":147},[127,128239,128240],{"class":154},"green",[127,128242,164],{"class":147},[127,128244,128245],{"class":129,"line":2185},[127,128246,170],{"class":147},[62,128248,128250,128251,128254],{"id":128249},"_735-伪类选择器","7.3.5 ",[128252,128253],"focus",{},"伪类选择器",[19,128256,128257,128259,128260,128262],{},[128252,128258],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[124,128261,127139],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[117,128264,128266],{"className":119,"code":128265,"language":121,"meta":122,"style":122},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[124,128267,128268,128276,128287,128297],{"__ignoreMap":122},[127,128269,128270,128272,128274],{"class":129,"line":130},[127,128271,54356],{"class":140},[127,128273,62433],{"class":143},[127,128275,148],{"class":147},[127,128277,128278,128281,128283,128285],{"class":129,"line":137},[127,128279,128280],{"class":154},"  border-color",[127,128282,158],{"class":147},[127,128284,55423],{"class":154},[127,128286,164],{"class":147},[127,128288,128289,128291,128293,128295],{"class":129,"line":151},[127,128290,71328],{"class":154},[127,128292,158],{"class":147},[127,128294,469],{"class":154},[127,128296,164],{"class":147},[127,128298,128299],{"class":129,"line":167},[127,128300,170],{"class":147},[575,128302,128303],{},"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":122,"searchDepth":137,"depth":137,"links":128305},[128306,128311,128315],{"id":127681,"depth":137,"text":127682,"children":128307},[128308,128309,128310],{"id":127685,"depth":151,"text":127686},{"id":127769,"depth":151,"text":127770},{"id":127817,"depth":151,"text":127818},{"id":127907,"depth":137,"text":127908,"children":128312},[128313,128314],{"id":127911,"depth":151,"text":127912},{"id":127984,"depth":151,"text":127985},{"id":127994,"depth":137,"text":127995,"children":128316},[128317,128318,128319,128320,128321],{"id":127998,"depth":151,"text":127999},{"id":128051,"depth":151,"text":128052},{"id":128067,"depth":151,"text":128068},{"id":128087,"depth":151,"text":128088},{"id":128249,"depth":151,"text":128322},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127673,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128329,"title":128330,"body":128331,"description":603,"extension":604,"meta":130254,"navigation":606,"path":130255,"seo":130256,"stem":130257,"__hash__":130258},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128332,"toc":130228},[128333,128336,128340,128349,128353,128379,128384,128387,128390,128393,128396,128400,128403,128413,128421,128425,128460,128465,128468,128471,128474,128477,128481,128484,128493,128497,128510,128515,128518,128521,128524,128528,128531,128535,128538,128593,128596,128627,128630,128684,128688,128691,128857,128980,128983,128986,128989,128992,128996,128999,129003,129006,129009,129013,129016,129047,129074,129102,129105,129109,129135,129178,129182,129276,129279,129306,129309,129312,129315,129318,129321,129324,129327,129330,129333,129337,129394,129421,129425,129473,129477,129518,129520,129523,129526,129529,129532,129536,129628,129631,129634,129637,129641,129764,129965,129969,129973,129976,129979,129982,129986,129989,129992,130017,130020,130023,130026,130029,130032,130036,130044,130106,130109,130167,130170,130173,130176,130179,130182,130185,130188,130225],[10,128334,128330],{"id":128335},"_8-css显示模式与背景特性",[14,128337,128339],{"id":128338},"_81-css元素显示模式","8.1 css元素显示模式",[19,128341,128342,128343,128345,128346,128348],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[124,128344,126692],{},"自己占一行，比如一行可以放多个",[124,128347,126695],{},"，HTML 元素一般分为块元素和行内元素两种类型",[62,128350,128352],{"id":128351},"_811-块元素","8.1.1 块元素",[19,128354,128355,128356,128358,128359,888,128362,888,128364,888,128366,888,128369,888,128372,128375,128376,128378],{},"常见的块元素有",[124,128357,126596],{},"~",[124,128360,128361],{},"\u003Ch6>",[124,128363,126622],{},[124,128365,126692],{},[124,128367,128368],{},"\u003Cul>",[124,128370,128371],{},"\u003Col>",[124,128373,128374],{},"\u003Cli>","等，其中 ",[124,128377,126692],{}," 标签是最典型的块元素",[19,128380,128381],{},[30,128382,128383],{},"块级元素的特点：",[19,128385,128386],{},"① 比较霸道，自己独占一行。",[19,128388,128389],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128391,128392],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128394,128395],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128397,128398],{},[30,128399,32],{},[19,128401,128402],{},"①文字类的元素内不能使用块级元素",[19,128404,77778,128405,128407,128408,128410,128411],{},[124,128406,126622],{}," 标签主要用于存放文字，因此 ",[124,128409,126622],{}," 里面不能放块级元素，特别是不能放",[124,128412,126692],{},[19,128414,128415,128416,128358,128418,128420],{},"⑥同理， ",[124,128417,126596],{},[124,128419,128361],{},"等都是文字类块级标签，里面也不能放其他块级元素",[62,128422,128424],{"id":128423},"_812-行内元素","8.1.2 行内元素",[19,128426,128427,128428,888,128430,888,128433,888,128436,888,128439,888,128442,888,128445,888,128448,888,128451,888,128454,128456,128457,128459],{},"常见的行内元素有 ",[124,128429,126854],{},[124,128431,128432],{},"\u003Cstrong>",[124,128434,128435],{},"\u003Cb>",[124,128437,128438],{},"\u003Cem>",[124,128440,128441],{},"\u003Ci>",[124,128443,128444],{},"\u003Cdel>",[124,128446,128447],{},"\u003Cs>",[124,128449,128450],{},"\u003Cins>",[124,128452,128453],{},"\u003Cu>",[124,128455,126695],{}," 等，其中 ",[124,128458,126695],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128461,128462],{},[30,128463,128464],{},"特点：",[19,128466,128467],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128469,128470],{},"② 高、宽直接设置是无效的。",[19,128472,128473],{},"③ 默认宽度就是它本身内容的宽度。",[19,128475,128476],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128478,128479],{},[30,128480,32],{},[19,128482,128483],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128485,128486,128487,128489,128490,128492],{},"②特殊情况链接 ",[124,128488,126854],{}," 里面可以放块级元素，但是给 ",[124,128491,126854],{}," 转换一下块级模式最安全",[62,128494,128496],{"id":128495},"_813-行内块元素","8.1.3 行内块元素",[19,128498,128499,128500,888,128503,888,128506,128509],{},"在行内元素中有几个特殊的标签 —— ",[124,128501,128502],{},"\u003Cimg \u002F>",[124,128504,128505],{},"\u003Cinput \u002F>",[124,128507,128508],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128511,128512],{},[30,128513,128514],{},"行内块元素的特点：",[19,128516,128517],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128519,128520],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128522,128523],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[62,128525,128527],{"id":128526},"_814-总结","8.1.4 总结",[23,128529],{"style":25,"src":128530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[62,128532,128534],{"id":128533},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128536,128537],{},"①转换为块元素：display:block;",[117,128539,128541],{"className":119,"code":128540,"language":121,"meta":122,"style":122},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[124,128542,128543,128548,128554,128565,128577,128589],{"__ignoreMap":122},[127,128544,128545],{"class":129,"line":130},[127,128546,128547],{"class":133},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[127,128549,128550,128552],{"class":129,"line":137},[127,128551,457],{"class":140},[127,128553,148],{"class":147},[127,128555,128556,128559,128561,128563],{"class":129,"line":151},[127,128557,128558],{"class":154},"  display",[127,128560,158],{"class":147},[127,128562,61402],{"class":154},[127,128564,164],{"class":147},[127,128566,128567,128569,128571,128573,128575],{"class":129,"line":167},[127,128568,71099],{"class":154},[127,128570,158],{"class":147},[127,128572,986],{"class":154},[127,128574,291],{"class":290},[127,128576,164],{"class":147},[127,128578,128579,128581,128583,128585,128587],{"class":129,"line":415},[127,128580,71318],{"class":154},[127,128582,158],{"class":147},[127,128584,1076],{"class":154},[127,128586,291],{"class":290},[127,128588,164],{"class":147},[127,128590,128591],{"class":129,"line":421},[127,128592,170],{"class":147},[19,128594,128595],{},"②转换为行内元素：display:inline;",[117,128597,128599],{"className":119,"code":128598,"language":121,"meta":122,"style":122},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[124,128600,128601,128606,128612,128623],{"__ignoreMap":122},[127,128602,128603],{"class":129,"line":130},[127,128604,128605],{"class":133},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[127,128607,128608,128610],{"class":129,"line":137},[127,128609,52147],{"class":140},[127,128611,148],{"class":147},[127,128613,128614,128616,128618,128621],{"class":129,"line":151},[127,128615,128558],{"class":154},[127,128617,158],{"class":147},[127,128619,128620],{"class":154},"inline",[127,128622,164],{"class":147},[127,128624,128625],{"class":129,"line":167},[127,128626,170],{"class":147},[19,128628,128629],{},"③转换为行内块：display:inline-block;",[117,128631,128633],{"className":119,"code":128632,"language":121,"meta":122,"style":122},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[124,128634,128635,128640,128646,128656,128668,128680],{"__ignoreMap":122},[127,128636,128637],{"class":129,"line":130},[127,128638,128639],{"class":133},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[127,128641,128642,128644],{"class":129,"line":137},[127,128643,127],{"class":140},[127,128645,148],{"class":147},[127,128647,128648,128650,128652,128654],{"class":129,"line":151},[127,128649,128558],{"class":154},[127,128651,158],{"class":147},[127,128653,72912],{"class":154},[127,128655,164],{"class":147},[127,128657,128658,128660,128662,128664,128666],{"class":129,"line":167},[127,128659,71099],{"class":154},[127,128661,158],{"class":147},[127,128663,1286],{"class":154},[127,128665,291],{"class":290},[127,128667,164],{"class":147},[127,128669,128670,128672,128674,128676,128678],{"class":129,"line":415},[127,128671,71318],{"class":154},[127,128673,158],{"class":147},[127,128675,1625],{"class":154},[127,128677,291],{"class":290},[127,128679,164],{"class":147},[127,128681,128682],{"class":129,"line":421},[127,128683,170],{"class":147},[62,128685,128687],{"id":128686},"_816-小米侧边栏","8.1.6 小米侧边栏",[23,128689],{"style":25,"src":128690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[117,128692,128694],{"className":127689,"code":128693,"language":127691,"meta":122,"style":122},"\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",[124,128695,128696,128701,128716,128735,128754,128773,128792,128811,128830,128849],{"__ignoreMap":122},[127,128697,128698],{"class":129,"line":130},[127,128699,128700],{"class":133},"\u003C!-- 小米侧边栏案例 -->\n",[127,128702,128703,128705,128707,128709,128711,128714],{"class":129,"line":137},[127,128704,1584],{"class":147},[127,128706,52147],{"class":140},[127,128708,54021],{"class":143},[127,128710,725],{"class":147},[127,128712,128713],{"class":781},"\"sidebar\"",[127,128715,51846],{"class":147},[127,128717,128718,128720,128722,128724,128726,128728,128731,128733],{"class":129,"line":151},[127,128719,52679],{"class":147},[127,128721,457],{"class":140},[127,128723,61590],{"class":143},[127,128725,725],{"class":147},[127,128727,61595],{"class":781},[127,128729,128730],{"class":147},">手机 电话卡\u003C\u002F",[127,128732,457],{"class":140},[127,128734,51846],{"class":147},[127,128736,128737,128739,128741,128743,128745,128747,128750,128752],{"class":129,"line":167},[127,128738,52679],{"class":147},[127,128740,457],{"class":140},[127,128742,61590],{"class":143},[127,128744,725],{"class":147},[127,128746,61595],{"class":781},[127,128748,128749],{"class":147},">电视 盒子\u003C\u002F",[127,128751,457],{"class":140},[127,128753,51846],{"class":147},[127,128755,128756,128758,128760,128762,128764,128766,128769,128771],{"class":129,"line":415},[127,128757,52679],{"class":147},[127,128759,457],{"class":140},[127,128761,61590],{"class":143},[127,128763,725],{"class":147},[127,128765,61595],{"class":781},[127,128767,128768],{"class":147},">笔记本 平板\u003C\u002F",[127,128770,457],{"class":140},[127,128772,51846],{"class":147},[127,128774,128775,128777,128779,128781,128783,128785,128788,128790],{"class":129,"line":421},[127,128776,52679],{"class":147},[127,128778,457],{"class":140},[127,128780,61590],{"class":143},[127,128782,725],{"class":147},[127,128784,61595],{"class":781},[127,128786,128787],{"class":147},">出行 穿戴\u003C\u002F",[127,128789,457],{"class":140},[127,128791,51846],{"class":147},[127,128793,128794,128796,128798,128800,128802,128804,128807,128809],{"class":129,"line":1766},[127,128795,52679],{"class":147},[127,128797,457],{"class":140},[127,128799,61590],{"class":143},[127,128801,725],{"class":147},[127,128803,61595],{"class":781},[127,128805,128806],{"class":147},">智能 路由器\u003C\u002F",[127,128808,457],{"class":140},[127,128810,51846],{"class":147},[127,128812,128813,128815,128817,128819,128821,128823,128826,128828],{"class":129,"line":1856},[127,128814,52679],{"class":147},[127,128816,457],{"class":140},[127,128818,61590],{"class":143},[127,128820,725],{"class":147},[127,128822,61595],{"class":781},[127,128824,128825],{"class":147},">健康 儿童\u003C\u002F",[127,128827,457],{"class":140},[127,128829,51846],{"class":147},[127,128831,128832,128834,128836,128838,128840,128842,128845,128847],{"class":129,"line":1862},[127,128833,52679],{"class":147},[127,128835,457],{"class":140},[127,128837,61590],{"class":143},[127,128839,725],{"class":147},[127,128841,61595],{"class":781},[127,128843,128844],{"class":147},">耳机 音响\u003C\u002F",[127,128846,457],{"class":140},[127,128848,51846],{"class":147},[127,128850,128851,128853,128855],{"class":129,"line":1874},[127,128852,52321],{"class":147},[127,128854,52147],{"class":140},[127,128856,51846],{"class":147},[117,128858,128860],{"className":119,"code":128859,"language":121,"meta":122,"style":122},".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",[124,128861,128862,128871,128881,128894,128906,128918,128930,128940,128951,128955,128965,128976],{"__ignoreMap":122},[127,128863,128864,128867,128869],{"class":129,"line":130},[127,128865,128866],{"class":143},".sidebar",[127,128868,1943],{"class":140},[127,128870,148],{"class":147},[127,128872,128873,128875,128877,128879],{"class":129,"line":137},[127,128874,128558],{"class":154},[127,128876,158],{"class":147},[127,128878,61402],{"class":154},[127,128880,164],{"class":147},[127,128882,128883,128885,128887,128890,128892],{"class":129,"line":151},[127,128884,71099],{"class":154},[127,128886,158],{"class":147},[127,128888,128889],{"class":154},"234",[127,128891,291],{"class":290},[127,128893,164],{"class":147},[127,128895,128896,128898,128900,128902,128904],{"class":129,"line":167},[127,128897,71318],{"class":154},[127,128899,158],{"class":147},[127,128901,1127],{"class":154},[127,128903,291],{"class":290},[127,128905,164],{"class":147},[127,128907,128908,128910,128912,128914,128916],{"class":129,"line":415},[127,128909,562],{"class":154},[127,128911,158],{"class":147},[127,128913,1127],{"class":154},[127,128915,291],{"class":290},[127,128917,164],{"class":147},[127,128919,128920,128922,128924,128926,128928],{"class":129,"line":421},[127,128921,71353],{"class":154},[127,128923,158],{"class":147},[127,128925,1625],{"class":154},[127,128927,291],{"class":290},[127,128929,164],{"class":147},[127,128931,128932,128934,128936,128938],{"class":129,"line":1766},[127,128933,400],{"class":154},[127,128935,158],{"class":147},[127,128937,61375],{"class":154},[127,128939,164],{"class":147},[127,128941,128942,128944,128946,128949],{"class":129,"line":1856},[127,128943,71408],{"class":154},[127,128945,158],{"class":147},[127,128947,128948],{"class":154},"#55585a",[127,128950,164],{"class":147},[127,128952,128953],{"class":129,"line":1862},[127,128954,170],{"class":147},[127,128956,128957,128959,128961,128963],{"class":129,"line":1874},[127,128958,128866],{"class":143},[127,128960,1943],{"class":140},[127,128962,61473],{"class":143},[127,128964,148],{"class":147},[127,128966,128967,128969,128971,128974],{"class":129,"line":2155},[127,128968,71408],{"class":154},[127,128970,158],{"class":147},[127,128972,128973],{"class":154},"#ff6700",[127,128975,164],{"class":147},[127,128977,128978],{"class":129,"line":2160},[127,128979,170],{"class":147},[23,128981],{"style":25,"src":128982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128984,128985],{},"行高=盒子高度：实现文字的垂直居中",[19,128987,128988],{},"原理讲解：",[23,128990],{"style":25,"src":128991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128993,128995],{"id":128994},"_82-css背景","8.2 css背景",[19,128997,128998],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[62,129000,129002],{"id":129001},"_821-背景颜色","8.2.1 背景颜色",[19,129004,129005],{},"background-color:颜色值;",[19,129007,129008],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[62,129010,129012],{"id":129011},"_822-背景图片","8.2.2 背景图片",[19,129014,129015],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[117,129017,129019],{"className":119,"code":129018,"language":121,"meta":122,"style":122},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[124,129020,129021,129027,129043],{"__ignoreMap":122},[127,129022,129023,129025],{"class":129,"line":130},[127,129024,52147],{"class":140},[127,129026,148],{"class":147},[127,129028,129029,129032,129034,129036,129038,129041],{"class":129,"line":137},[127,129030,129031],{"class":154},"  background-image",[127,129033,158],{"class":147},[127,129035,62259],{"class":154},[127,129037,681],{"class":147},[127,129039,129040],{"class":5758},"images\u002Fbg.png",[127,129042,3261],{"class":147},[127,129044,129045],{"class":129,"line":151},[127,129046,170],{"class":147},[814,129048,129049,129058],{},[817,129050,129051],{},[820,129052,129053,129056],{},[823,129054,129055],{"align":24276},"参数值",[823,129057,103225],{"align":24276},[860,129059,129060,129067],{},[820,129061,129062,129064],{},[865,129063,469],{"align":24276},[865,129065,129066],{"align":24276},"无背景图（默认的）",[820,129068,129069,129071],{},[865,129070,62259],{"align":24276},[865,129072,129073],{"align":24276},"使用绝对或相对地址指定背景图像",[117,129075,129076],{"className":119,"code":129018,"language":121,"meta":122,"style":122},[124,129077,129078,129084,129098],{"__ignoreMap":122},[127,129079,129080,129082],{"class":129,"line":130},[127,129081,52147],{"class":140},[127,129083,148],{"class":147},[127,129085,129086,129088,129090,129092,129094,129096],{"class":129,"line":137},[127,129087,129031],{"class":154},[127,129089,158],{"class":147},[127,129091,62259],{"class":154},[127,129093,681],{"class":147},[127,129095,129040],{"class":5758},[127,129097,3261],{"class":147},[127,129099,129100],{"class":129,"line":151},[127,129101,170],{"class":147},[19,129103,129104],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[62,129106,129108],{"id":129107},"_823-背景平铺","8.2.3 背景平铺",[117,129110,129112],{"className":119,"code":129111,"language":121,"meta":122,"style":122},"div {\n  background-repeat: no-repeat;\n}\n",[124,129113,129114,129120,129131],{"__ignoreMap":122},[127,129115,129116,129118],{"class":129,"line":130},[127,129117,52147],{"class":140},[127,129119,148],{"class":147},[127,129121,129122,129125,129127,129129],{"class":129,"line":137},[127,129123,129124],{"class":154},"  background-repeat",[127,129126,158],{"class":147},[127,129128,62269],{"class":154},[127,129130,164],{"class":147},[127,129132,129133],{"class":129,"line":151},[127,129134,170],{"class":147},[814,129136,129137,129145],{},[817,129138,129139],{},[820,129140,129141,129143],{},[823,129142,129055],{"align":24276},[823,129144,103225],{"align":24276},[860,129146,129147,129155,129162,129170],{},[820,129148,129149,129152],{},[865,129150,129151],{"align":24276},"repeat",[865,129153,129154],{"align":24276},"背景图像在纵向和横向上平铺（默认的）",[820,129156,129157,129159],{},[865,129158,62269],{"align":24276},[865,129160,129161],{"align":24276},"背景图像不平铺",[820,129163,129164,129167],{},[865,129165,129166],{"align":24276},"repeat-x",[865,129168,129169],{"align":24276},"背景图像在横向上平铺",[820,129171,129172,129175],{},[865,129173,129174],{"align":24276},"repeat-y",[865,129176,129177],{"align":24276},"背景图像在纵向平铺",[62,129179,129181],{"id":129180},"_824-背景图片位置","8.2.4 背景图片位置",[117,129183,129185],{"className":119,"code":129184,"language":121,"meta":122,"style":122},"\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",[124,129186,129187,129192,129198,129212,129216,129221,129227,129243,129247,129252,129258,129272],{"__ignoreMap":122},[127,129188,129189],{"class":129,"line":130},[127,129190,129191],{"class":133},"\u002F* 方位名词 *\u002F\n",[127,129193,129194,129196],{"class":129,"line":137},[127,129195,52147],{"class":140},[127,129197,148],{"class":147},[127,129199,129200,129203,129205,129207,129210],{"class":129,"line":151},[127,129201,129202],{"class":154},"  background-position",[127,129204,158],{"class":147},[127,129206,161],{"class":154},[127,129208,129209],{"class":154}," top",[127,129211,164],{"class":147},[127,129213,129214],{"class":129,"line":167},[127,129215,170],{"class":147},[127,129217,129218],{"class":129,"line":415},[127,129219,129220],{"class":133},"\u002F* 精确单位 *\u002F\n",[127,129222,129223,129225],{"class":129,"line":421},[127,129224,52147],{"class":140},[127,129226,148],{"class":147},[127,129228,129229,129231,129233,129235,129237,129239,129241],{"class":129,"line":1766},[127,129230,129202],{"class":154},[127,129232,158],{"class":147},[127,129234,1374],{"class":154},[127,129236,291],{"class":290},[127,129238,58037],{"class":154},[127,129240,291],{"class":290},[127,129242,164],{"class":147},[127,129244,129245],{"class":129,"line":1856},[127,129246,170],{"class":147},[127,129248,129249],{"class":129,"line":1862},[127,129250,129251],{"class":133},"\u002F* 混合单位 *\u002F\n",[127,129253,129254,129256],{"class":129,"line":1874},[127,129255,52147],{"class":140},[127,129257,148],{"class":147},[127,129259,129260,129262,129264,129266,129268,129270],{"class":129,"line":2155},[127,129261,129202],{"class":154},[127,129263,158],{"class":147},[127,129265,1374],{"class":154},[127,129267,291],{"class":290},[127,129269,17685],{"class":154},[127,129271,164],{"class":147},[127,129273,129274],{"class":129,"line":2160},[127,129275,170],{"class":147},[19,129277,129278],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[814,129280,129281,129289],{},[817,129282,129283],{},[820,129284,129285,129287],{},[823,129286,129055],{"align":24276},[823,129288,26410],{"align":24276},[860,129290,129291,129298],{},[820,129292,129293,129295],{},[865,129294,52503],{"align":24276},[865,129296,129297],{"align":24276},"百分数|由浮点数和单位标识符组成的长度值",[820,129299,129300,129303],{},[865,129301,129302],{"align":24276},"position",[865,129304,129305],{"align":24276},"top|center|bottom|left|center|right 方位名词",[19,129307,129308],{},"其他说明：",[19,129310,129311],{},"①参数是方位名词",[19,129313,129314],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129316,129317],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129319,129320],{},"②参数是精确单位",[19,129322,129323],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129325,129326],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129328,129329],{},"③参数是混合单位",[19,129331,129332],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[62,129334,129336],{"id":129335},"_825-背景图片固定","8.2.5 背景图片固定",[117,129338,129340],{"className":119,"code":129339,"language":121,"meta":122,"style":122},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[124,129341,129342,129347,129353,129365,129369,129374,129380,129390],{"__ignoreMap":122},[127,129343,129344],{"class":129,"line":130},[127,129345,129346],{"class":133},"\u002F* 背景滚动（默认） *\u002F\n",[127,129348,129349,129351],{"class":129,"line":137},[127,129350,52147],{"class":140},[127,129352,148],{"class":147},[127,129354,129355,129358,129360,129363],{"class":129,"line":151},[127,129356,129357],{"class":154},"  background-attachment",[127,129359,158],{"class":147},[127,129361,129362],{"class":154},"scroll",[127,129364,164],{"class":147},[127,129366,129367],{"class":129,"line":167},[127,129368,170],{"class":147},[127,129370,129371],{"class":129,"line":415},[127,129372,129373],{"class":133},"\u002F* 背景固定 *\u002F\n",[127,129375,129376,129378],{"class":129,"line":421},[127,129377,52147],{"class":140},[127,129379,148],{"class":147},[127,129381,129382,129384,129386,129388],{"class":129,"line":1766},[127,129383,129357],{"class":154},[127,129385,158],{"class":147},[127,129387,86762],{"class":154},[127,129389,164],{"class":147},[127,129391,129392],{"class":129,"line":1856},[127,129393,170],{"class":147},[814,129395,129396,129405],{},[817,129397,129398],{},[820,129399,129400,129403],{},[823,129401,129402],{"align":24276},"参数",[823,129404,103225],{"align":24276},[860,129406,129407,129414],{},[820,129408,129409,129411],{},[865,129410,129362],{"align":24276},[865,129412,129413],{"align":24276},"背景图像是随对象内容滚动",[820,129415,129416,129418],{},[865,129417,86762],{"align":24276},[865,129419,129420],{"align":24276},"背景图像固定",[62,129422,129424],{"id":129423},"_826-背景样式合写","8.2.6 背景样式合写",[117,129426,129428],{"className":119,"code":129427,"language":121,"meta":122,"style":122},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[124,129429,129430,129435,129441,129469],{"__ignoreMap":122},[127,129431,129432],{"class":129,"line":130},[127,129433,129434],{"class":133},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[127,129436,129437,129439],{"class":129,"line":137},[127,129438,52147],{"class":140},[127,129440,148],{"class":147},[127,129442,129443,129445,129447,129449,129452,129454,129456,129458,129460,129463,129465,129467],{"class":129,"line":151},[127,129444,71142],{"class":154},[127,129446,158],{"class":147},[127,129448,61375],{"class":154},[127,129450,129451],{"class":154}," url",[127,129453,681],{"class":147},[127,129455,129040],{"class":5758},[127,129457,14256],{"class":147},[127,129459,62269],{"class":154},[127,129461,129462],{"class":154}," fixed",[127,129464,17685],{"class":154},[127,129466,129209],{"class":154},[127,129468,164],{"class":147},[127,129470,129471],{"class":129,"line":167},[127,129472,170],{"class":147},[62,129474,129476],{"id":129475},"_827-背景色半透明","8.2.7 背景色半透明",[117,129478,129480],{"className":119,"code":129479,"language":121,"meta":122,"style":122},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[124,129481,129482,129488,129514],{"__ignoreMap":122},[127,129483,129484,129486],{"class":129,"line":130},[127,129485,52147],{"class":140},[127,129487,148],{"class":147},[127,129489,129490,129492,129494,129496,129498,129500,129502,129504,129506,129508,129510,129512],{"class":129,"line":137},[127,129491,71142],{"class":154},[127,129493,158],{"class":147},[127,129495,55644],{"class":154},[127,129497,681],{"class":147},[127,129499,867],{"class":154},[127,129501,12977],{"class":147},[127,129503,867],{"class":154},[127,129505,12977],{"class":147},[127,129507,867],{"class":154},[127,129509,12977],{"class":147},[127,129511,101050],{"class":154},[127,129513,3261],{"class":147},[127,129515,129516],{"class":129,"line":151},[127,129517,170],{"class":147},[19,129519,99925],{},[19,129521,129522],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129524,129525],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129527,129528],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129530,129531],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[62,129533,129535],{"id":129534},"_828-总结","8.2.8 总结",[814,129537,129538,129549],{},[817,129539,129540],{},[820,129541,129542,129545,129547],{},[823,129543,129544],{"align":24276},"属性",[823,129546,103225],{"align":24276},[823,129548,828],{"align":24276},[860,129550,129551,129562,129573,129584,129595,129606,129617],{},[820,129552,129553,129556,129559],{},[865,129554,129555],{"align":24276},"background-color",[865,129557,129558],{"align":24276},"背景颜色",[865,129560,129561],{"align":24276},"预定义的颜色值\u002F十六进制\u002FRGB代码",[820,129563,129564,129567,129570],{},[865,129565,129566],{"align":24276},"background-image",[865,129568,129569],{"align":24276},"背景图片",[865,129571,129572],{"align":24276},"url(图片路径)",[820,129574,129575,129578,129581],{},[865,129576,129577],{"align":24276},"background-repeat",[865,129579,129580],{"align":24276},"是否平铺",[865,129582,129583],{"align":24276},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[820,129585,129586,129589,129592],{},[865,129587,129588],{"align":24276},"background-position",[865,129590,129591],{"align":24276},"背景位置",[865,129593,129594],{"align":24276},"length\u002Fposition 分别是x和y坐标",[820,129596,129597,129600,129603],{},[865,129598,129599],{"align":24276},"background-attachment",[865,129601,129602],{"align":24276},"背景附着",[865,129604,129605],{"align":24276},"scroll(背景滚动) \u002Ffixed (背景固定)",[820,129607,129608,129611,129614],{},[865,129609,129610],{"align":24276},"背景简写",[865,129612,129613],{"align":24276},"书写更简单",[865,129615,129616],{"align":24276},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[820,129618,129619,129622,129625],{},[865,129620,129621],{"align":24276},"背景半透明",[865,129623,129624],{"align":24276},"背景颜色半透明",[865,129626,129627],{"align":24276},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129629,129630],{},"颜色渐变：",[23,129632],{"style":25,"src":129633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[23,129635],{"style":25,"src":129636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[62,129638,129640],{"id":129639},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[117,129642,129644],{"className":127689,"code":129643,"language":127691,"meta":122,"style":122},"\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",[124,129645,129646,129661,129680,129699,129718,129737,129756],{"__ignoreMap":122},[127,129647,129648,129650,129652,129654,129656,129659],{"class":129,"line":130},[127,129649,1584],{"class":147},[127,129651,52147],{"class":140},[127,129653,54021],{"class":143},[127,129655,725],{"class":147},[127,129657,129658],{"class":781},"\"nav\"",[127,129660,51846],{"class":147},[127,129662,129663,129665,129667,129669,129671,129673,129676,129678],{"class":129,"line":137},[127,129664,52679],{"class":147},[127,129666,457],{"class":140},[127,129668,61590],{"class":143},[127,129670,725],{"class":147},[127,129672,61595],{"class":781},[127,129674,129675],{"class":147},">五彩导航1\u003C\u002F",[127,129677,457],{"class":140},[127,129679,51846],{"class":147},[127,129681,129682,129684,129686,129688,129690,129692,129695,129697],{"class":129,"line":151},[127,129683,52679],{"class":147},[127,129685,457],{"class":140},[127,129687,61590],{"class":143},[127,129689,725],{"class":147},[127,129691,61595],{"class":781},[127,129693,129694],{"class":147},">五彩导航2\u003C\u002F",[127,129696,457],{"class":140},[127,129698,51846],{"class":147},[127,129700,129701,129703,129705,129707,129709,129711,129714,129716],{"class":129,"line":167},[127,129702,52679],{"class":147},[127,129704,457],{"class":140},[127,129706,61590],{"class":143},[127,129708,725],{"class":147},[127,129710,61595],{"class":781},[127,129712,129713],{"class":147},">五彩导航3\u003C\u002F",[127,129715,457],{"class":140},[127,129717,51846],{"class":147},[127,129719,129720,129722,129724,129726,129728,129730,129733,129735],{"class":129,"line":415},[127,129721,52679],{"class":147},[127,129723,457],{"class":140},[127,129725,61590],{"class":143},[127,129727,725],{"class":147},[127,129729,61595],{"class":781},[127,129731,129732],{"class":147},">五彩导航4\u003C\u002F",[127,129734,457],{"class":140},[127,129736,51846],{"class":147},[127,129738,129739,129741,129743,129745,129747,129749,129752,129754],{"class":129,"line":421},[127,129740,52679],{"class":147},[127,129742,457],{"class":140},[127,129744,61590],{"class":143},[127,129746,725],{"class":147},[127,129748,61595],{"class":781},[127,129750,129751],{"class":147},">五彩导航5\u003C\u002F",[127,129753,457],{"class":140},[127,129755,51846],{"class":147},[127,129757,129758,129760,129762],{"class":129,"line":1766},[127,129759,52321],{"class":147},[127,129761,52147],{"class":140},[127,129763,51846],{"class":147},[117,129765,129767],{"className":119,"code":129766,"language":121,"meta":122,"style":122},".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",[124,129768,129769,129778,129788,129800,129812,129822,129834,129844,129848,129873,129896,129919,129942],{"__ignoreMap":122},[127,129770,129771,129774,129776],{"class":129,"line":130},[127,129772,129773],{"class":143},".nav",[127,129775,1943],{"class":140},[127,129777,148],{"class":147},[127,129779,129780,129782,129784,129786],{"class":129,"line":137},[127,129781,128558],{"class":154},[127,129783,158],{"class":147},[127,129785,72912],{"class":154},[127,129787,164],{"class":147},[127,129789,129790,129792,129794,129796,129798],{"class":129,"line":151},[127,129791,71099],{"class":154},[127,129793,158],{"class":147},[127,129795,1491],{"class":154},[127,129797,291],{"class":290},[127,129799,164],{"class":147},[127,129801,129802,129804,129806,129808,129810],{"class":129,"line":167},[127,129803,71318],{"class":154},[127,129805,158],{"class":147},[127,129807,1530],{"class":154},[127,129809,291],{"class":290},[127,129811,164],{"class":147},[127,129813,129814,129816,129818,129820],{"class":129,"line":415},[127,129815,155],{"class":154},[127,129817,158],{"class":147},[127,129819,161],{"class":154},[127,129821,164],{"class":147},[127,129823,129824,129826,129828,129830,129832],{"class":129,"line":421},[127,129825,562],{"class":154},[127,129827,158],{"class":147},[127,129829,1530],{"class":154},[127,129831,291],{"class":290},[127,129833,164],{"class":147},[127,129835,129836,129838,129840,129842],{"class":129,"line":1766},[127,129837,400],{"class":154},[127,129839,158],{"class":147},[127,129841,61375],{"class":154},[127,129843,164],{"class":147},[127,129845,129846],{"class":129,"line":1856},[127,129847,170],{"class":147},[127,129849,129850,129852,129854,129857,129859,129861,129864,129866,129868,129870],{"class":129,"line":1862},[127,129851,129773],{"class":143},[127,129853,1943],{"class":140},[127,129855,129856],{"class":143},":nth-child",[127,129858,681],{"class":147},[127,129860,893],{"class":154},[127,129862,129863],{"class":147},") { ",[127,129865,129555],{"class":154},[127,129867,158],{"class":147},[127,129869,128973],{"class":154},[127,129871,129872],{"class":147},"; }\n",[127,129874,129875,129877,129879,129881,129883,129885,129887,129889,129891,129894],{"class":129,"line":1874},[127,129876,129773],{"class":143},[127,129878,1943],{"class":140},[127,129880,129856],{"class":143},[127,129882,681],{"class":147},[127,129884,530],{"class":154},[127,129886,129863],{"class":147},[127,129888,129555],{"class":154},[127,129890,158],{"class":147},[127,129892,129893],{"class":154},"#ff0000",[127,129895,129872],{"class":147},[127,129897,129898,129900,129902,129904,129906,129908,129910,129912,129914,129917],{"class":129,"line":2155},[127,129899,129773],{"class":143},[127,129901,1943],{"class":140},[127,129903,129856],{"class":143},[127,129905,681],{"class":147},[127,129907,749],{"class":154},[127,129909,129863],{"class":147},[127,129911,129555],{"class":154},[127,129913,158],{"class":147},[127,129915,129916],{"class":154},"#00a4ff",[127,129918,129872],{"class":147},[127,129920,129921,129923,129925,129927,129929,129931,129933,129935,129937,129940],{"class":129,"line":2160},[127,129922,129773],{"class":143},[127,129924,1943],{"class":140},[127,129926,129856],{"class":143},[127,129928,681],{"class":147},[127,129930,968],{"class":154},[127,129932,129863],{"class":147},[127,129934,129555],{"class":154},[127,129936,158],{"class":147},[127,129938,129939],{"class":154},"#ff00ff",[127,129941,129872],{"class":147},[127,129943,129944,129946,129948,129950,129952,129954,129956,129958,129960,129963],{"class":129,"line":2166},[127,129945,129773],{"class":143},[127,129947,1943],{"class":140},[127,129949,129856],{"class":143},[127,129951,681],{"class":147},[127,129953,994],{"class":154},[127,129955,129863],{"class":147},[127,129957,129555],{"class":154},[127,129959,158],{"class":147},[127,129961,129962],{"class":154},"#00ff00",[127,129964,129872],{"class":147},[14,129966,129968],{"id":129967},"_83-css三大特性","8.3 css三大特性",[62,129970,129972],{"id":129971},"_831-层叠性","8.3.1 层叠性",[19,129974,129975],{},"为了解决样式冲突问题",[19,129977,129978],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129980,129981],{},"   ②样式不冲突，不会层叠",[62,129983,129985],{"id":129984},"_832-继承性","8.3.2 继承性",[19,129987,129988],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129990,129991],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[117,129993,129995],{"className":119,"code":129994,"language":121,"meta":122,"style":122},"p {\n  color: #333;\n}\n",[124,129996,129997,130003,130013],{"__ignoreMap":122},[127,129998,129999,130001],{"class":129,"line":130},[127,130000,19],{"class":140},[127,130002,148],{"class":147},[127,130004,130005,130007,130009,130011],{"class":129,"line":137},[127,130006,400],{"class":154},[127,130008,158],{"class":147},[127,130010,62902],{"class":154},[127,130012,164],{"class":147},[127,130014,130015],{"class":129,"line":151},[127,130016,170],{"class":147},[23,130018],{"style":25,"src":130019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130021,130022],{},"解释：①行高可以跟单位也可以不跟单位",[19,130024,130025],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130027,130028],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130030,130031],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[62,130033,130035],{"id":130034},"_833-优先级","8.3.3 优先级",[632,130037,130038,130041],{},[635,130039,130040],{},"选择器相同，则执行层叠性",[635,130042,130043],{},"选择器不同，则根据选择器权重执行",[814,130045,130046,130056],{},[817,130047,130048],{},[820,130049,130050,130053],{},[823,130051,130052],{"align":24276},"选择器",[823,130054,130055],{"align":24276},"选择器权重",[860,130057,130058,130066,130074,130082,130090,130098],{},[820,130059,130060,130063],{},[865,130061,130062],{"align":24276},"继承 或者*",[865,130064,130065],{"align":24276},"0，0，0，0",[820,130067,130068,130071],{},[865,130069,130070],{"align":24276},"标签选择器",[865,130072,130073],{"align":24276},"0，0，0，1",[820,130075,130076,130079],{},[865,130077,130078],{"align":24276},"类选择器，伪类选择器",[865,130080,130081],{"align":24276},"0，0，1，0",[820,130083,130084,130087],{},[865,130085,130086],{"align":24276},"ID选择器",[865,130088,130089],{"align":24276},"0，1，0，0",[820,130091,130092,130095],{},[865,130093,130094],{"align":24276},"行内样式",[865,130096,130097],{"align":24276},"1，0，0，0",[820,130099,130100,130103],{},[865,130101,130102],{"align":24276},"！important",[865,130104,130105],{"align":24276},"无穷大",[19,130107,130108],{},"! important用法：",[117,130110,130112],{"className":119,"code":130111,"language":121,"meta":122,"style":122},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[124,130113,130114,130119,130125,130138,130142,130147,130153,130163],{"__ignoreMap":122},[127,130115,130116],{"class":129,"line":130},[127,130117,130118],{"class":133},"\u002F* !important 拥有最高优先级 *\u002F\n",[127,130120,130121,130123],{"class":129,"line":137},[127,130122,52147],{"class":140},[127,130124,148],{"class":147},[127,130126,130127,130129,130131,130133,130136],{"class":129,"line":151},[127,130128,400],{"class":154},[127,130130,158],{"class":147},[127,130132,52181],{"class":154},[127,130134,130135],{"class":290}," !important",[127,130137,164],{"class":147},[127,130139,130140],{"class":129,"line":167},[127,130141,170],{"class":147},[127,130143,130144],{"class":129,"line":415},[127,130145,130146],{"class":133},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[127,130148,130149,130151],{"class":129,"line":421},[127,130150,52147],{"class":140},[127,130152,148],{"class":147},[127,130154,130155,130157,130159,130161],{"class":129,"line":1766},[127,130156,400],{"class":154},[127,130158,158],{"class":147},[127,130160,405],{"class":154},[127,130162,164],{"class":147},[127,130164,130165],{"class":129,"line":1856},[127,130166,170],{"class":147},[19,130168,130169],{},"优先级注意点：",[19,130171,130172],{},"①权重是有4组数字组成,但是不会有进位",[19,130174,130175],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130177,130178],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130180,130181],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130183,130184],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130186,130187],{},"⑥复合选择器",[814,130189,130190,130200],{},[817,130191,130192],{},[820,130193,130194,130197],{},[823,130195,130196],{"align":24276},"div ul li",[823,130198,130199],{"align":24276},"0,0,0,3",[860,130201,130202,130210,130218],{},[820,130203,130204,130207],{},[865,130205,130206],{"align":24276},".nav ul li",[865,130208,130209],{"align":24276},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[820,130211,130212,130215],{},[865,130213,130214],{"align":24276},"a:hover",[865,130216,130217],{"align":24276},"0,0,1,1",[820,130219,130220,130223],{},[865,130221,130222],{"align":24276},".nav a",[865,130224,130217],{"align":24276},[575,130226,130227],{},"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":122,"searchDepth":137,"depth":137,"links":130229},[130230,130238,130249],{"id":128338,"depth":137,"text":128339,"children":130231},[130232,130233,130234,130235,130236,130237],{"id":128351,"depth":151,"text":128352},{"id":128423,"depth":151,"text":128424},{"id":128495,"depth":151,"text":128496},{"id":128526,"depth":151,"text":128527},{"id":128533,"depth":151,"text":128534},{"id":128686,"depth":151,"text":128687},{"id":128994,"depth":137,"text":128995,"children":130239},[130240,130241,130242,130243,130244,130245,130246,130247,130248],{"id":129001,"depth":151,"text":129002},{"id":129011,"depth":151,"text":129012},{"id":129107,"depth":151,"text":129108},{"id":129180,"depth":151,"text":129181},{"id":129335,"depth":151,"text":129336},{"id":129423,"depth":151,"text":129424},{"id":129475,"depth":151,"text":129476},{"id":129534,"depth":151,"text":129535},{"id":129639,"depth":151,"text":129640},{"id":129967,"depth":137,"text":129968,"children":130250},[130251,130252,130253],{"id":129971,"depth":151,"text":129972},{"id":129984,"depth":151,"text":129985},{"id":130034,"depth":151,"text":130035},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128330,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130260,"title":130261,"body":130262,"description":603,"extension":604,"meta":131852,"navigation":606,"path":131853,"seo":131854,"stem":131855,"__hash__":131856},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130263,"toc":131831},[130264,130267,130271,130274,130277,130280,130283,130286,130289,130292,130296,130304,130341,130377,130380,130394,130399,130433,130436,130529,130534,130537,130567,130570,130575,130583,130587,130594,130640,130684,130689,130692,130695,130698,130701,130704,130707,130709,130712,130716,130721,130765,130770,130773,130776,130813,130818,130821,130824,130827,130830,130862,130865,130868,130871,130903,130906,130909,130912,130916,130919,130951,130954,130958,130978,130981,130989,130992,130996,131001,131004,131036,131041,131044,131082,131086,131091,131094,131097,131128,131131,131148,131153,131205,131265,131270,131324,131362,131366,131370,131373,131377,131385,131388,131390,131401,131406,131454,131488,131491,131494,131497,131500,131544,131547,131550,131553,131556,131559,131562,131606,131609,131612,131615,131618,131621,131624,131630,131633,131677,131680,131683,131686,131689,131692,131736,131739,131741,131744,131748,131752,131790,131794,131797,131800,131804,131812,131816,131819,131822,131825,131828],[10,130265,130261],{"id":130266},"_9-css盒模型浮动与切图",[14,130268,130270],{"id":130269},"_91-盒子模型","9.1 盒子模型",[19,130272,130273],{},"利用盒子来设计网页",[19,130275,130276],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130278,130279],{},"网页布局设置：",[19,130281,130282],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130284,130285],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130287,130288],{},"③往盒子里装内容",[23,130290],{"style":25,"src":130291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[62,130293,130295],{"id":130294},"_911-边框border","9.1.1 边框（border）",[632,130297,130298,130301],{},[635,130299,130300],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[635,130302,130303],{},"语法",[117,130305,130307],{"className":119,"code":130306,"language":121,"meta":122,"style":122},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[124,130308,130309,130314,130320,130337],{"__ignoreMap":122},[127,130310,130311],{"class":129,"line":130},[127,130312,130313],{"class":133},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[127,130315,130316,130318],{"class":129,"line":137},[127,130317,52147],{"class":140},[127,130319,148],{"class":147},[127,130321,130322,130324,130326,130328,130330,130332,130335],{"class":129,"line":151},[127,130323,71426],{"class":154},[127,130325,158],{"class":147},[127,130327,893],{"class":154},[127,130329,291],{"class":290},[127,130331,52058],{"class":154},[127,130333,130334],{"class":154}," #ccc",[127,130336,164],{"class":147},[127,130338,130339],{"class":129,"line":167},[127,130340,170],{"class":147},[814,130342,130343,130351],{},[817,130344,130345],{},[820,130346,130347,130349],{},[823,130348,129544],{"align":24276},[823,130350,103225],{"align":24276},[860,130352,130353,130361,130369],{},[820,130354,130355,130358],{},[865,130356,130357],{"align":24276},"border-width",[865,130359,130360],{"align":24276},"定义边框粗细，单位是px",[820,130362,130363,130366],{},[865,130364,130365],{"align":24276},"border-style",[865,130367,130368],{"align":24276},"边框的样式",[820,130370,130371,130374],{},[865,130372,130373],{"align":24276},"border-color",[865,130375,130376],{"align":24276},"边框的颜色",[19,130378,130379],{},"边框样式 border-style 可以设置如下值：",[1681,130381,130382,130385,130388,130391],{},[635,130383,130384],{},"none：没有边框即忽略所有边框的宽度（默认值）",[635,130386,130387],{},"solid：边框为单实线(最为常用的)",[635,130389,130390],{},"dashed：边框为虚线",[635,130392,130393],{},"dotted：边框为点线",[632,130395,130396],{"start":151},[635,130397,130398],{},"边框的合写分写",[117,130400,130401],{"className":119,"code":130306,"language":121,"meta":122,"style":122},[124,130402,130403,130407,130413,130429],{"__ignoreMap":122},[127,130404,130405],{"class":129,"line":130},[127,130406,130313],{"class":133},[127,130408,130409,130411],{"class":129,"line":137},[127,130410,52147],{"class":140},[127,130412,148],{"class":147},[127,130414,130415,130417,130419,130421,130423,130425,130427],{"class":129,"line":151},[127,130416,71426],{"class":154},[127,130418,158],{"class":147},[127,130420,893],{"class":154},[127,130422,291],{"class":290},[127,130424,52058],{"class":154},[127,130426,130334],{"class":154},[127,130428,164],{"class":147},[127,130430,130431],{"class":129,"line":167},[127,130432,170],{"class":147},[19,130434,130435],{},"边框分开写法：",[117,130437,130439],{"className":119,"code":130438,"language":121,"meta":122,"style":122},"\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",[124,130440,130441,130446,130452,130470,130488,130507,130525],{"__ignoreMap":122},[127,130442,130443],{"class":129,"line":130},[127,130444,130445],{"class":133},"\u002F* 边框分开写法 *\u002F\n",[127,130447,130448,130450],{"class":129,"line":137},[127,130449,52147],{"class":140},[127,130451,148],{"class":147},[127,130453,130454,130457,130459,130461,130463,130465,130468],{"class":129,"line":151},[127,130455,130456],{"class":154},"  border-top",[127,130458,158],{"class":147},[127,130460,893],{"class":154},[127,130462,291],{"class":290},[127,130464,52058],{"class":154},[127,130466,130467],{"class":154}," #000",[127,130469,164],{"class":147},[127,130471,130472,130475,130477,130479,130481,130483,130486],{"class":129,"line":167},[127,130473,130474],{"class":154},"  border-right",[127,130476,158],{"class":147},[127,130478,530],{"class":154},[127,130480,291],{"class":290},[127,130482,62774],{"class":154},[127,130484,130485],{"class":154}," #333",[127,130487,164],{"class":147},[127,130489,130490,130493,130495,130497,130499,130502,130505],{"class":129,"line":415},[127,130491,130492],{"class":154},"  border-bottom",[127,130494,158],{"class":147},[127,130496,749],{"class":154},[127,130498,291],{"class":290},[127,130500,130501],{"class":154}," dotted",[127,130503,130504],{"class":154}," #666",[127,130506,164],{"class":147},[127,130508,130509,130512,130514,130516,130518,130520,130523],{"class":129,"line":421},[127,130510,130511],{"class":154},"  border-left",[127,130513,158],{"class":147},[127,130515,893],{"class":154},[127,130517,291],{"class":290},[127,130519,52058],{"class":154},[127,130521,130522],{"class":154}," #999",[127,130524,164],{"class":147},[127,130526,130527],{"class":129,"line":1766},[127,130528,170],{"class":147},[632,130530,130531],{"start":167},[635,130532,130533],{},"表格的细线边框",[19,130535,130536],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[117,130538,130540],{"className":119,"code":130539,"language":121,"meta":122,"style":122},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[124,130541,130542,130547,130553,130563],{"__ignoreMap":122},[127,130543,130544],{"class":129,"line":130},[127,130545,130546],{"class":133},"\u002F* 表格细线边框合并 *\u002F\n",[127,130548,130549,130551],{"class":129,"line":137},[127,130550,814],{"class":140},[127,130552,148],{"class":147},[127,130554,130555,130557,130559,130561],{"class":129,"line":151},[127,130556,71109],{"class":154},[127,130558,158],{"class":147},[127,130560,65568],{"class":154},[127,130562,164],{"class":147},[127,130564,130565],{"class":129,"line":167},[127,130566,170],{"class":147},[19,130568,130569],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[632,130571,130572],{"start":415},[635,130573,130574],{},"解决边框额外增加盒子的实际大小的方法：",[1681,130576,130577,130580],{},[635,130578,130579],{},"测量盒子大小的时候,不量边框",[635,130581,130582],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[62,130584,130586],{"id":130585},"_912-内边距","9.1.2 内边距",[632,130588,130589,130592],{},[635,130590,130591],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[635,130593,130303],{},[814,130595,130596,130606],{},[817,130597,130598],{},[820,130599,130600,130603],{},[823,130601,130602],{"align":24276},"值的个数",[823,130604,130605],{"align":24276},"表达意思",[860,130607,130608,130616,130624,130632],{},[820,130609,130610,130613],{},[865,130611,130612],{"align":24276},"padding: 5px;",[865,130614,130615],{"align":24276},"1个值，代表上下左右都有5个元素",[820,130617,130618,130621],{},[865,130619,130620],{"align":24276},"padding: 5px 10px;",[865,130622,130623],{"align":24276},"2个值，代表上下内边距为5像素，左右内边距为10像素",[820,130625,130626,130629],{},[865,130627,130628],{"align":24276},"padding: 5px 10px 20px;",[865,130630,130631],{"align":24276},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[820,130633,130634,130637],{},[865,130635,130636],{"align":24276},"padding: 5px 10px 20px 30px;",[865,130638,130639],{"align":24276},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[814,130641,130642,130650],{},[817,130643,130644],{},[820,130645,130646,130648],{},[823,130647,129544],{"align":24276},[823,130649,103225],{"align":24276},[860,130651,130652,130660,130668,130676],{},[820,130653,130654,130657],{},[865,130655,130656],{"align":24276},"padding-left",[865,130658,130659],{"align":24276},"左内边距",[820,130661,130662,130665],{},[865,130663,130664],{"align":24276},"padding-right",[865,130666,130667],{"align":24276},"右内边距",[820,130669,130670,130673],{},[865,130671,130672],{"align":24276},"padding-top",[865,130674,130675],{"align":24276},"上内边距",[820,130677,130678,130681],{},[865,130679,130680],{"align":24276},"padding-bottom",[865,130682,130683],{"align":24276},"下内边距",[632,130685,130686],{"start":151},[635,130687,130688],{},"内边距会影响盒子的实际大小",[19,130690,130691],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130693,130694],{},"①内容和边框有了距离，添加了内边距",[19,130696,130697],{},"②padding影响了盒子实际大小",[19,130699,130700],{},"内边距对盒子大小的影响：",[19,130702,130703],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130705,130706],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130708,95749],{},[19,130710,130711],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[62,130713,130715],{"id":130714},"_913-外边距","9.1.3 外边距",[632,130717,130718],{},[635,130719,130720],{},"控制盒子与盒子之间的距离",[814,130722,130723,130731],{},[817,130724,130725],{},[820,130726,130727,130729],{},[823,130728,129544],{"align":24276},[823,130730,103225],{"align":24276},[860,130732,130733,130741,130749,130757],{},[820,130734,130735,130738],{},[865,130736,130737],{"align":24276},"margin-left",[865,130739,130740],{"align":24276},"左外边距",[820,130742,130743,130746],{},[865,130744,130745],{"align":24276},"margin-right",[865,130747,130748],{"align":24276},"右外边距",[820,130750,130751,130754],{},[865,130752,130753],{"align":24276},"margin-top",[865,130755,130756],{"align":24276},"上外边距",[820,130758,130759,130762],{},[865,130760,130761],{"align":24276},"margin-bottom",[865,130763,130764],{"align":24276},"下外边距",[632,130766,130767],{"start":137},[635,130768,130769],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130771,130772],{},"①盒子必须指定了宽度（width）",[19,130774,130775],{},"②盒子左右的外边距都设置为 auto",[117,130777,130779],{"className":119,"code":130778,"language":121,"meta":122,"style":122},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[124,130780,130781,130786,130793,130809],{"__ignoreMap":122},[127,130782,130783],{"class":129,"line":130},[127,130784,130785],{"class":133},"\u002F* margin 复合写法（同上） *\u002F\n",[127,130787,130788,130791],{"class":129,"line":137},[127,130789,130790],{"class":143},".box",[127,130792,148],{"class":147},[127,130794,130795,130797,130799,130801,130803,130806],{"class":129,"line":151},[127,130796,71003],{"class":154},[127,130798,158],{"class":147},[127,130800,867],{"class":154},[127,130802,52093],{"class":154},[127,130804,130805],{"class":147},";  ",[127,130807,130808],{"class":133},"\u002F* 块级盒子水平居中 *\u002F\n",[127,130810,130811],{"class":129,"line":167},[127,130812,170],{"class":147},[632,130814,130815],{"start":151},[635,130816,130817],{},"外边距塌陷问题",[19,130819,130820],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[23,130822],{"style":25,"src":130823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130825,130826],{},"解决方案：",[19,130828,130829],{},"①可以为父亲元素定义上边距",[117,130831,130832],{"className":119,"code":130778,"language":121,"meta":122,"style":122},[124,130833,130834,130838,130844,130858],{"__ignoreMap":122},[127,130835,130836],{"class":129,"line":130},[127,130837,130785],{"class":133},[127,130839,130840,130842],{"class":129,"line":137},[127,130841,130790],{"class":143},[127,130843,148],{"class":147},[127,130845,130846,130848,130850,130852,130854,130856],{"class":129,"line":151},[127,130847,71003],{"class":154},[127,130849,158],{"class":147},[127,130851,867],{"class":154},[127,130853,52093],{"class":154},[127,130855,130805],{"class":147},[127,130857,130808],{"class":133},[127,130859,130860],{"class":129,"line":167},[127,130861,170],{"class":147},[19,130863,130864],{},"②可以为父亲元素定义上内边距",[19,130866,130867],{},"③可以为父亲元素添加overflow:hidden",[23,130869],{"style":25,"src":130870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[117,130872,130873],{"className":119,"code":130778,"language":121,"meta":122,"style":122},[124,130874,130875,130879,130885,130899],{"__ignoreMap":122},[127,130876,130877],{"class":129,"line":130},[127,130878,130785],{"class":133},[127,130880,130881,130883],{"class":129,"line":137},[127,130882,130790],{"class":143},[127,130884,148],{"class":147},[127,130886,130887,130889,130891,130893,130895,130897],{"class":129,"line":151},[127,130888,71003],{"class":154},[127,130890,158],{"class":147},[127,130892,867],{"class":154},[127,130894,52093],{"class":154},[127,130896,130805],{"class":147},[127,130898,130808],{"class":133},[127,130900,130901],{"class":129,"line":167},[127,130902,170],{"class":147},[23,130904],{"style":25,"src":130905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130907,130908],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130910,130911],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[62,130913,130915],{"id":130914},"_914-清除内外边距","9.1.4 清除内外边距",[19,130917,130918],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[117,130920,130921],{"className":119,"code":130778,"language":121,"meta":122,"style":122},[124,130922,130923,130927,130933,130947],{"__ignoreMap":122},[127,130924,130925],{"class":129,"line":130},[127,130926,130785],{"class":133},[127,130928,130929,130931],{"class":129,"line":137},[127,130930,130790],{"class":143},[127,130932,148],{"class":147},[127,130934,130935,130937,130939,130941,130943,130945],{"class":129,"line":151},[127,130936,71003],{"class":154},[127,130938,158],{"class":147},[127,130940,867],{"class":154},[127,130942,52093],{"class":154},[127,130944,130805],{"class":147},[127,130946,130808],{"class":133},[127,130948,130949],{"class":129,"line":167},[127,130950,170],{"class":147},[19,130952,130953],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[62,130955,130957],{"id":130956},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1681,130959,130960,130963,130966,130969,130972,130975],{},[635,130961,130962],{},"文件→打开 ：可以打开我们要测量的图片",[635,130964,130965],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[635,130967,130968],{},"右击标尺，把里面的单位改为像素",[635,130970,130971],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[635,130973,130974],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[635,130976,130977],{},"用选区拖动 可以测量大小",[23,130979],{"style":25,"src":130980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1681,130982,130983,130986],{},[635,130984,130985],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[635,130987,130988],{},"吸管取色工具",[23,130990],{"style":25,"src":130991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[62,130993,130995],{"id":130994},"_916-案例","9.1.6 案例",[632,130997,130998],{},[635,130999,131000],{},"小米商品",[23,131002],{"style":25,"src":131003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[117,131005,131006],{"className":119,"code":130778,"language":121,"meta":122,"style":122},[124,131007,131008,131012,131018,131032],{"__ignoreMap":122},[127,131009,131010],{"class":129,"line":130},[127,131011,130785],{"class":133},[127,131013,131014,131016],{"class":129,"line":137},[127,131015,130790],{"class":143},[127,131017,148],{"class":147},[127,131019,131020,131022,131024,131026,131028,131030],{"class":129,"line":151},[127,131021,71003],{"class":154},[127,131023,158],{"class":147},[127,131025,867],{"class":154},[127,131027,52093],{"class":154},[127,131029,130805],{"class":147},[127,131031,130808],{"class":133},[127,131033,131034],{"class":129,"line":167},[127,131035,170],{"class":147},[632,131037,131038],{"start":137},[635,131039,131040],{},"快报模块",[23,131042],{"style":25,"src":131043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[117,131045,131047],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[124,131048,131049,131054,131069,131074],{"__ignoreMap":122},[127,131050,131051],{"class":129,"line":130},[127,131052,131053],{"class":133},"\u003C!-- HTML 代码示例 -->\n",[127,131055,131056,131058,131060,131062,131064,131067],{"class":129,"line":137},[127,131057,1584],{"class":147},[127,131059,52147],{"class":140},[127,131061,54021],{"class":143},[127,131063,725],{"class":147},[127,131065,131066],{"class":781},"\"example\"",[127,131068,51846],{"class":147},[127,131070,131071],{"class":129,"line":151},[127,131072,131073],{"class":147},"  示例内容\n",[127,131075,131076,131078,131080],{"class":129,"line":167},[127,131077,52321],{"class":147},[127,131079,52147],{"class":140},[127,131081,51846],{"class":147},[62,131083,131085],{"id":131084},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[632,131087,131088],{},[635,131089,131090],{},"圆角边框",[19,131092,131093],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[23,131095],{"style":25,"src":131096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[117,131098,131100],{"className":119,"code":131099,"language":121,"meta":122,"style":122},"div {\n  border: 1px solid #ccc;\n}\n",[124,131101,131102,131108,131124],{"__ignoreMap":122},[127,131103,131104,131106],{"class":129,"line":130},[127,131105,52147],{"class":140},[127,131107,148],{"class":147},[127,131109,131110,131112,131114,131116,131118,131120,131122],{"class":129,"line":137},[127,131111,71426],{"class":154},[127,131113,158],{"class":147},[127,131115,893],{"class":154},[127,131117,291],{"class":290},[127,131119,52058],{"class":154},[127,131121,130334],{"class":154},[127,131123,164],{"class":147},[127,131125,131126],{"class":129,"line":151},[127,131127,170],{"class":147},[19,131129,131130],{},"解释:",[1681,131132,131133,131136,131139,131142,131145],{},[635,131134,131135],{},"参数值可以为数值或百分比的形式",[635,131137,131138],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[635,131140,131141],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[635,131143,131144],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[635,131146,131147],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[632,131149,131150],{"start":137},[635,131151,131152],{},"盒子阴影",[117,131154,131156],{"className":119,"code":131155,"language":121,"meta":122,"style":122},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[124,131157,131158,131164,131201],{"__ignoreMap":122},[127,131159,131160,131162],{"class":129,"line":130},[127,131161,52147],{"class":140},[127,131163,148],{"class":147},[127,131165,131166,131169,131171,131173,131175,131177,131179,131181,131183,131185,131187,131189,131191,131193,131195,131197,131199],{"class":129,"line":137},[127,131167,131168],{"class":154},"  box-shadow",[127,131170,158],{"class":147},[127,131172,867],{"class":154},[127,131174,15297],{"class":154},[127,131176,291],{"class":290},[127,131178,2580],{"class":154},[127,131180,291],{"class":290},[127,131182,79296],{"class":154},[127,131184,681],{"class":147},[127,131186,867],{"class":154},[127,131188,12977],{"class":147},[127,131190,867],{"class":154},[127,131192,12977],{"class":147},[127,131194,867],{"class":154},[127,131196,12977],{"class":147},[127,131198,86739],{"class":154},[127,131200,3261],{"class":147},[127,131202,131203],{"class":129,"line":151},[127,131204,170],{"class":147},[814,131206,131207,131215],{},[817,131208,131209],{},[820,131210,131211,131213],{},[823,131212,828],{"align":24276},[823,131214,28029],{"align":24276},[860,131216,131217,131225,131233,131241,131249,131257],{},[820,131218,131219,131222],{},[865,131220,131221],{"align":24276},"h-shadow",[865,131223,131224],{"align":24276},"必需,水平阴影的位置,允许负值",[820,131226,131227,131230],{},[865,131228,131229],{"align":24276},"v-shadow",[865,131231,131232],{"align":24276},"必需,垂直阴影的位置,允许负值",[820,131234,131235,131238],{},[865,131236,131237],{"align":24276},"blur",[865,131239,131240],{"align":24276},"可选,模糊距离,就是影子的虚实",[820,131242,131243,131246],{},[865,131244,131245],{"align":24276},"spread",[865,131247,131248],{"align":24276},"可选,阴影尺寸",[820,131250,131251,131254],{},[865,131252,131253],{"align":24276},"color",[865,131255,131256],{"align":24276},"可选,阴影的颜色",[820,131258,131259,131262],{},[865,131260,131261],{"align":24276},"inset",[865,131263,131264],{"align":24276},"可选,将外部阴影(outset)改为内部阴影",[632,131266,131267],{"start":151},[635,131268,131269],{},"文字阴影",[117,131271,131273],{"className":119,"code":131272,"language":121,"meta":122,"style":122},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[124,131274,131275,131281,131320],{"__ignoreMap":122},[127,131276,131277,131279],{"class":129,"line":130},[127,131278,19],{"class":140},[127,131280,148],{"class":147},[127,131282,131283,131286,131288,131290,131292,131294,131296,131298,131300,131302,131304,131306,131308,131310,131312,131314,131316,131318],{"class":129,"line":137},[127,131284,131285],{"class":154},"  text-shadow",[127,131287,158],{"class":147},[127,131289,893],{"class":154},[127,131291,291],{"class":290},[127,131293,25659],{"class":154},[127,131295,291],{"class":290},[127,131297,15297],{"class":154},[127,131299,291],{"class":290},[127,131301,79296],{"class":154},[127,131303,681],{"class":147},[127,131305,867],{"class":154},[127,131307,12977],{"class":147},[127,131309,867],{"class":154},[127,131311,12977],{"class":147},[127,131313,867],{"class":154},[127,131315,12977],{"class":147},[127,131317,101050],{"class":154},[127,131319,3261],{"class":147},[127,131321,131322],{"class":129,"line":151},[127,131323,170],{"class":147},[814,131325,131326,131334],{},[817,131327,131328],{},[820,131329,131330,131332],{},[823,131331,828],{"align":24276},[823,131333,28029],{"align":24276},[860,131335,131336,131342,131349,131356],{},[820,131337,131338,131340],{},[865,131339,131221],{"align":24276},[865,131341,131224],{"align":24276},[820,131343,131344,131346],{},[865,131345,131229],{"align":24276},[865,131347,131348],{"align":24276},"必需,垂直阴影位置,允许负值",[820,131350,131351,131353],{},[865,131352,131237],{"align":24276},[865,131354,131355],{"align":24276},"可选,模糊的距离",[820,131357,131358,131360],{},[865,131359,131253],{"align":24276},[865,131361,131256],{"align":24276},[14,131363,131365],{"id":131364},"_92-浮动","9.2 浮动",[62,131367,131369],{"id":131368},"_921-浮动介绍","9.2.1 浮动介绍",[19,131371,131372],{},"在16.2中详细介绍",[62,131374,131376],{"id":131375},"_922-清除浮动","9.2.2 清除浮动",[632,131378,131379,131382],{},[635,131380,131381],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[635,131383,131384],{},"清除浮动的本质",[19,131386,131387],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131389,9567],{},[1681,131391,131392,131395,131398],{},[635,131393,131394],{},"如果父盒子本身有高度，则不需要清除浮动",[635,131396,131397],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[635,131399,131400],{},"父级有了高度，就不会影响下面的标准流了",[632,131402,131403],{"start":151},[635,131404,131405],{},"清除浮动样式",[117,131407,131409],{"className":119,"code":131408,"language":121,"meta":122,"style":122},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[124,131410,131411,131418,131429,131433,131440,131450],{"__ignoreMap":122},[127,131412,131413,131416],{"class":129,"line":130},[127,131414,131415],{"class":143},".left",[127,131417,148],{"class":147},[127,131419,131420,131423,131425,131427],{"class":129,"line":137},[127,131421,131422],{"class":154},"  float",[127,131424,158],{"class":147},[127,131426,24276],{"class":154},[127,131428,164],{"class":147},[127,131430,131431],{"class":129,"line":151},[127,131432,170],{"class":147},[127,131434,131435,131438],{"class":129,"line":167},[127,131436,131437],{"class":143},".right",[127,131439,148],{"class":147},[127,131441,131442,131444,131446,131448],{"class":129,"line":415},[127,131443,131422],{"class":154},[127,131445,158],{"class":147},[127,131447,73051],{"class":154},[127,131449,164],{"class":147},[127,131451,131452],{"class":129,"line":421},[127,131453,170],{"class":147},[814,131455,131456,131464],{},[817,131457,131458],{},[820,131459,131460,131462],{},[823,131461,333],{"align":24276},[823,131463,28029],{"align":24276},[860,131465,131466,131473,131480],{},[820,131467,131468,131470],{},[865,131469,24276],{"align":24276},[865,131471,131472],{"align":24276},"不允许左侧有浮动元素（清除左侧浮动的影响）",[820,131474,131475,131477],{},[865,131476,73051],{"align":24276},[865,131478,131479],{"align":24276},"不允许右侧有浮动元素（清除右侧浮动的影响）",[820,131481,131482,131485],{},[865,131483,131484],{"align":24276},"both",[865,131486,131487],{"align":24276},"同时清除左右侧浮动的影响",[19,131489,131490],{},"法一",[19,131492,131493],{},"额外标签法也称为隔墙法",[19,131495,131496],{},"使用方式：",[19,131498,131499],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[117,131501,131502],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,131503,131504,131510,131520,131524,131530,131540],{"__ignoreMap":122},[127,131505,131506,131508],{"class":129,"line":130},[127,131507,131415],{"class":143},[127,131509,148],{"class":147},[127,131511,131512,131514,131516,131518],{"class":129,"line":137},[127,131513,131422],{"class":154},[127,131515,158],{"class":147},[127,131517,24276],{"class":154},[127,131519,164],{"class":147},[127,131521,131522],{"class":129,"line":151},[127,131523,170],{"class":147},[127,131525,131526,131528],{"class":129,"line":167},[127,131527,131437],{"class":143},[127,131529,148],{"class":147},[127,131531,131532,131534,131536,131538],{"class":129,"line":415},[127,131533,131422],{"class":154},[127,131535,158],{"class":147},[127,131537,73051],{"class":154},[127,131539,164],{"class":147},[127,131541,131542],{"class":129,"line":421},[127,131543,170],{"class":147},[19,131545,131546],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131548,131549],{},"优点： 通俗易懂，书写方便",[19,131551,131552],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131554,131555],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131557,131558],{},"法二",[19,131560,131561],{},"父级添加overflow属性",[117,131563,131564],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,131565,131566,131572,131582,131586,131592,131602],{"__ignoreMap":122},[127,131567,131568,131570],{"class":129,"line":130},[127,131569,131415],{"class":143},[127,131571,148],{"class":147},[127,131573,131574,131576,131578,131580],{"class":129,"line":137},[127,131575,131422],{"class":154},[127,131577,158],{"class":147},[127,131579,24276],{"class":154},[127,131581,164],{"class":147},[127,131583,131584],{"class":129,"line":151},[127,131585,170],{"class":147},[127,131587,131588,131590],{"class":129,"line":167},[127,131589,131437],{"class":143},[127,131591,148],{"class":147},[127,131593,131594,131596,131598,131600],{"class":129,"line":415},[127,131595,131422],{"class":154},[127,131597,158],{"class":147},[127,131599,73051],{"class":154},[127,131601,164],{"class":147},[127,131603,131604],{"class":129,"line":421},[127,131605,170],{"class":147},[19,131607,131608],{},"overflow: hidden;",[19,131610,131611],{},"优点：代码简洁",[19,131613,131614],{},"缺点：无法显示溢出的部分",[19,131616,131617],{},"注意：是给父元素添加代码",[19,131619,131620],{},"法三",[19,131622,131623],{},"父级添加after伪元素",[19,131625,131626,131629],{},[131627,131628],"after",{}," 方式是额外标签法的升级版",[19,131631,131632],{},"使用的时候复制就可以",[117,131634,131635],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,131636,131637,131643,131653,131657,131663,131673],{"__ignoreMap":122},[127,131638,131639,131641],{"class":129,"line":130},[127,131640,131415],{"class":143},[127,131642,148],{"class":147},[127,131644,131645,131647,131649,131651],{"class":129,"line":137},[127,131646,131422],{"class":154},[127,131648,158],{"class":147},[127,131650,24276],{"class":154},[127,131652,164],{"class":147},[127,131654,131655],{"class":129,"line":151},[127,131656,170],{"class":147},[127,131658,131659,131661],{"class":129,"line":167},[127,131660,131437],{"class":143},[127,131662,148],{"class":147},[127,131664,131665,131667,131669,131671],{"class":129,"line":415},[127,131666,131422],{"class":154},[127,131668,158],{"class":147},[127,131670,73051],{"class":154},[127,131672,164],{"class":147},[127,131674,131675],{"class":129,"line":421},[127,131676,170],{"class":147},[19,131678,131679],{},"优点：没有增加标签，结构更简单",[19,131681,131682],{},"缺点：照顾低版本浏览器",[19,131684,131685],{},"代表网站： 百度、淘宝网、网易等",[19,131687,131688],{},"法四",[19,131690,131691],{},"父级添加双伪元素",[117,131693,131694],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,131695,131696,131702,131712,131716,131722,131732],{"__ignoreMap":122},[127,131697,131698,131700],{"class":129,"line":130},[127,131699,131415],{"class":143},[127,131701,148],{"class":147},[127,131703,131704,131706,131708,131710],{"class":129,"line":137},[127,131705,131422],{"class":154},[127,131707,158],{"class":147},[127,131709,24276],{"class":154},[127,131711,164],{"class":147},[127,131713,131714],{"class":129,"line":151},[127,131715,170],{"class":147},[127,131717,131718,131720],{"class":129,"line":167},[127,131719,131437],{"class":143},[127,131721,148],{"class":147},[127,131723,131724,131726,131728,131730],{"class":129,"line":415},[127,131725,131422],{"class":154},[127,131727,158],{"class":147},[127,131729,73051],{"class":154},[127,131731,164],{"class":147},[127,131733,131734],{"class":129,"line":421},[127,131735,170],{"class":147},[19,131737,131738],{},"优点：代码更简洁",[19,131740,131682],{},[19,131742,131743],{},"代表网站：小米、腾讯等",[14,131745,131747],{"id":131746},"_93-ps切图","9.3 PS切图",[62,131749,131751],{"id":131750},"_931-常见图片格式","9.3.1 常见图片格式",[814,131753,131754,131764],{},[817,131755,131756],{},[820,131757,131758,131761],{},[823,131759,131760],{"align":24276},"jpg图像格式",[823,131762,131763],{"align":24276},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[860,131765,131766,131774,131782],{},[820,131767,131768,131771],{},[865,131769,131770],{"align":24276},"gif图像格式",[865,131772,131773],{"align":24276},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[820,131775,131776,131779],{},[865,131777,131778],{"align":24276},"png图像格式",[865,131780,131781],{"align":24276},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[820,131783,131784,131787],{},[865,131785,131786],{"align":24276},"PSD图像格式",[865,131788,131789],{"align":24276},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[62,131791,131793],{"id":131792},"_932-图层切图","9.3.2 图层切图",[19,131795,131796],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131798,131799],{},"按住shift选中两个图层->图层菜单->合并图层",[62,131801,131803],{"id":131802},"_933-切片切图","9.3.3 切片切图",[1681,131805,131806,131809],{},[635,131807,131808],{},"利用切片工具手动划出",[635,131810,131811],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[62,131813,131815],{"id":131814},"_934-切图步骤","9.3.4 切图步骤",[19,131817,131818],{},"用切片工具选中：",[23,131820],{"style":25,"src":131821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131823,131824],{},"文件 -> 导出",[23,131826],{"style":25,"src":131827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[575,131829,131830],{},"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":122,"searchDepth":137,"depth":137,"links":131832},[131833,131842,131846],{"id":130269,"depth":137,"text":130270,"children":131834},[131835,131836,131837,131838,131839,131840,131841],{"id":130294,"depth":151,"text":130295},{"id":130585,"depth":151,"text":130586},{"id":130714,"depth":151,"text":130715},{"id":130914,"depth":151,"text":130915},{"id":130956,"depth":151,"text":130957},{"id":130994,"depth":151,"text":130995},{"id":131084,"depth":151,"text":131085},{"id":131364,"depth":137,"text":131365,"children":131843},[131844,131845],{"id":131368,"depth":151,"text":131369},{"id":131375,"depth":151,"text":131376},{"id":131746,"depth":137,"text":131747,"children":131847},[131848,131849,131850,131851],{"id":131750,"depth":151,"text":131751},{"id":131792,"depth":151,"text":131793},{"id":131802,"depth":151,"text":131803},{"id":131814,"depth":151,"text":131815},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130261,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131858,"title":131859,"body":131860,"description":603,"extension":604,"meta":132501,"navigation":606,"path":132502,"seo":132503,"stem":132504,"__hash__":132505},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131861,"toc":132489},[131862,131865,131869,131895,131929,131933,131937,131940,131982,131989,131999,132007,132009,132012,132015,132018,132025,132039,132043,132046,132075,132079,132082,132096,132100,132103,132131,132135,132138,132164,132168,132173,132206,132211,132239,132243,132260,132306,132311,132355,132372,132479,132487],[10,131863,131859],{"id":131864},"_10-css规范与学成在线案例",[14,131866,131868],{"id":131867},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[632,131870,131871,131877,131883,131889],{},[635,131872,131873,131876],{},[30,131874,131875],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[635,131878,131879,131882],{},[30,131880,131881],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[635,131884,131885,131888],{},[30,131886,131887],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[635,131890,131891,131894],{},[30,131892,131893],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[117,131896,131897],{"className":119,"code":130306,"language":121,"meta":122,"style":122},[124,131898,131899,131903,131909,131925],{"__ignoreMap":122},[127,131900,131901],{"class":129,"line":130},[127,131902,130313],{"class":133},[127,131904,131905,131907],{"class":129,"line":137},[127,131906,52147],{"class":140},[127,131908,148],{"class":147},[127,131910,131911,131913,131915,131917,131919,131921,131923],{"class":129,"line":151},[127,131912,71426],{"class":154},[127,131914,158],{"class":147},[127,131916,893],{"class":154},[127,131918,291],{"class":290},[127,131920,52058],{"class":154},[127,131922,130334],{"class":154},[127,131924,164],{"class":147},[127,131926,131927],{"class":129,"line":167},[127,131928,170],{"class":147},[14,131930,131932],{"id":131931},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[62,131934,131936],{"id":131935},"_1021-header头部制作","10.2.1 header头部制作",[23,131938],{"style":25,"src":131939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1681,131941,131942,131949,131956,131962,131969,131976],{},[635,131943,131944,131945,131948],{},"1号是版心盒子 ",[30,131946,131947],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[635,131950,131951,131952,131955],{},"版心盒子 里面包含 2号盒子 ",[30,131953,131954],{},"logo"," 图标",[635,131957,131958,131959,131961],{},"版心盒子 里面包含 3号盒子 ",[30,131960,54248],{}," 导航栏",[635,131963,131964,131965,131968],{},"版心盒子 里面包含 4号盒子 ",[30,131966,131967],{},"search"," 搜索框",[635,131970,131971,131972,131975],{},"版心盒子 里面包含 5号盒子 ",[30,131973,131974],{},"user"," 个人信息",[635,131977,131978,131979],{},"注意，要求里面的 ",[30,131980,131981],{},"4个子盒子 必须都浮动",[632,131983,131984],{},[635,131985,131986],{},[30,131987,131988],{},"导航栏注意点:",[19,131990,131991,131992,131995,131996],{},"实际开发中， ",[30,131993,131994],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[30,131997,131998],{},"用 li 包含链接(li+a)的做法",[1681,132000,132001,132004],{},[635,132002,132003],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[635,132005,132006],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132008,9567],{},[19,132010,132011],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132013,132014],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132016,132017],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[632,132019,132020],{"start":137},[635,132021,132022],{},[30,132023,132024],{},"4号盒子search的细节：",[1681,132026,132027,132030,132033],{},[635,132028,132029],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[635,132031,132032],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[635,132034,132035,132038],{},[124,132036,132037],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[62,132040,132042],{"id":132041},"_1022-banner制作","10.2.2 banner制作",[23,132044],{"style":25,"src":132045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1681,132047,132048,132055,132061,132068],{},[635,132049,132050,132051,132054],{},"1号盒子是通栏的大盒子 ",[30,132052,132053],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[635,132056,132057,132058,132060],{},"2号盒子是版心 ",[30,132059,1469],{}," ， 要水平居中对齐",[635,132062,132063,132064,132067],{},"3号盒子版心内，左对齐 ",[30,132065,132066],{},"subnav"," 侧导航栏",[635,132069,132070,132071,132074],{},"4号盒子版心内，右对齐 ",[30,132072,132073],{},"course"," 课程",[62,132076,132078],{"id":132077},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[23,132080],{"style":25,"src":132081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1681,132083,132084,132087,132090,132093],{},[635,132085,132086],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[635,132088,132089],{},"1号盒子是标题 H3 左侧浮动",[635,132091,132092],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[635,132094,132095],{},"3号盒子 右浮动 mod 修改",[62,132097,132099],{"id":132098},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[23,132101],{"style":25,"src":132102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1681,132104,132105,132111,132118,132125,132128],{},[635,132106,132107,132108,132110],{},"1号盒子为最大的盒子 ",[30,132109,54249],{}," 版心水平居中对齐",[635,132112,132113,132114,132117],{},"2号盒子为上面部分 ",[30,132115,132116],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[635,132119,132120,132121,132124],{},"3号盒子为底下部分 ",[30,132122,132123],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[635,132126,132127],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[635,132129,132130],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[62,132132,132134],{"id":132133},"_1025-底部模块制作","10.2.5 底部模块制作",[23,132136],{"style":25,"src":132137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1681,132139,132140,132147,132150,132157],{},[635,132141,132142,132143,132146],{},"1号盒子通栏大盒子 底部 ",[30,132144,132145],{},"footer"," 给高度 底色是白色",[635,132148,132149],{},"2号盒子版心水平居中",[635,132151,132152,132153,132156],{},"3号盒子版权 ",[30,132154,132155],{},"copyright"," 左对齐",[635,132158,132159,132160,132163],{},"4号盒子 链接组 ",[30,132161,132162],{},"links"," 右对齐",[62,132165,132167],{"id":132166},"_1026-代码模块","10.2.6 代码模块",[632,132169,132170],{},[635,132171,132172],{},"html部分",[117,132174,132176],{"className":127689,"code":132175,"language":127691,"meta":122,"style":122},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[124,132177,132178],{"__ignoreMap":122},[127,132179,132180,132182,132184,132186,132188,132191,132194,132196,132199,132202,132204],{"class":129,"line":130},[127,132181,1584],{"class":147},[127,132183,457],{"class":140},[127,132185,61590],{"class":143},[127,132187,725],{"class":147},[127,132189,132190],{"class":781},"\"https:\u002F\u002Fexample.com\"",[127,132192,132193],{"class":143}," target",[127,132195,725],{"class":147},[127,132197,132198],{"class":781},"\"_blank\"",[127,132200,132201],{"class":147},">链接文字\u003C\u002F",[127,132203,457],{"class":140},[127,132205,51846],{"class":147},[632,132207,132208],{"start":137},[635,132209,132210],{},"css部分",[117,132212,132213],{"className":127689,"code":132175,"language":127691,"meta":122,"style":122},[124,132214,132215],{"__ignoreMap":122},[127,132216,132217,132219,132221,132223,132225,132227,132229,132231,132233,132235,132237],{"class":129,"line":130},[127,132218,1584],{"class":147},[127,132220,457],{"class":140},[127,132222,61590],{"class":143},[127,132224,725],{"class":147},[127,132226,132190],{"class":781},[127,132228,132193],{"class":143},[127,132230,725],{"class":147},[127,132232,132198],{"class":781},[127,132234,132201],{"class":147},[127,132236,457],{"class":140},[127,132238,51846],{"class":147},[62,132240,132242],{"id":132241},"_1027-收获","10.2.7 收获",[632,132244,132245,132248,132251,132254,132257],{},[635,132246,132247],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[635,132249,132250],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[635,132252,132253],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[635,132255,132256],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[635,132258,132259],{},"遗忘代码",[117,132261,132263],{"className":119,"code":132262,"language":121,"meta":122,"style":122},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[124,132264,132265,132287,132292,132302],{"__ignoreMap":122},[127,132266,132267,132269,132271,132273,132275,132277,132279,132281,132283,132285],{"class":129,"line":130},[127,132268,52147],{"class":140},[127,132270,12977],{"class":147},[127,132272,19],{"class":140},[127,132274,12977],{"class":147},[127,132276,10],{"class":140},[127,132278,12977],{"class":147},[127,132280,1681],{"class":140},[127,132282,12977],{"class":147},[127,132284,635],{"class":140},[127,132286,148],{"class":147},[127,132288,132289],{"class":129,"line":137},[127,132290,132291],{"class":133},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[127,132293,132294,132296,132298,132300],{"class":129,"line":151},[127,132295,128558],{"class":154},[127,132297,158],{"class":147},[127,132299,61402],{"class":154},[127,132301,164],{"class":147},[127,132303,132304],{"class":129,"line":167},[127,132305,170],{"class":147},[632,132307,132308],{"start":421},[635,132309,132310],{},"html引css的程序",[117,132312,132313],{"className":119,"code":132262,"language":121,"meta":122,"style":122},[124,132314,132315,132337,132341,132351],{"__ignoreMap":122},[127,132316,132317,132319,132321,132323,132325,132327,132329,132331,132333,132335],{"class":129,"line":130},[127,132318,52147],{"class":140},[127,132320,12977],{"class":147},[127,132322,19],{"class":140},[127,132324,12977],{"class":147},[127,132326,10],{"class":140},[127,132328,12977],{"class":147},[127,132330,1681],{"class":140},[127,132332,12977],{"class":147},[127,132334,635],{"class":140},[127,132336,148],{"class":147},[127,132338,132339],{"class":129,"line":137},[127,132340,132291],{"class":133},[127,132342,132343,132345,132347,132349],{"class":129,"line":151},[127,132344,128558],{"class":154},[127,132346,158],{"class":147},[127,132348,61402],{"class":154},[127,132350,164],{"class":147},[127,132352,132353],{"class":129,"line":167},[127,132354,170],{"class":147},[632,132356,132357,132360,132363,132366,132369],{"start":1766},[635,132358,132359],{},"浮动的盒子不会有外边距合并问题",[635,132361,132362],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[635,132364,132365],{},"ctrl+g快速定位行；shift+alt多个光标",[635,132367,132368],{},"学习上方各个模块的选择器起名方法，以后就这样用",[635,132370,132371],{},"在写选择器时尽量写全一些，例如",[117,132373,132375],{"className":119,"code":132374,"language":121,"meta":122,"style":122},"\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",[124,132376,132377,132382,132398,132403,132418,132423,132438,132443,132458,132463],{"__ignoreMap":122},[127,132378,132379],{"class":129,"line":130},[127,132380,132381],{"class":133},"\u002F* 静态定位（默认） *\u002F\n",[127,132383,132384,132387,132389,132391,132393,132396],{"class":129,"line":137},[127,132385,132386],{"class":143},".static",[127,132388,80336],{"class":147},[127,132390,129302],{"class":154},[127,132392,158],{"class":147},[127,132394,132395],{"class":154},"static",[127,132397,129872],{"class":147},[127,132399,132400],{"class":129,"line":151},[127,132401,132402],{"class":133},"\u002F* 相对定位 *\u002F\n",[127,132404,132405,132408,132410,132412,132414,132416],{"class":129,"line":167},[127,132406,132407],{"class":143},".relative",[127,132409,80336],{"class":147},[127,132411,129302],{"class":154},[127,132413,158],{"class":147},[127,132415,55298],{"class":154},[127,132417,129872],{"class":147},[127,132419,132420],{"class":129,"line":415},[127,132421,132422],{"class":133},"\u002F* 绝对定位 *\u002F\n",[127,132424,132425,132428,132430,132432,132434,132436],{"class":129,"line":421},[127,132426,132427],{"class":143},".absolute",[127,132429,80336],{"class":147},[127,132431,129302],{"class":154},[127,132433,158],{"class":147},[127,132435,55365],{"class":154},[127,132437,129872],{"class":147},[127,132439,132440],{"class":129,"line":1766},[127,132441,132442],{"class":133},"\u002F* 固定定位 *\u002F\n",[127,132444,132445,132448,132450,132452,132454,132456],{"class":129,"line":1856},[127,132446,132447],{"class":143},".fixed",[127,132449,80336],{"class":147},[127,132451,129302],{"class":154},[127,132453,158],{"class":147},[127,132455,86762],{"class":154},[127,132457,129872],{"class":147},[127,132459,132460],{"class":129,"line":1862},[127,132461,132462],{"class":133},"\u002F* 粘性定位 *\u002F\n",[127,132464,132465,132468,132470,132472,132474,132477],{"class":129,"line":1874},[127,132466,132467],{"class":143},".sticky",[127,132469,80336],{"class":147},[127,132471,129302],{"class":154},[127,132473,158],{"class":147},[127,132475,132476],{"class":154},"sticky",[127,132478,129872],{"class":147},[632,132480,132481,132484],{"start":2160},[635,132482,132483],{},"一定要用好注释",[635,132485,132486],{},"浮动的盒子不会有外边距合并的问题",[575,132488,131830],{},{"title":122,"searchDepth":137,"depth":137,"links":132490},[132491,132492],{"id":131867,"depth":137,"text":131868},{"id":131931,"depth":137,"text":131932,"children":132493},[132494,132495,132496,132497,132498,132499,132500],{"id":131935,"depth":151,"text":131936},{"id":132041,"depth":151,"text":132042},{"id":132077,"depth":151,"text":132078},{"id":132098,"depth":151,"text":132099},{"id":132133,"depth":151,"text":132134},{"id":132166,"depth":151,"text":132167},{"id":132241,"depth":151,"text":132242},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131859,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132507,"title":132508,"body":132509,"description":603,"extension":604,"meta":133995,"navigation":606,"path":133996,"seo":133997,"stem":133998,"__hash__":133999},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132510,"toc":133987},[132511,132514,132518,132522,132533,132537,132554,132598,132631,132634,132651,132654,132657,132701,132705,132709,132712,132715,132719,132722,132733,132796,132837,132840,132855,132909,132917,132920,132931,132985,133011,133014,133027,133081,133113,133167,133190,133244,133247,133250,133257,133311,133332,133386,133389,133392,133477,133485,133542,133565,133569,133572,133590,133594,133613,133667,133705,133709,133712,133715,133737,133741,133749,133752,133757,133768,133771,133775,133789,133833,133836,133840,133843,133848,133874,133879,133956,133959,133963,133966,133969,133972,133975,133978,133981,133984],[10,132512,132508],{"id":132513},"_11-传统布局与定位体系",[14,132515,132517],{"id":132516},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[62,132519,132521],{"id":132520},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1681,132523,132524,132527,132530],{},[635,132525,132526],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[635,132528,132529],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[635,132531,132532],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[62,132534,132536],{"id":132535},"_1112-浮动","11.1.2 浮动",[1681,132538,132539,132542,132545,132548,132551],{},[635,132540,132541],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[635,132543,132544],{},"浮动可以改变元素标签默认的排列方式",[635,132546,132547],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[635,132549,132550],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[635,132552,132553],{},"在使用行内块转换时盒子之间是有空隙的",[117,132555,132556],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,132557,132558,132564,132574,132578,132584,132594],{"__ignoreMap":122},[127,132559,132560,132562],{"class":129,"line":130},[127,132561,131415],{"class":143},[127,132563,148],{"class":147},[127,132565,132566,132568,132570,132572],{"class":129,"line":137},[127,132567,131422],{"class":154},[127,132569,158],{"class":147},[127,132571,24276],{"class":154},[127,132573,164],{"class":147},[127,132575,132576],{"class":129,"line":151},[127,132577,170],{"class":147},[127,132579,132580,132582],{"class":129,"line":167},[127,132581,131437],{"class":143},[127,132583,148],{"class":147},[127,132585,132586,132588,132590,132592],{"class":129,"line":415},[127,132587,131422],{"class":154},[127,132589,158],{"class":147},[127,132591,73051],{"class":154},[127,132593,164],{"class":147},[127,132595,132596],{"class":129,"line":421},[127,132597,170],{"class":147},[814,132599,132600,132608],{},[817,132601,132602],{},[820,132603,132604,132606],{},[823,132605,333],{"align":24276},[823,132607,28029],{"align":24276},[860,132609,132610,132617,132624],{},[820,132611,132612,132614],{},[865,132613,469],{"align":24276},[865,132615,132616],{"align":24276},"元素不浮动（默认值）",[820,132618,132619,132621],{},[865,132620,24276],{"align":24276},[865,132622,132623],{"align":24276},"元素向左浮动",[820,132625,132626,132628],{},[865,132627,73051],{"align":24276},[865,132629,132630],{"align":24276},"元素向右浮动",[19,132632,132633],{},"浮动重点：",[1681,132635,132636,132639,132642,132645,132648],{},[635,132637,132638],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[635,132640,132641],{},"浮动的元素会一行内显示并且元素顶部对齐",[635,132643,132644],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[635,132646,132647],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[635,132649,132650],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132652,132653],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132655,132656],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[117,132658,132659],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,132660,132661,132667,132677,132681,132687,132697],{"__ignoreMap":122},[127,132662,132663,132665],{"class":129,"line":130},[127,132664,131415],{"class":143},[127,132666,148],{"class":147},[127,132668,132669,132671,132673,132675],{"class":129,"line":137},[127,132670,131422],{"class":154},[127,132672,158],{"class":147},[127,132674,24276],{"class":154},[127,132676,164],{"class":147},[127,132678,132679],{"class":129,"line":151},[127,132680,170],{"class":147},[127,132682,132683,132685],{"class":129,"line":167},[127,132684,131437],{"class":143},[127,132686,148],{"class":147},[127,132688,132689,132691,132693,132695],{"class":129,"line":415},[127,132690,131422],{"class":154},[127,132692,158],{"class":147},[127,132694,73051],{"class":154},[127,132696,164],{"class":147},[127,132698,132699],{"class":129,"line":421},[127,132700,170],{"class":147},[62,132702,132704],{"id":132703},"_1113-定位","11.1.3 定位",[22539,132706,132708],{"id":132707},"_11131-使用场景","11.1.3.1 使用场景",[19,132710,132711],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132713,132714],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22539,132716,132718],{"id":132717},"_11132-定位组成","11.1.3.2 定位组成",[19,132720,132721],{},"定位 = 定位模式 + 边偏移",[632,132723,132724],{},[635,132725,132726,132729,132730],{},[30,132727,132728],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[30,132731,132732],{},"定位模式",[117,132734,132736],{"className":119,"code":132735,"language":121,"meta":122,"style":122},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[124,132737,132738,132744,132758,132775,132792],{"__ignoreMap":122},[127,132739,132740,132742],{"class":129,"line":130},[127,132741,130790],{"class":143},[127,132743,148],{"class":147},[127,132745,132746,132749,132751,132753,132755],{"class":129,"line":137},[127,132747,132748],{"class":154},"  position",[127,132750,158],{"class":147},[127,132752,55298],{"class":154},[127,132754,130805],{"class":147},[127,132756,132757],{"class":133},"\u002F* 定位模式 *\u002F\n",[127,132759,132760,132763,132765,132767,132769,132772],{"class":129,"line":151},[127,132761,132762],{"class":154},"  top",[127,132764,158],{"class":147},[127,132766,1121],{"class":154},[127,132768,291],{"class":290},[127,132770,132771],{"class":147},";           ",[127,132773,132774],{"class":133},"\u002F* 边偏移：上 *\u002F\n",[127,132776,132777,132780,132782,132784,132786,132789],{"class":129,"line":167},[127,132778,132779],{"class":154},"  left",[127,132781,158],{"class":147},[127,132783,1374],{"class":154},[127,132785,291],{"class":290},[127,132787,132788],{"class":147},";          ",[127,132790,132791],{"class":133},"\u002F* 边偏移：左 *\u002F\n",[127,132793,132794],{"class":129,"line":415},[127,132795,170],{"class":147},[814,132797,132798,132807],{},[817,132799,132800],{},[820,132801,132802,132804],{},[823,132803,828],{"align":24276},[823,132805,132806],{"align":24276},"语义",[860,132808,132809,132816,132823,132830],{},[820,132810,132811,132813],{},[865,132812,132395],{"align":24276},[865,132814,132815],{"align":24276},"静态定位",[820,132817,132818,132820],{},[865,132819,55298],{"align":24276},[865,132821,132822],{"align":24276},"相对定位",[820,132824,132825,132827],{},[865,132826,55365],{"align":24276},[865,132828,132829],{"align":24276},"绝对定位",[820,132831,132832,132834],{},[865,132833,86762],{"align":24276},[865,132835,132836],{"align":24276},"固定定位",[19,132838,132839],{},"（1）静态定位：",[1681,132841,132842,132853],{},[635,132843,132844,132845,132848,132849,132852],{},"静态定位是元素的 ",[30,132846,132847],{},"默认定位方式"," ， ",[30,132850,132851],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[635,132854,5723],{},[117,132856,132857],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,132858,132859,132865,132877,132891,132905],{"__ignoreMap":122},[127,132860,132861,132863],{"class":129,"line":130},[127,132862,130790],{"class":143},[127,132864,148],{"class":147},[127,132866,132867,132869,132871,132873,132875],{"class":129,"line":137},[127,132868,132748],{"class":154},[127,132870,158],{"class":147},[127,132872,55298],{"class":154},[127,132874,130805],{"class":147},[127,132876,132757],{"class":133},[127,132878,132879,132881,132883,132885,132887,132889],{"class":129,"line":151},[127,132880,132762],{"class":154},[127,132882,158],{"class":147},[127,132884,1121],{"class":154},[127,132886,291],{"class":290},[127,132888,132771],{"class":147},[127,132890,132774],{"class":133},[127,132892,132893,132895,132897,132899,132901,132903],{"class":129,"line":167},[127,132894,132779],{"class":154},[127,132896,158],{"class":147},[127,132898,1374],{"class":154},[127,132900,291],{"class":290},[127,132902,132788],{"class":147},[127,132904,132791],{"class":133},[127,132906,132907],{"class":129,"line":415},[127,132908,170],{"class":147},[1681,132910,132911,132914],{},[635,132912,132913],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[635,132915,132916],{},"静态定位在布局时我们几乎不用的",[19,132918,132919],{},"（2）相对定位",[1681,132921,132922,132929],{},[635,132923,132924,132925,132928],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[30,132926,132927],{},"原来的位置"," 来说的（自恋型）",[635,132930,5723],{},[117,132932,132933],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,132934,132935,132941,132953,132967,132981],{"__ignoreMap":122},[127,132936,132937,132939],{"class":129,"line":130},[127,132938,130790],{"class":143},[127,132940,148],{"class":147},[127,132942,132943,132945,132947,132949,132951],{"class":129,"line":137},[127,132944,132748],{"class":154},[127,132946,158],{"class":147},[127,132948,55298],{"class":154},[127,132950,130805],{"class":147},[127,132952,132757],{"class":133},[127,132954,132955,132957,132959,132961,132963,132965],{"class":129,"line":151},[127,132956,132762],{"class":154},[127,132958,158],{"class":147},[127,132960,1121],{"class":154},[127,132962,291],{"class":290},[127,132964,132771],{"class":147},[127,132966,132774],{"class":133},[127,132968,132969,132971,132973,132975,132977,132979],{"class":129,"line":167},[127,132970,132779],{"class":154},[127,132972,158],{"class":147},[127,132974,1374],{"class":154},[127,132976,291],{"class":290},[127,132978,132788],{"class":147},[127,132980,132791],{"class":133},[127,132982,132983],{"class":129,"line":415},[127,132984,170],{"class":147},[1681,132986,132987],{},[635,132988,132989,132990,132992,132993,132995,132996,132999,133000,133003,133004,133006,133007,133010],{},"相对定位的特点：",[54251,132991],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54251,132994],{},"  ② ",[30,132997,132998],{},"原来"," 在标准流的 ",[30,133001,133002],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54251,133005],{},"  ③因此， ",[30,133008,133009],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133012,133013],{},"（3）绝对定位",[1681,133015,133016,133025],{},[635,133017,133018,133020,133021,133024],{},[30,133019,132829],{}," 是元素在移动位置的时候，是相对于它 ",[30,133022,133023],{},"祖先元素"," 来说的（拼爹型）",[635,133026,5723],{},[117,133028,133029],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,133030,133031,133037,133049,133063,133077],{"__ignoreMap":122},[127,133032,133033,133035],{"class":129,"line":130},[127,133034,130790],{"class":143},[127,133036,148],{"class":147},[127,133038,133039,133041,133043,133045,133047],{"class":129,"line":137},[127,133040,132748],{"class":154},[127,133042,158],{"class":147},[127,133044,55298],{"class":154},[127,133046,130805],{"class":147},[127,133048,132757],{"class":133},[127,133050,133051,133053,133055,133057,133059,133061],{"class":129,"line":151},[127,133052,132762],{"class":154},[127,133054,158],{"class":147},[127,133056,1121],{"class":154},[127,133058,291],{"class":290},[127,133060,132771],{"class":147},[127,133062,132774],{"class":133},[127,133064,133065,133067,133069,133071,133073,133075],{"class":129,"line":167},[127,133066,132779],{"class":154},[127,133068,158],{"class":147},[127,133070,1374],{"class":154},[127,133072,291],{"class":290},[127,133074,132788],{"class":147},[127,133076,132791],{"class":133},[127,133078,133079],{"class":129,"line":415},[127,133080,170],{"class":147},[1681,133082,133083,133098,133107,133110],{},[635,133084,133085,133086,133088,133089,133091,133092,133094,133095,133097],{},"绝对定位的特点：",[54251,133087],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54251,133090],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54251,133093],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54251,133096],{},"  (4)固定定位",[635,133099,133100,133102,133103,133106],{},[30,133101,132836],{}," 是元素 ",[30,133104,133105],{},"固定于浏览器可视区的位置"," 。（认死理型）",[635,133108,133109],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[635,133111,133112],{},"语法:",[117,133114,133115],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,133116,133117,133123,133135,133149,133163],{"__ignoreMap":122},[127,133118,133119,133121],{"class":129,"line":130},[127,133120,130790],{"class":143},[127,133122,148],{"class":147},[127,133124,133125,133127,133129,133131,133133],{"class":129,"line":137},[127,133126,132748],{"class":154},[127,133128,158],{"class":147},[127,133130,55298],{"class":154},[127,133132,130805],{"class":147},[127,133134,132757],{"class":133},[127,133136,133137,133139,133141,133143,133145,133147],{"class":129,"line":151},[127,133138,132762],{"class":154},[127,133140,158],{"class":147},[127,133142,1121],{"class":154},[127,133144,291],{"class":290},[127,133146,132771],{"class":147},[127,133148,132774],{"class":133},[127,133150,133151,133153,133155,133157,133159,133161],{"class":129,"line":167},[127,133152,132779],{"class":154},[127,133154,158],{"class":147},[127,133156,1374],{"class":154},[127,133158,291],{"class":290},[127,133160,132788],{"class":147},[127,133162,132791],{"class":133},[127,133164,133165],{"class":129,"line":415},[127,133166,170],{"class":147},[1681,133168,133169,133178],{},[635,133170,133171,133172,133174,133175,133177],{},"特点:",[54251,133173],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54251,133176],{},"  ②固定定位不再占有原先的位置,完全脱标",[635,133179,133180,133181,133183,133184,133186,133187,133189],{},"固定在版心位置的方法:",[54251,133182],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54251,133185],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54251,133188],{},"  实例：",[117,133191,133192],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,133193,133194,133200,133212,133226,133240],{"__ignoreMap":122},[127,133195,133196,133198],{"class":129,"line":130},[127,133197,130790],{"class":143},[127,133199,148],{"class":147},[127,133201,133202,133204,133206,133208,133210],{"class":129,"line":137},[127,133203,132748],{"class":154},[127,133205,158],{"class":147},[127,133207,55298],{"class":154},[127,133209,130805],{"class":147},[127,133211,132757],{"class":133},[127,133213,133214,133216,133218,133220,133222,133224],{"class":129,"line":151},[127,133215,132762],{"class":154},[127,133217,158],{"class":147},[127,133219,1121],{"class":154},[127,133221,291],{"class":290},[127,133223,132771],{"class":147},[127,133225,132774],{"class":133},[127,133227,133228,133230,133232,133234,133236,133238],{"class":129,"line":167},[127,133229,132779],{"class":154},[127,133231,158],{"class":147},[127,133233,1374],{"class":154},[127,133235,291],{"class":290},[127,133237,132788],{"class":147},[127,133239,132791],{"class":133},[127,133241,133242],{"class":129,"line":415},[127,133243,170],{"class":147},[23,133245],{"style":25,"src":133246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133248,133249],{},"(5)粘性定位",[1681,133251,133252,133255],{},[635,133253,133254],{},"粘性定位可以被认为是相对定位和固定定位的混合",[635,133256,5723],{},[117,133258,133259],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,133260,133261,133267,133279,133293,133307],{"__ignoreMap":122},[127,133262,133263,133265],{"class":129,"line":130},[127,133264,130790],{"class":143},[127,133266,148],{"class":147},[127,133268,133269,133271,133273,133275,133277],{"class":129,"line":137},[127,133270,132748],{"class":154},[127,133272,158],{"class":147},[127,133274,55298],{"class":154},[127,133276,130805],{"class":147},[127,133278,132757],{"class":133},[127,133280,133281,133283,133285,133287,133289,133291],{"class":129,"line":151},[127,133282,132762],{"class":154},[127,133284,158],{"class":147},[127,133286,1121],{"class":154},[127,133288,291],{"class":290},[127,133290,132771],{"class":147},[127,133292,132774],{"class":133},[127,133294,133295,133297,133299,133301,133303,133305],{"class":129,"line":167},[127,133296,132779],{"class":154},[127,133298,158],{"class":147},[127,133300,1374],{"class":154},[127,133302,291],{"class":290},[127,133304,132788],{"class":147},[127,133306,132791],{"class":133},[127,133308,133309],{"class":129,"line":415},[127,133310,170],{"class":147},[1681,133312,133313],{},[635,133314,133315,133316,133318,133319,133321,133322,133324,133325,133328,133329,133331],{},"粘性定位的特点：",[54251,133317],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54251,133320],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54251,133323],{},"  ③必须添加 top 、left、right、bottom ",[30,133326,133327],{},"其中一个"," 才有效",[54251,133330],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[117,133333,133334],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,133335,133336,133342,133354,133368,133382],{"__ignoreMap":122},[127,133337,133338,133340],{"class":129,"line":130},[127,133339,130790],{"class":143},[127,133341,148],{"class":147},[127,133343,133344,133346,133348,133350,133352],{"class":129,"line":137},[127,133345,132748],{"class":154},[127,133347,158],{"class":147},[127,133349,55298],{"class":154},[127,133351,130805],{"class":147},[127,133353,132757],{"class":133},[127,133355,133356,133358,133360,133362,133364,133366],{"class":129,"line":151},[127,133357,132762],{"class":154},[127,133359,158],{"class":147},[127,133361,1121],{"class":154},[127,133363,291],{"class":290},[127,133365,132771],{"class":147},[127,133367,132774],{"class":133},[127,133369,133370,133372,133374,133376,133378,133380],{"class":129,"line":167},[127,133371,132779],{"class":154},[127,133373,158],{"class":147},[127,133375,1374],{"class":154},[127,133377,291],{"class":290},[127,133379,132788],{"class":147},[127,133381,132791],{"class":133},[127,133383,133384],{"class":129,"line":415},[127,133385,170],{"class":147},[23,133387],{"style":25,"src":133388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133390,133391],{},"(6)总结",[814,133393,133394,133409],{},[817,133395,133396],{},[820,133397,133398,133400,133403,133406],{},[823,133399,132732],{"align":24276},[823,133401,133402],{"align":24276},"是否脱标",[823,133404,133405],{"align":24276},"移动位置",[823,133407,133408],{"align":24276},"是否常用",[860,133410,133411,133424,133438,133452,133465],{},[820,133412,133413,133416,133418,133421],{},[865,133414,133415],{"align":24276},"Static 静态定位",[865,133417,105207],{"align":24276},[865,133419,133420],{"align":24276},"不能使用边偏移",[865,133422,133423],{"align":24276},"很少",[820,133425,133426,133429,133432,133435],{},[865,133427,133428],{"align":24276},"Relative 相对定位",[865,133430,133431],{"align":24276},"否(占有位置)",[865,133433,133434],{"align":24276},"相对于自身位置移动",[865,133436,133437],{"align":24276},"基本单独使用",[820,133439,133440,133443,133446,133449],{},[865,133441,133442],{"align":24276},"Absolute 绝对定位",[865,133444,133445],{"align":24276},"是(不占有位置)",[865,133447,133448],{"align":24276},"带有定位的父级",[865,133450,133451],{"align":24276},"要和定位父级元素搭配使用",[820,133453,133454,133457,133459,133462],{},[865,133455,133456],{"align":24276},"Fixed 固定定位",[865,133458,133445],{"align":24276},[865,133460,133461],{"align":24276},"浏览器可视区",[865,133463,133464],{"align":24276},"单独使用,不需要父级",[820,133466,133467,133470,133472,133474],{},[865,133468,133469],{"align":24276},"Sticky 粘性定位",[865,133471,133431],{"align":24276},[865,133473,133461],{"align":24276},[865,133475,133476],{"align":24276},"当前阶段少",[632,133478,133479],{"start":137},[635,133480,133481,133484],{},[30,133482,133483],{},"边偏移"," 则决定了该元素的最终位置",[814,133486,133487,133498],{},[817,133488,133489],{},[820,133490,133491,133494,133496],{},[823,133492,133493],{"align":24276},"边偏移属性",[823,133495,28032],{"align":24276},[823,133497,28029],{"align":24276},[860,133499,133500,133511,133522,133532],{},[820,133501,133502,133505,133508],{},[865,133503,133504],{"align":24276},"top",[865,133506,133507],{"align":24276},"top: 80px;",[865,133509,133510],{"align":24276},"顶端偏移量，定义元素相对于父元素上边线的距离",[820,133512,133513,133516,133519],{},[865,133514,133515],{"align":24276},"bottom",[865,133517,133518],{"align":24276},"bottom: 80px ;",[865,133520,133521],{"align":24276},"底部偏移量，定义元素相对于其父元素下边线的距离",[820,133523,133524,133526,133529],{},[865,133525,24276],{"align":24276},[865,133527,133528],{"align":24276},"left: 80px ;",[865,133530,133531],{"align":24276},"左侧偏移量，定义元素相对于其父元素左边线的距离",[820,133533,133534,133536,133539],{},[865,133535,73051],{"align":24276},[865,133537,133538],{"align":24276},"right: 80px ;",[865,133540,133541],{"align":24276},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1681,133543,133544],{},[635,133545,9567,133546,133548,133549,133551,133552,133554,133555,133558,133559,133561,133562,133564],{},[54251,133547],{},"  ① ",[30,133550,133483],{}," 需要和 ",[30,133553,132732],{}," 联合使用， ",[30,133556,133557],{},"单独使用无效"," ；",[54251,133560],{},"  ②top和bottom不要同时使用",[54251,133563],{},"  ③left和right不要同时使用",[22539,133566,133568],{"id":133567},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133570,133571],{},"子级是绝对定位的话，父级要用相对定位",[1681,133573,133574,133577,133580,133583],{},[635,133575,133576],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[635,133578,133579],{},"父盒子需要加定位限制子盒子在父盒子内显示",[635,133581,133582],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[635,133584,133585,133586,133589],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[30,133587,133588],{},"子绝父绝"," 也会遇到",[22539,133591,133593],{"id":133592},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1681,133595,133596,133611],{},[635,133597,133598,133599,133602,133603,133606,133607,133610],{},"在使用 ",[30,133600,133601],{},"定位"," 布局时，可能会 ",[30,133604,133605],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[30,133608,133609],{},"z-index"," 来控制盒子的前后次序 (z轴)",[635,133612,5723],{},[117,133614,133615],{"className":119,"code":132735,"language":121,"meta":122,"style":122},[124,133616,133617,133623,133635,133649,133663],{"__ignoreMap":122},[127,133618,133619,133621],{"class":129,"line":130},[127,133620,130790],{"class":143},[127,133622,148],{"class":147},[127,133624,133625,133627,133629,133631,133633],{"class":129,"line":137},[127,133626,132748],{"class":154},[127,133628,158],{"class":147},[127,133630,55298],{"class":154},[127,133632,130805],{"class":147},[127,133634,132757],{"class":133},[127,133636,133637,133639,133641,133643,133645,133647],{"class":129,"line":151},[127,133638,132762],{"class":154},[127,133640,158],{"class":147},[127,133642,1121],{"class":154},[127,133644,291],{"class":290},[127,133646,132771],{"class":147},[127,133648,132774],{"class":133},[127,133650,133651,133653,133655,133657,133659,133661],{"class":129,"line":167},[127,133652,132779],{"class":154},[127,133654,158],{"class":147},[127,133656,1374],{"class":154},[127,133658,291],{"class":290},[127,133660,132788],{"class":147},[127,133662,132791],{"class":133},[127,133664,133665],{"class":129,"line":415},[127,133666,170],{"class":147},[1681,133668,133669],{},[635,133670,133671,133672,133548,133674,133676,133677,128105,133680,83068,133683,133685,133686,133688,133689,133692,133693,133558,133696,133698,133699,133702,133704],{},"z-index的特性",[54251,133673],{},[30,133675,333],{}," ： ",[30,133678,133679],{},"正整数",[30,133681,133682],{},"负整数",[30,133684,867],{}," ，默认值是 0，数值越大，盒子越靠上；",[54251,133687],{},"  ②如果 ",[30,133690,133691],{},"属性值相同"," ，则按照书写顺序， ",[30,133694,133695],{},"后来居上",[54251,133697],{},"  ③数字后面 ",[30,133700,133701],{},"不能加单位",[54251,133703],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22539,133706,133708],{"id":133707},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133710,133711],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133713,133714],{},"方法:",[1681,133716,133717,133727],{},[635,133718,133719,133720,133723,133724],{},"left: 50%; 让 ",[30,133721,133722],{},"盒子的左侧"," 移动到 ",[30,133725,133726],{},"父级元素的水平中心位置",[635,133728,133729,133730,133733,133734],{},"margin-left: -100px; 让盒子 ",[30,133731,133732],{},"向左"," 移动 ",[30,133735,133736],{},"自身宽度的一半",[22539,133738,133740],{"id":133739},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[632,133742,133743,133746],{},[635,133744,133745],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[635,133747,133748],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133750,133751],{},"也就是说绝对定位和固定定位和浮动类似",[632,133753,133754],{"start":151},[635,133755,133756],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1681,133758,133759,133762,133765],{},[635,133760,133761],{},"可以用inline-block 转换为行内块",[635,133763,133764],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[635,133766,133767],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133769,133770],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22539,133772,133774],{"id":133773},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[632,133776,133777,133780,133783,133786],{},[635,133778,133779],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[635,133781,133782],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[635,133784,133785],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[635,133787,133788],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[117,133790,133791],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,133792,133793,133799,133809,133813,133819,133829],{"__ignoreMap":122},[127,133794,133795,133797],{"class":129,"line":130},[127,133796,131415],{"class":143},[127,133798,148],{"class":147},[127,133800,133801,133803,133805,133807],{"class":129,"line":137},[127,133802,131422],{"class":154},[127,133804,158],{"class":147},[127,133806,24276],{"class":154},[127,133808,164],{"class":147},[127,133810,133811],{"class":129,"line":151},[127,133812,170],{"class":147},[127,133814,133815,133817],{"class":129,"line":167},[127,133816,131437],{"class":143},[127,133818,148],{"class":147},[127,133820,133821,133823,133825,133827],{"class":129,"line":415},[127,133822,131422],{"class":154},[127,133824,158],{"class":147},[127,133826,73051],{"class":154},[127,133828,164],{"class":147},[127,133830,133831],{"class":129,"line":421},[127,133832,170],{"class":147},[23,133834],{"style":25,"src":133835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22539,133837,133839],{"id":133838},"_11138-轮播图","11.1.3.8 轮播图",[23,133841],{"style":25,"src":133842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[632,133844,133845],{},[635,133846,133847],{},"制作顺序:",[1681,133849,133850,133853,133856,133865],{},[635,133851,133852],{},"大盒子我们类名为： tb-promo 淘宝广告",[635,133854,133855],{},"里面先放一张图片",[635,133857,133858,133859,133861,133862,133864],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54251,133860],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54251,133863],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[635,133866,133867,133868,133870,133871,133873],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54251,133869],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54251,133872],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[632,133875,133876],{"start":137},[635,133877,133878],{},"代码模块",[117,133880,133882],{"className":119,"code":133881,"language":121,"meta":122,"style":122},"\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",[124,133883,133884,133889,133896,133906,133916,133926,133930,133935,133942,133952],{"__ignoreMap":122},[127,133885,133886],{"class":129,"line":130},[127,133887,133888],{"class":133},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[127,133890,133891,133894],{"class":129,"line":137},[127,133892,133893],{"class":143},".son",[127,133895,148],{"class":147},[127,133897,133898,133900,133902,133904],{"class":129,"line":151},[127,133899,132748],{"class":154},[127,133901,158],{"class":147},[127,133903,55365],{"class":154},[127,133905,164],{"class":147},[127,133907,133908,133910,133912,133914],{"class":129,"line":167},[127,133909,132762],{"class":154},[127,133911,158],{"class":147},[127,133913,867],{"class":154},[127,133915,164],{"class":147},[127,133917,133918,133920,133922,133924],{"class":129,"line":415},[127,133919,132779],{"class":154},[127,133921,158],{"class":147},[127,133923,867],{"class":154},[127,133925,164],{"class":147},[127,133927,133928],{"class":129,"line":421},[127,133929,170],{"class":147},[127,133931,133932],{"class":129,"line":1766},[127,133933,133934],{"class":133},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[127,133936,133937,133940],{"class":129,"line":1856},[127,133938,133939],{"class":143},".father",[127,133941,148],{"class":147},[127,133943,133944,133946,133948,133950],{"class":129,"line":1862},[127,133945,132748],{"class":154},[127,133947,158],{"class":147},[127,133949,55298],{"class":154},[127,133951,164],{"class":147},[127,133953,133954],{"class":129,"line":1874},[127,133955,170],{"class":147},[19,133957,133958],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[62,133960,133962],{"id":133961},"_1114-定位数值的移动","11.1.4 定位数值的移动",[23,133964],{"style":25,"src":133965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133967,133968],{},"✨ 黄金口诀：",[19,133970,133971],{},"\"TOP正下负上，LEFT正右负左\"",[19,133973,133974],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133976,133977],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133979,133980],{},"✨ 简单记：",[19,133982,133983],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[575,133985,133986],{},"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":122,"searchDepth":137,"depth":137,"links":133988},[133989],{"id":132516,"depth":137,"text":132517,"children":133990},[133991,133992,133993,133994],{"id":132520,"depth":151,"text":132521},{"id":132535,"depth":151,"text":132536},{"id":132703,"depth":151,"text":132704},{"id":133961,"depth":151,"text":133962},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132508,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134001,"title":134002,"body":134003,"description":603,"extension":604,"meta":135426,"navigation":606,"path":135427,"seo":135428,"stem":135429,"__hash__":135430},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134004,"toc":135405},[134005,134008,134012,134020,134024,134029,134037,134049,134053,134058,134066,134077,134081,134086,134127,134135,134139,134142,134145,134148,134242,134245,134339,134342,134436,134439,134442,134477,134480,134483,134513,134516,134519,134522,134525,134528,134531,134534,134604,134607,134611,134615,134656,134660,134666,134669,134672,134676,134679,134682,134685,134766,134769,134772,134776,134780,134783,134786,134789,134792,134795,134801,134810,134814,134833,134837,134847,134850,134853,134856,134859,134862,134865,134868,134871,134880,134884,134893,134896,134901,134954,134959,135125,135128,135131,135136,135139,135142,135145,135148,135153,135301,135304,135307,135312,135315,135320,135354,135357,135360,135364,135367,135374,135377,135380,135383,135386,135389,135392,135395,135399,135402],[10,134006,134002],{"id":134007},"_12-显示隐藏与图形资源",[14,134009,134011],{"id":134010},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1681,134013,134014,134017],{},[635,134015,134016],{},"目的:让一个元素在页面中消失或者显示出来",[635,134018,134019],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[62,134021,134023],{"id":134022},"_1211-display-显示","12.1.1 display 显示",[632,134025,134026],{},[635,134027,134028],{},"display 设置或检索对象是否及如何显示",[1681,134030,134031,134034],{},[635,134032,134033],{},"display: none;隐藏对象",[635,134035,134036],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[632,134038,134039,134046],{"start":137},[635,134040,134041,134042,134045],{},"特点： display 隐藏元素后， ",[30,134043,134044],{},"不再占"," 有原来的位置",[635,134047,134048],{},"在js中使用非常的广泛",[62,134050,134052],{"id":134051},"_1212-visibility可见性","12.1.2 visibility可见性",[632,134054,134055],{},[635,134056,134057],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1681,134059,134060,134063],{},[635,134061,134062],{},"visibility： visible；元素可见",[635,134064,134065],{},"visibility：hidden；元素隐藏",[632,134067,134068,134071,134074],{"start":137},[635,134069,134070],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[635,134072,134073],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[635,134075,134076],{},"隐藏后继续占有原有位置",[62,134078,134080],{"id":134079},"_1213-overflow溢出","12.1.3 overflow溢出",[1681,134082,134083],{},[635,134084,134085],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[814,134087,134088,134096],{},[817,134089,134090],{},[820,134091,134092,134094],{},[823,134093,333],{"align":24276},[823,134095,28029],{"align":24276},[860,134097,134098,134106,134113,134120],{},[820,134099,134100,134103],{},[865,134101,134102],{"align":24276},"visible",[865,134104,134105],{"align":24276},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[820,134107,134108,134110],{},[865,134109,62247],{"align":24276},[865,134111,134112],{"align":24276},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[820,134114,134115,134117],{},[865,134116,129362],{"align":24276},[865,134118,134119],{"align":24276},"不管超出内容否，总是显示滚动条",[820,134121,134122,134124],{},[865,134123,73192],{"align":24276},[865,134125,134126],{"align":24276},"超出自动显示滚动条，不超出不显示滚动条",[1681,134128,134129,134132],{},[635,134130,134131],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[635,134133,134134],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[62,134136,134138],{"id":134137},"_1214-案例收获","12.1.4 案例收获",[23,134140],{"style":25,"src":134141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134143,134144],{},"问题：没做出来动态效果，使用hover没实现",[19,134146,134147],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[117,134149,134150],{"className":119,"code":132374,"language":121,"meta":122,"style":122},[124,134151,134152,134156,134170,134174,134188,134192,134206,134210,134224,134228],{"__ignoreMap":122},[127,134153,134154],{"class":129,"line":130},[127,134155,132381],{"class":133},[127,134157,134158,134160,134162,134164,134166,134168],{"class":129,"line":137},[127,134159,132386],{"class":143},[127,134161,80336],{"class":147},[127,134163,129302],{"class":154},[127,134165,158],{"class":147},[127,134167,132395],{"class":154},[127,134169,129872],{"class":147},[127,134171,134172],{"class":129,"line":151},[127,134173,132402],{"class":133},[127,134175,134176,134178,134180,134182,134184,134186],{"class":129,"line":167},[127,134177,132407],{"class":143},[127,134179,80336],{"class":147},[127,134181,129302],{"class":154},[127,134183,158],{"class":147},[127,134185,55298],{"class":154},[127,134187,129872],{"class":147},[127,134189,134190],{"class":129,"line":415},[127,134191,132422],{"class":133},[127,134193,134194,134196,134198,134200,134202,134204],{"class":129,"line":421},[127,134195,132427],{"class":143},[127,134197,80336],{"class":147},[127,134199,129302],{"class":154},[127,134201,158],{"class":147},[127,134203,55365],{"class":154},[127,134205,129872],{"class":147},[127,134207,134208],{"class":129,"line":1766},[127,134209,132442],{"class":133},[127,134211,134212,134214,134216,134218,134220,134222],{"class":129,"line":1856},[127,134213,132447],{"class":143},[127,134215,80336],{"class":147},[127,134217,129302],{"class":154},[127,134219,158],{"class":147},[127,134221,86762],{"class":154},[127,134223,129872],{"class":147},[127,134225,134226],{"class":129,"line":1862},[127,134227,132462],{"class":133},[127,134229,134230,134232,134234,134236,134238,134240],{"class":129,"line":1874},[127,134231,132467],{"class":143},[127,134233,80336],{"class":147},[127,134235,129302],{"class":154},[127,134237,158],{"class":147},[127,134239,132476],{"class":154},[127,134241,129872],{"class":147},[19,134243,134244],{},"完整代码：",[117,134246,134247],{"className":119,"code":132374,"language":121,"meta":122,"style":122},[124,134248,134249,134253,134267,134271,134285,134289,134303,134307,134321,134325],{"__ignoreMap":122},[127,134250,134251],{"class":129,"line":130},[127,134252,132381],{"class":133},[127,134254,134255,134257,134259,134261,134263,134265],{"class":129,"line":137},[127,134256,132386],{"class":143},[127,134258,80336],{"class":147},[127,134260,129302],{"class":154},[127,134262,158],{"class":147},[127,134264,132395],{"class":154},[127,134266,129872],{"class":147},[127,134268,134269],{"class":129,"line":151},[127,134270,132402],{"class":133},[127,134272,134273,134275,134277,134279,134281,134283],{"class":129,"line":167},[127,134274,132407],{"class":143},[127,134276,80336],{"class":147},[127,134278,129302],{"class":154},[127,134280,158],{"class":147},[127,134282,55298],{"class":154},[127,134284,129872],{"class":147},[127,134286,134287],{"class":129,"line":415},[127,134288,132422],{"class":133},[127,134290,134291,134293,134295,134297,134299,134301],{"class":129,"line":421},[127,134292,132427],{"class":143},[127,134294,80336],{"class":147},[127,134296,129302],{"class":154},[127,134298,158],{"class":147},[127,134300,55365],{"class":154},[127,134302,129872],{"class":147},[127,134304,134305],{"class":129,"line":1766},[127,134306,132442],{"class":133},[127,134308,134309,134311,134313,134315,134317,134319],{"class":129,"line":1856},[127,134310,132447],{"class":143},[127,134312,80336],{"class":147},[127,134314,129302],{"class":154},[127,134316,158],{"class":147},[127,134318,86762],{"class":154},[127,134320,129872],{"class":147},[127,134322,134323],{"class":129,"line":1862},[127,134324,132462],{"class":133},[127,134326,134327,134329,134331,134333,134335,134337],{"class":129,"line":1874},[127,134328,132467],{"class":143},[127,134330,80336],{"class":147},[127,134332,129302],{"class":154},[127,134334,158],{"class":147},[127,134336,132476],{"class":154},[127,134338,129872],{"class":147},[19,134340,134341],{},"分布思路重点详解：",[117,134343,134344],{"className":119,"code":132374,"language":121,"meta":122,"style":122},[124,134345,134346,134350,134364,134368,134382,134386,134400,134404,134418,134422],{"__ignoreMap":122},[127,134347,134348],{"class":129,"line":130},[127,134349,132381],{"class":133},[127,134351,134352,134354,134356,134358,134360,134362],{"class":129,"line":137},[127,134353,132386],{"class":143},[127,134355,80336],{"class":147},[127,134357,129302],{"class":154},[127,134359,158],{"class":147},[127,134361,132395],{"class":154},[127,134363,129872],{"class":147},[127,134365,134366],{"class":129,"line":151},[127,134367,132402],{"class":133},[127,134369,134370,134372,134374,134376,134378,134380],{"class":129,"line":167},[127,134371,132407],{"class":143},[127,134373,80336],{"class":147},[127,134375,129302],{"class":154},[127,134377,158],{"class":147},[127,134379,55298],{"class":154},[127,134381,129872],{"class":147},[127,134383,134384],{"class":129,"line":415},[127,134385,132422],{"class":133},[127,134387,134388,134390,134392,134394,134396,134398],{"class":129,"line":421},[127,134389,132427],{"class":143},[127,134391,80336],{"class":147},[127,134393,129302],{"class":154},[127,134395,158],{"class":147},[127,134397,55365],{"class":154},[127,134399,129872],{"class":147},[127,134401,134402],{"class":129,"line":1766},[127,134403,132442],{"class":133},[127,134405,134406,134408,134410,134412,134414,134416],{"class":129,"line":1856},[127,134407,132447],{"class":143},[127,134409,80336],{"class":147},[127,134411,129302],{"class":154},[127,134413,158],{"class":147},[127,134415,86762],{"class":154},[127,134417,129872],{"class":147},[127,134419,134420],{"class":129,"line":1862},[127,134421,132462],{"class":133},[127,134423,134424,134426,134428,134430,134432,134434],{"class":129,"line":1874},[127,134425,132467],{"class":143},[127,134427,80336],{"class":147},[127,134429,129302],{"class":154},[127,134431,158],{"class":147},[127,134433,132476],{"class":154},[127,134435,129872],{"class":147},[23,134437],{"style":25,"src":134438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134440,134441],{},"图片太大，盒子太小，此时需要修改图片的大小",[117,134443,134445],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[124,134446,134447],{"__ignoreMap":122},[127,134448,134449,134451,134453,134455,134457,134460,134462,134464,134467,134470,134472,134475],{"class":129,"line":130},[127,134450,1584],{"class":147},[127,134452,23],{"class":140},[127,134454,55773],{"class":143},[127,134456,725],{"class":147},[127,134458,134459],{"class":781},"\"images\u002Fpic.jpg\"",[127,134461,55781],{"class":143},[127,134463,725],{"class":147},[127,134465,134466],{"class":781},"\"描述文字\"",[127,134468,134469],{"class":143}," title",[127,134471,725],{"class":147},[127,134473,134474],{"class":781},"\"悬停提示\"",[127,134476,51846],{"class":147},[23,134478],{"style":25,"src":134479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134481,134482],{},"制造遮罩层",[117,134484,134485],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,134486,134487],{"__ignoreMap":122},[127,134488,134489,134491,134493,134495,134497,134499,134501,134503,134505,134507,134509,134511],{"class":129,"line":130},[127,134490,1584],{"class":147},[127,134492,23],{"class":140},[127,134494,55773],{"class":143},[127,134496,725],{"class":147},[127,134498,134459],{"class":781},[127,134500,55781],{"class":143},[127,134502,725],{"class":147},[127,134504,134466],{"class":781},[127,134506,134469],{"class":143},[127,134508,725],{"class":147},[127,134510,134474],{"class":781},[127,134512,51846],{"class":147},[19,134514,134515],{},"此时是这样的为标准流",[23,134517],{"style":25,"src":134518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134520,134521],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134523,134524],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134526,134527],{},"让他在中间，用center(background-position)",[19,134529,134530],{},"将需要变的尽可能放到一个盒子中",[19,134532,134533],{},"放大盒子上内部盒子发生变化",[117,134535,134537],{"className":119,"code":134536,"language":121,"meta":122,"style":122},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[124,134538,134539,134545,134555,134559,134566,134576,134588,134600],{"__ignoreMap":122},[127,134540,134541,134543],{"class":129,"line":130},[127,134542,128009],{"class":143},[127,134544,148],{"class":147},[127,134546,134547,134549,134551,134553],{"class":129,"line":137},[127,134548,132748],{"class":154},[127,134550,158],{"class":147},[127,134552,55298],{"class":154},[127,134554,164],{"class":147},[127,134556,134557],{"class":129,"line":151},[127,134558,170],{"class":147},[127,134560,134561,134564],{"class":129,"line":167},[127,134562,134563],{"class":143},".child",[127,134565,148],{"class":147},[127,134567,134568,134570,134572,134574],{"class":129,"line":415},[127,134569,132748],{"class":154},[127,134571,158],{"class":147},[127,134573,55365],{"class":154},[127,134575,164],{"class":147},[127,134577,134578,134580,134582,134584,134586],{"class":129,"line":421},[127,134579,132762],{"class":154},[127,134581,158],{"class":147},[127,134583,1330],{"class":154},[127,134585,1003],{"class":290},[127,134587,164],{"class":147},[127,134589,134590,134592,134594,134596,134598],{"class":129,"line":1766},[127,134591,132779],{"class":154},[127,134593,158],{"class":147},[127,134595,1330],{"class":154},[127,134597,1003],{"class":290},[127,134599,164],{"class":147},[127,134601,134602],{"class":129,"line":1856},[127,134603,170],{"class":147},[19,134605,134606],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134608,134610],{"id":134609},"_122-精灵图","12.2 精灵图",[62,134612,134614],{"id":134613},"_1221-理解","12.2.1 理解",[632,134616,134617,134635],{},[635,134618,134619,134620,132848,134623,134626,134627,134630,134631,134634],{},"目的： ",[30,134621,134622],{},"为了有效地减少服务器接收和发送请求的次数",[30,134624,134625],{},"提高"," 页面的 ",[30,134628,134629],{},"加载速度"," ，出现了 ",[30,134632,134633],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[635,134636,134637,134638,134640,134641,134643,134644,134646,134647,134649,134650,134652,134653,134655],{},"使用精灵图核心：",[54251,134639],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54251,134642],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54251,134645],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54251,134648],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54251,134651],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54251,134654],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[62,134657,134659],{"id":134658},"_1222-扒图","12.2.2 扒图",[117,134661,134664],{"className":134662,"code":134663,"language":5729},[5727],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[124,134665,134663],{"__ignoreMap":122},[23,134667],{"style":25,"src":134668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[23,134670],{"style":25,"src":134671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[62,134673,134675],{"id":134674},"_1223-精灵图的实现","12.2.3 精灵图的实现",[23,134677],{"style":25,"src":134678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134680,134681],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[23,134683],{"style":25,"src":134684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[117,134686,134688],{"className":119,"code":134687,"language":121,"meta":122,"style":122},"\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",[124,134689,134690,134695,134702,134714,134726,134745,134762],{"__ignoreMap":122},[127,134691,134692],{"class":129,"line":130},[127,134693,134694],{"class":133},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[127,134696,134697,134700],{"class":129,"line":137},[127,134698,134699],{"class":143},".icon",[127,134701,148],{"class":147},[127,134703,134704,134706,134708,134710,134712],{"class":129,"line":151},[127,134705,71099],{"class":154},[127,134707,158],{"class":147},[127,134709,1374],{"class":154},[127,134711,291],{"class":290},[127,134713,164],{"class":147},[127,134715,134716,134718,134720,134722,134724],{"class":129,"line":167},[127,134717,71318],{"class":154},[127,134719,158],{"class":147},[127,134721,1374],{"class":154},[127,134723,291],{"class":290},[127,134725,164],{"class":147},[127,134727,134728,134730,134732,134734,134736,134739,134741,134743],{"class":129,"line":415},[127,134729,71142],{"class":154},[127,134731,158],{"class":147},[127,134733,62259],{"class":154},[127,134735,681],{"class":147},[127,134737,134738],{"class":5758},"sprites.png",[127,134740,14256],{"class":147},[127,134742,62269],{"class":154},[127,134744,164],{"class":147},[127,134746,134747,134749,134751,134753,134755,134758,134760],{"class":129,"line":421},[127,134748,129202],{"class":154},[127,134750,158],{"class":147},[127,134752,52299],{"class":154},[127,134754,291],{"class":290},[127,134756,134757],{"class":154}," -20",[127,134759,291],{"class":290},[127,134761,164],{"class":147},[127,134763,134764],{"class":129,"line":1766},[127,134765,170],{"class":147},[23,134767],{"style":25,"src":134768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134770,134771],{},"在前端中坐标轴的正方向是右和下",[14,134773,134775],{"id":134774},"_123-字体图标","12.3 字体图标",[62,134777,134779],{"id":134778},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134781,134782],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134784,134785],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134787,134788],{},"1.图片文件还是比较大的。",[19,134790,134791],{},"2.图片本身放大和缩小会失真。",[19,134793,134794],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134796,134797,134798,26281],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[30,134799,134800],{},"字体图标 iconfont",[19,134802,134803,134806,134807,28925],{},[30,134804,134805],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[30,134808,134809],{},"展示的是图标，本质属于字体",[62,134811,134813],{"id":134812},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1681,134815,134816,134821,134824,134827,134830],{},[635,134817,134818,134820],{},[30,134819,26417],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[635,134822,134823],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[635,134825,134826],{},"兼容性：几乎支持所有的浏览器，请放心使用",[635,134828,134829],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[635,134831,134832],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[62,134834,134836],{"id":134835},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1681,134838,134839],{},[635,134840,134841,134842],{},"icomoon字体库：",[457,134843,134846],{"href":134844,"rel":134845},"http:\u002F\u002Ficomoon.io\u002F",[24405],"http:\u002F\u002Ficomoon.io",[19,134848,134849],{},"进去之后点icomoon app",[23,134851],{"style":25,"src":134852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134854,134855],{},"可以对其编辑：",[23,134857],{"style":25,"src":134858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134860,134861],{},"生成字体：",[23,134863],{"style":25,"src":134864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134866,134867],{},"下载：",[23,134869],{"style":25,"src":134870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1681,134872,134873],{},[635,134874,134875,134876],{},"阿里iconfont字体库： ",[457,134877,134878],{"href":134878,"rel":134879},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24405],[62,134881,134883],{"id":134882},"_1234-字体图标的引入","12.3.4 字体图标的引入",[632,134885,134886],{},[635,134887,134888,134889,134892],{},"把下载包里面的 ",[30,134890,134891],{},"fonts"," 文件夹放入页面根目录下",[23,134894],{"style":25,"src":134895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[632,134897,134898],{"start":137},[635,134899,134900],{},"字体文件格式",[814,134902,134903,134912],{},[817,134904,134905],{},[820,134906,134907,134910],{},[823,134908,134909],{"align":24276},"格式",[823,134911,24280],{"align":24276},[860,134913,134914,134924,134934,134944],{},[820,134915,134916,134921],{},[865,134917,134918],{"align":24276},[30,134919,134920],{},".ttf",[865,134922,134923],{"align":24276},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[820,134925,134926,134931],{},[865,134927,134928],{"align":24276},[30,134929,134930],{},".woff",[865,134932,134933],{"align":24276},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[820,134935,134936,134941],{},[865,134937,134938],{"align":24276},[30,134939,134940],{},".eot",[865,134942,134943],{"align":24276},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[820,134945,134946,134951],{},[865,134947,134948],{"align":24276},[30,134949,134950],{},"svg",[865,134952,134953],{"align":24276},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[632,134955,134956],{"start":151},[635,134957,134958],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[117,134960,134962],{"className":119,"code":134961,"language":121,"meta":122,"style":122},"\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",[124,134963,134964,134969,134976,134988,135004,135029,135050,135070,135090,135094,135100,135110,135121],{"__ignoreMap":122},[127,134965,134966],{"class":129,"line":130},[127,134967,134968],{"class":133},"\u002F* 引入字体图标 *\u002F\n",[127,134970,134971,134974],{"class":129,"line":137},[127,134972,134973],{"class":290},"@font-face",[127,134975,148],{"class":147},[127,134977,134978,134981,134983,134986],{"class":129,"line":151},[127,134979,134980],{"class":154},"  font-family",[127,134982,158],{"class":147},[127,134984,134985],{"class":781},"'icomoon'",[127,134987,164],{"class":147},[127,134989,134990,134993,134995,134997,134999,135002],{"class":129,"line":167},[127,134991,134992],{"class":154},"  src",[127,134994,158],{"class":147},[127,134996,62259],{"class":154},[127,134998,681],{"class":147},[127,135000,135001],{"class":781},"'fonts\u002Ficomoon.eot'",[127,135003,3261],{"class":147},[127,135005,135006,135008,135010,135012,135014,135017,135019,135022,135024,135027],{"class":129,"line":415},[127,135007,134992],{"class":154},[127,135009,158],{"class":147},[127,135011,62259],{"class":154},[127,135013,681],{"class":147},[127,135015,135016],{"class":781},"'fonts\u002Ficomoon.eot?#iefix'",[127,135018,14256],{"class":147},[127,135020,135021],{"class":154},"format",[127,135023,681],{"class":147},[127,135025,135026],{"class":781},"'embedded-opentype'",[127,135028,38587],{"class":147},[127,135030,135031,135034,135036,135039,135041,135043,135045,135048],{"class":129,"line":421},[127,135032,135033],{"class":154},"       url",[127,135035,681],{"class":147},[127,135037,135038],{"class":781},"'fonts\u002Ficomoon.woff'",[127,135040,14256],{"class":147},[127,135042,135021],{"class":154},[127,135044,681],{"class":147},[127,135046,135047],{"class":781},"'woff'",[127,135049,38587],{"class":147},[127,135051,135052,135054,135056,135059,135061,135063,135065,135068],{"class":129,"line":1766},[127,135053,135033],{"class":154},[127,135055,681],{"class":147},[127,135057,135058],{"class":781},"'fonts\u002Ficomoon.ttf'",[127,135060,14256],{"class":147},[127,135062,135021],{"class":154},[127,135064,681],{"class":147},[127,135066,135067],{"class":781},"'truetype'",[127,135069,38587],{"class":147},[127,135071,135072,135074,135076,135079,135081,135083,135085,135088],{"class":129,"line":1856},[127,135073,135033],{"class":154},[127,135075,681],{"class":147},[127,135077,135078],{"class":781},"'fonts\u002Ficomoon.svg#icomoon'",[127,135080,14256],{"class":147},[127,135082,135021],{"class":154},[127,135084,681],{"class":147},[127,135086,135087],{"class":781},"'svg'",[127,135089,3261],{"class":147},[127,135091,135092],{"class":129,"line":1862},[127,135093,170],{"class":147},[127,135095,135096,135098],{"class":129,"line":1874},[127,135097,134699],{"class":143},[127,135099,148],{"class":147},[127,135101,135102,135104,135106,135108],{"class":129,"line":2155},[127,135103,134980],{"class":154},[127,135105,158],{"class":147},[127,135107,134985],{"class":781},[127,135109,164],{"class":147},[127,135111,135112,135115,135117,135119],{"class":129,"line":2160},[127,135113,135114],{"class":154},"  font-style",[127,135116,158],{"class":147},[127,135118,64374],{"class":154},[127,135120,164],{"class":147},[127,135122,135123],{"class":129,"line":2166},[127,135124,170],{"class":147},[19,135126,135127],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[23,135129],{"style":25,"src":135130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[632,135132,135133],{"start":167},[635,135134,135135],{},"添加字体",[23,135137],{"style":25,"src":135138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135140,135141],{},"复制：",[23,135143],{"style":25,"src":135144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135146,135147],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[632,135149,135150],{"start":415},[635,135151,135152],{},"代码展示：",[117,135154,135155],{"className":119,"code":134961,"language":121,"meta":122,"style":122},[124,135156,135157,135161,135167,135177,135191,135213,135231,135249,135267,135271,135277,135287,135297],{"__ignoreMap":122},[127,135158,135159],{"class":129,"line":130},[127,135160,134968],{"class":133},[127,135162,135163,135165],{"class":129,"line":137},[127,135164,134973],{"class":290},[127,135166,148],{"class":147},[127,135168,135169,135171,135173,135175],{"class":129,"line":151},[127,135170,134980],{"class":154},[127,135172,158],{"class":147},[127,135174,134985],{"class":781},[127,135176,164],{"class":147},[127,135178,135179,135181,135183,135185,135187,135189],{"class":129,"line":167},[127,135180,134992],{"class":154},[127,135182,158],{"class":147},[127,135184,62259],{"class":154},[127,135186,681],{"class":147},[127,135188,135001],{"class":781},[127,135190,3261],{"class":147},[127,135192,135193,135195,135197,135199,135201,135203,135205,135207,135209,135211],{"class":129,"line":415},[127,135194,134992],{"class":154},[127,135196,158],{"class":147},[127,135198,62259],{"class":154},[127,135200,681],{"class":147},[127,135202,135016],{"class":781},[127,135204,14256],{"class":147},[127,135206,135021],{"class":154},[127,135208,681],{"class":147},[127,135210,135026],{"class":781},[127,135212,38587],{"class":147},[127,135214,135215,135217,135219,135221,135223,135225,135227,135229],{"class":129,"line":421},[127,135216,135033],{"class":154},[127,135218,681],{"class":147},[127,135220,135038],{"class":781},[127,135222,14256],{"class":147},[127,135224,135021],{"class":154},[127,135226,681],{"class":147},[127,135228,135047],{"class":781},[127,135230,38587],{"class":147},[127,135232,135233,135235,135237,135239,135241,135243,135245,135247],{"class":129,"line":1766},[127,135234,135033],{"class":154},[127,135236,681],{"class":147},[127,135238,135058],{"class":781},[127,135240,14256],{"class":147},[127,135242,135021],{"class":154},[127,135244,681],{"class":147},[127,135246,135067],{"class":781},[127,135248,38587],{"class":147},[127,135250,135251,135253,135255,135257,135259,135261,135263,135265],{"class":129,"line":1856},[127,135252,135033],{"class":154},[127,135254,681],{"class":147},[127,135256,135078],{"class":781},[127,135258,14256],{"class":147},[127,135260,135021],{"class":154},[127,135262,681],{"class":147},[127,135264,135087],{"class":781},[127,135266,3261],{"class":147},[127,135268,135269],{"class":129,"line":1862},[127,135270,170],{"class":147},[127,135272,135273,135275],{"class":129,"line":1874},[127,135274,134699],{"class":143},[127,135276,148],{"class":147},[127,135278,135279,135281,135283,135285],{"class":129,"line":2155},[127,135280,134980],{"class":154},[127,135282,158],{"class":147},[127,135284,134985],{"class":781},[127,135286,164],{"class":147},[127,135288,135289,135291,135293,135295],{"class":129,"line":2160},[127,135290,135114],{"class":154},[127,135292,158],{"class":147},[127,135294,64374],{"class":154},[127,135296,164],{"class":147},[127,135298,135299],{"class":129,"line":2166},[127,135300,170],{"class":147},[23,135302],{"style":25,"src":135303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135305,135306],{},"更加细节展示：",[632,135308,135309],{},[635,135310,135311],{},"html 标签内添加小图标",[23,135313],{"style":25,"src":135314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[632,135316,135317],{"start":137},[635,135318,135319],{},"给标签定义字体",[117,135321,135322],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,135323,135324,135328,135342,135346],{"__ignoreMap":122},[127,135325,135326],{"class":129,"line":130},[127,135327,131053],{"class":133},[127,135329,135330,135332,135334,135336,135338,135340],{"class":129,"line":137},[127,135331,1584],{"class":147},[127,135333,52147],{"class":140},[127,135335,54021],{"class":143},[127,135337,725],{"class":147},[127,135339,131066],{"class":781},[127,135341,51846],{"class":147},[127,135343,135344],{"class":129,"line":151},[127,135345,131073],{"class":147},[127,135347,135348,135350,135352],{"class":129,"line":167},[127,135349,52321],{"class":147},[127,135351,52147],{"class":140},[127,135353,51846],{"class":147},[19,135355,135356],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[23,135358],{"style":25,"src":135359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[62,135361,135363],{"id":135362},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135365,135366],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135368,135369,135370,135373],{},"把压缩包里面的 ",[30,135371,135372],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135375,135376],{},"打开网站，点下方：",[23,135378],{"style":25,"src":135379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[23,135381],{"style":25,"src":135382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[23,135384],{"style":25,"src":135385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135387,135388],{},"点yes重新加载",[19,135390,135391],{},"然后重复之前的操作就可以实现了",[19,135393,135394],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[62,135396,135398],{"id":135397},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[23,135400],{"style":25,"src":135401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[575,135403,135404],{},"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":122,"searchDepth":137,"depth":137,"links":135406},[135407,135413,135418],{"id":134010,"depth":137,"text":134011,"children":135408},[135409,135410,135411,135412],{"id":134022,"depth":151,"text":134023},{"id":134051,"depth":151,"text":134052},{"id":134079,"depth":151,"text":134080},{"id":134137,"depth":151,"text":134138},{"id":134609,"depth":137,"text":134610,"children":135414},[135415,135416,135417],{"id":134613,"depth":151,"text":134614},{"id":134658,"depth":151,"text":134659},{"id":134674,"depth":151,"text":134675},{"id":134774,"depth":137,"text":134775,"children":135419},[135420,135421,135422,135423,135424,135425],{"id":134778,"depth":151,"text":134779},{"id":134812,"depth":151,"text":134813},{"id":134835,"depth":151,"text":134836},{"id":134882,"depth":151,"text":134883},{"id":135362,"depth":151,"text":135363},{"id":135397,"depth":151,"text":135398},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134002,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135432,"title":135433,"body":135434,"description":603,"extension":604,"meta":136661,"navigation":606,"path":136662,"seo":136663,"stem":136664,"__hash__":136665},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135435,"toc":136642},[135436,135439,135443,135446,135460,135528,135558,135561,135565,135569,135671,135718,135722,135725,135728,135762,135765,135768,135771,135774,135777,135780,135783,135785,135788,135791,135794,135797,135800,135803,135806,135834,135837,135841,135844,135851,135854,135857,135883,135886,135890,135893,135896,135903,135907,135910,135912,135944,135947,135950,135962,135968,135971,135974,135977,135979,135983,135986,135989,135992,136037,136041,136043,136046,136053,136095,136098,136102,136107,136121,136125,136128,136131,136134,136137,136140,136174,136177,136180,136234,136237,136240,136243,136246,136298,136301,136304,136353,136357,136359,136362,136365,136368,136371,136374,136432,136435,136441,136444,136447,136479,136482,136486,136490,136493,136525,136529,136532,136576,136580,136583,136586,136589,136592,136595,136598,136601,136603,136606,136608,136611,136614,136617,136620,136625,136628,136630,136633,136636,136639],[10,135437,135433],{"id":135438},"_13-界面样式与布局技巧",[14,135440,135442],{"id":135441},"_131-css三角","13.1 css三角",[19,135444,135445],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1681,135447,135448,135451,135454,135457],{},[635,135449,135450],{},"用css 边框可以模拟三角效果",[635,135452,135453],{},"宽度高度为0",[635,135455,135456],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[635,135458,135459],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[117,135461,135463],{"className":119,"code":135462,"language":121,"meta":122,"style":122},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[124,135464,135465,135470,135477,135487,135497,135513,135524],{"__ignoreMap":122},[127,135466,135467],{"class":129,"line":130},[127,135468,135469],{"class":133},"\u002F* CSS 实现三角形 *\u002F\n",[127,135471,135472,135475],{"class":129,"line":137},[127,135473,135474],{"class":143},".triangle",[127,135476,148],{"class":147},[127,135478,135479,135481,135483,135485],{"class":129,"line":151},[127,135480,71099],{"class":154},[127,135482,158],{"class":147},[127,135484,867],{"class":154},[127,135486,164],{"class":147},[127,135488,135489,135491,135493,135495],{"class":129,"line":167},[127,135490,71318],{"class":154},[127,135492,158],{"class":147},[127,135494,867],{"class":154},[127,135496,164],{"class":147},[127,135498,135499,135501,135503,135505,135507,135509,135511],{"class":129,"line":415},[127,135500,71426],{"class":154},[127,135502,158],{"class":147},[127,135504,1121],{"class":154},[127,135506,291],{"class":290},[127,135508,52058],{"class":154},[127,135510,64524],{"class":154},[127,135512,164],{"class":147},[127,135514,135515,135518,135520,135522],{"class":129,"line":421},[127,135516,135517],{"class":154},"  border-bottom-color",[127,135519,158],{"class":147},[127,135521,62902],{"class":154},[127,135523,164],{"class":147},[127,135525,135526],{"class":129,"line":1766},[127,135527,170],{"class":147},[117,135529,135530],{"className":119,"code":131099,"language":121,"meta":122,"style":122},[124,135531,135532,135538,135554],{"__ignoreMap":122},[127,135533,135534,135536],{"class":129,"line":130},[127,135535,52147],{"class":140},[127,135537,148],{"class":147},[127,135539,135540,135542,135544,135546,135548,135550,135552],{"class":129,"line":137},[127,135541,71426],{"class":154},[127,135543,158],{"class":147},[127,135545,893],{"class":154},[127,135547,291],{"class":290},[127,135549,52058],{"class":154},[127,135551,130334],{"class":154},[127,135553,164],{"class":147},[127,135555,135556],{"class":129,"line":151},[127,135557,170],{"class":147},[23,135559],{"style":25,"src":135560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135562,135564],{"id":135563},"_132-css用户界面样式","13.2 css用户界面样式",[62,135566,135568],{"id":135567},"_1321-鼠标样式","13.2.1 鼠标样式",[117,135570,135572],{"className":119,"code":135571,"language":121,"meta":122,"style":122},"\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",[124,135573,135574,135579,135598,135616,135635,135652],{"__ignoreMap":122},[127,135575,135576],{"class":129,"line":130},[127,135577,135578],{"class":133},"\u002F* 鼠标样式 *\u002F\n",[127,135580,135581,135583,135585,135588,135590,135592,135595],{"class":129,"line":137},[127,135582,52147],{"class":140},[127,135584,80336],{"class":147},[127,135586,135587],{"class":154},"cursor",[127,135589,158],{"class":147},[127,135591,62563],{"class":154},[127,135593,135594],{"class":147},"; }   ",[127,135596,135597],{"class":133},"\u002F* 手型 *\u002F\n",[127,135599,135600,135602,135604,135606,135608,135611,135613],{"class":129,"line":151},[127,135601,52147],{"class":140},[127,135603,80336],{"class":147},[127,135605,135587],{"class":154},[127,135607,158],{"class":147},[127,135609,135610],{"class":154},"default",[127,135612,135594],{"class":147},[127,135614,135615],{"class":133},"\u002F* 默认 *\u002F\n",[127,135617,135618,135620,135622,135624,135626,135629,135632],{"class":129,"line":167},[127,135619,52147],{"class":140},[127,135621,80336],{"class":147},[127,135623,135587],{"class":154},[127,135625,158],{"class":147},[127,135627,135628],{"class":154},"move",[127,135630,135631],{"class":147},"; }      ",[127,135633,135634],{"class":133},"\u002F* 移动 *\u002F\n",[127,135636,135637,135639,135641,135643,135645,135647,135649],{"class":129,"line":415},[127,135638,52147],{"class":140},[127,135640,80336],{"class":147},[127,135642,135587],{"class":154},[127,135644,158],{"class":147},[127,135646,5729],{"class":154},[127,135648,135631],{"class":147},[127,135650,135651],{"class":133},"\u002F* 文本 *\u002F\n",[127,135653,135654,135656,135658,135660,135662,135665,135668],{"class":129,"line":421},[127,135655,52147],{"class":140},[127,135657,80336],{"class":147},[127,135659,135587],{"class":154},[127,135661,158],{"class":147},[127,135663,135664],{"class":154},"not-allowed",[127,135666,135667],{"class":147},"; } ",[127,135669,135670],{"class":133},"\u002F* 禁止 *\u002F\n",[814,135672,135673,135681],{},[817,135674,135675],{},[820,135676,135677,135679],{},[823,135678,333],{"align":24276},[823,135680,28029],{"align":24276},[860,135682,135683,135690,135697,135704,135711],{},[820,135684,135685,135687],{},[865,135686,135610],{"align":24276},[865,135688,135689],{"align":24276},"小白 默认",[820,135691,135692,135694],{},[865,135693,62563],{"align":24276},[865,135695,135696],{"align":24276},"小手",[820,135698,135699,135701],{},[865,135700,135628],{"align":24276},[865,135702,135703],{"align":24276},"移动",[820,135705,135706,135708],{},[865,135707,5729],{"align":24276},[865,135709,135710],{"align":24276},"文本",[820,135712,135713,135715],{},[865,135714,135664],{"align":24276},[865,135716,135717],{"align":24276},"禁止",[62,135719,135721],{"id":135720},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135723,135724],{},"去除表单轮廓线",[19,135726,135727],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[117,135729,135730],{"className":119,"code":130306,"language":121,"meta":122,"style":122},[124,135731,135732,135736,135742,135758],{"__ignoreMap":122},[127,135733,135734],{"class":129,"line":130},[127,135735,130313],{"class":133},[127,135737,135738,135740],{"class":129,"line":137},[127,135739,52147],{"class":140},[127,135741,148],{"class":147},[127,135743,135744,135746,135748,135750,135752,135754,135756],{"class":129,"line":151},[127,135745,71426],{"class":154},[127,135747,158],{"class":147},[127,135749,893],{"class":154},[127,135751,291],{"class":290},[127,135753,52058],{"class":154},[127,135755,130334],{"class":154},[127,135757,164],{"class":147},[127,135759,135760],{"class":129,"line":167},[127,135761,170],{"class":147},[19,135763,135764],{},"文本域：",[23,135766],{"style":25,"src":135767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135769,135770],{},"此时会有一个空白区域",[23,135772],{"style":25,"src":135773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135775,135776],{},"写在同一行就不会出现这个问题",[23,135778],{"style":25,"src":135779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135781,135782],{},"文本域是行内块元素，一定记住！！！",[19,135784,98762],{},[23,135786],{"style":25,"src":135787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135789,135790],{},"文本域尽量放在一行",[19,135792,135793],{},"知识回顾：cols是列，rols是行",[23,135795],{"style":25,"src":135796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135798,135799],{},"它可以进行拖动，显然这是我们不愿意看到的",[23,135801],{"style":25,"src":135802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135804,135805],{},"使用resize进行解决",[117,135807,135809],{"className":119,"code":135808,"language":121,"meta":122,"style":122},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[124,135810,135811,135817,135830],{"__ignoreMap":122},[127,135812,135813,135815],{"class":129,"line":130},[127,135814,54356],{"class":140},[127,135816,148],{"class":147},[127,135818,135819,135821,135823,135825,135827],{"class":129,"line":137},[127,135820,71328],{"class":154},[127,135822,158],{"class":147},[127,135824,469],{"class":154},[127,135826,130805],{"class":147},[127,135828,135829],{"class":133},"\u002F* 取消表单轮廓线 *\u002F\n",[127,135831,135832],{"class":129,"line":151},[127,135833,170],{"class":147},[19,135835,135836],{},"此时就无法通过右下方实现拖动了",[62,135838,135840],{"id":135839},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135842,135843],{},"实现一个盒子中的文字和图片对齐",[19,135845,135846,135847,135850],{},"用于设置一个元素的 ",[30,135848,135849],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135852,135853],{},"图片和文字默认是基线对齐",[23,135855],{"style":25,"src":135856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[117,135858,135859],{"className":119,"code":135808,"language":121,"meta":122,"style":122},[124,135860,135861,135867,135879],{"__ignoreMap":122},[127,135862,135863,135865],{"class":129,"line":130},[127,135864,54356],{"class":140},[127,135866,148],{"class":147},[127,135868,135869,135871,135873,135875,135877],{"class":129,"line":137},[127,135870,71328],{"class":154},[127,135872,158],{"class":147},[127,135874,469],{"class":154},[127,135876,130805],{"class":147},[127,135878,135829],{"class":133},[127,135880,135881],{"class":129,"line":151},[127,135882,170],{"class":147},[23,135884],{"style":25,"src":135885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22539,135887,135889],{"id":135888},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135891,135892],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[23,135894],{"style":25,"src":135895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135897,135898,135899,135902],{},"此时可以给图片、表单这些行内块元素的 ",[30,135900,135901],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22539,135904,135906],{"id":135905},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135908,135909],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135911,15175],{},[117,135913,135915],{"className":119,"code":135914,"language":121,"meta":122,"style":122},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[124,135916,135917,135922,135928,135940],{"__ignoreMap":122},[127,135918,135919],{"class":129,"line":130},[127,135920,135921],{"class":133},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[127,135923,135924,135926],{"class":129,"line":137},[127,135925,23],{"class":140},[127,135927,148],{"class":147},[127,135929,135930,135933,135935,135938],{"class":129,"line":151},[127,135931,135932],{"class":154},"  vertical-align",[127,135934,158],{"class":147},[127,135936,135937],{"class":154},"middle",[127,135939,164],{"class":147},[127,135941,135942],{"class":129,"line":167},[127,135943,170],{"class":147},[23,135945],{"style":25,"src":135946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135948,135949],{},"主要解决方法有两种：",[632,135951,135952],{},[635,135953,135954,135957,135958,135961],{},[30,135955,135956],{},"给图片"," 添加 ",[30,135959,135960],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135963,135964,135965],{},"2.把图片转换为块级元素 ",[30,135966,135967],{},"display: block",[19,135969,135970],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135972,135973],{},"img {",[19,135975,135976],{},"vertical-align:middle;",[19,135978,1620],{},[62,135980,135982],{"id":135981},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135984,135985],{},"效果：",[23,135987],{"style":25,"src":135988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135990,135991],{},"单行文本溢出显示省略号--必须满足三个条件：",[117,135993,135995],{"className":119,"code":135994,"language":121,"meta":122,"style":122},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[124,135996,135997,136002,136008,136018,136023,136033],{"__ignoreMap":122},[127,135998,135999],{"class":129,"line":130},[127,136000,136001],{"class":133},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[127,136003,136004,136006],{"class":129,"line":137},[127,136005,23],{"class":140},[127,136007,148],{"class":147},[127,136009,136010,136012,136014,136016],{"class":129,"line":151},[127,136011,135932],{"class":154},[127,136013,158],{"class":147},[127,136015,135937],{"class":154},[127,136017,164],{"class":147},[127,136019,136020],{"class":129,"line":167},[127,136021,136022],{"class":133},"  \u002F* 或 *\u002F\n",[127,136024,136025,136027,136029,136031],{"class":129,"line":415},[127,136026,128558],{"class":154},[127,136028,158],{"class":147},[127,136030,61402],{"class":154},[127,136032,164],{"class":147},[127,136034,136035],{"class":129,"line":421},[127,136036,170],{"class":147},[62,136038,136040],{"id":136039},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136042,135985],{},[23,136044],{"style":25,"src":136045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136047,136048,136049,136052],{},"多行文本溢出显示省略号， ",[30,136050,136051],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[117,136054,136055],{"className":119,"code":135994,"language":121,"meta":122,"style":122},[124,136056,136057,136061,136067,136077,136081,136091],{"__ignoreMap":122},[127,136058,136059],{"class":129,"line":130},[127,136060,136001],{"class":133},[127,136062,136063,136065],{"class":129,"line":137},[127,136064,23],{"class":140},[127,136066,148],{"class":147},[127,136068,136069,136071,136073,136075],{"class":129,"line":151},[127,136070,135932],{"class":154},[127,136072,158],{"class":147},[127,136074,135937],{"class":154},[127,136076,164],{"class":147},[127,136078,136079],{"class":129,"line":167},[127,136080,136022],{"class":133},[127,136082,136083,136085,136087,136089],{"class":129,"line":415},[127,136084,128558],{"class":154},[127,136086,158],{"class":147},[127,136088,61402],{"class":154},[127,136090,164],{"class":147},[127,136092,136093],{"class":129,"line":421},[127,136094,170],{"class":147},[19,136096,136097],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136099,136101],{"id":136100},"_133-常见布局技巧","13.3 常见布局技巧",[19,136103,136104],{},[30,136105,136106],{},"巧妙利用一个技术更快更好的布局：",[632,136108,136109,136112,136115,136118],{},[635,136110,136111],{},"margin负值的运用",[635,136113,136114],{},"文字围绕浮动元素",[635,136116,136117],{},"行内块的巧妙运用",[635,136119,136120],{},"CSS三角强化",[62,136122,136124],{"id":136123},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136126,136127],{},"应用场景：",[23,136129],{"style":25,"src":136130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[23,136132],{"style":25,"src":136133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136135,136136],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136138,136139],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[117,136141,136142],{"className":119,"code":130306,"language":121,"meta":122,"style":122},[124,136143,136144,136148,136154,136170],{"__ignoreMap":122},[127,136145,136146],{"class":129,"line":130},[127,136147,130313],{"class":133},[127,136149,136150,136152],{"class":129,"line":137},[127,136151,52147],{"class":140},[127,136153,148],{"class":147},[127,136155,136156,136158,136160,136162,136164,136166,136168],{"class":129,"line":151},[127,136157,71426],{"class":154},[127,136159,158],{"class":147},[127,136161,893],{"class":154},[127,136163,291],{"class":290},[127,136165,52058],{"class":154},[127,136167,130334],{"class":154},[127,136169,164],{"class":147},[127,136171,136172],{"class":129,"line":167},[127,136173,170],{"class":147},[23,136175],{"style":25,"src":136176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136178,136179],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[117,136181,136183],{"className":119,"code":136182,"language":121,"meta":122,"style":122},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[124,136184,136185,136190,136196,136206,136218,136230],{"__ignoreMap":122},[127,136186,136187],{"class":129,"line":130},[127,136188,136189],{"class":133},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[127,136191,136192,136194],{"class":129,"line":137},[127,136193,130790],{"class":143},[127,136195,148],{"class":147},[127,136197,136198,136200,136202,136204],{"class":129,"line":151},[127,136199,132748],{"class":154},[127,136201,158],{"class":147},[127,136203,55298],{"class":154},[127,136205,164],{"class":147},[127,136207,136208,136210,136212,136214,136216],{"class":129,"line":167},[127,136209,132762],{"class":154},[127,136211,158],{"class":147},[127,136213,1121],{"class":154},[127,136215,291],{"class":290},[127,136217,164],{"class":147},[127,136219,136220,136222,136224,136226,136228],{"class":129,"line":415},[127,136221,132779],{"class":154},[127,136223,158],{"class":147},[127,136225,1374],{"class":154},[127,136227,291],{"class":290},[127,136229,164],{"class":147},[127,136231,136232],{"class":129,"line":421},[127,136233,170],{"class":147},[19,136235,136236],{},"加上上述代码会发现：",[23,136238],{"style":25,"src":136239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136241,136242],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136244,136245],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[117,136247,136248],{"className":119,"code":136182,"language":121,"meta":122,"style":122},[124,136249,136250,136254,136260,136270,136282,136294],{"__ignoreMap":122},[127,136251,136252],{"class":129,"line":130},[127,136253,136189],{"class":133},[127,136255,136256,136258],{"class":129,"line":137},[127,136257,130790],{"class":143},[127,136259,148],{"class":147},[127,136261,136262,136264,136266,136268],{"class":129,"line":151},[127,136263,132748],{"class":154},[127,136265,158],{"class":147},[127,136267,55298],{"class":154},[127,136269,164],{"class":147},[127,136271,136272,136274,136276,136278,136280],{"class":129,"line":167},[127,136273,132762],{"class":154},[127,136275,158],{"class":147},[127,136277,1121],{"class":154},[127,136279,291],{"class":290},[127,136281,164],{"class":147},[127,136283,136284,136286,136288,136290,136292],{"class":129,"line":415},[127,136285,132779],{"class":154},[127,136287,158],{"class":147},[127,136289,1374],{"class":154},[127,136291,291],{"class":290},[127,136293,164],{"class":147},[127,136295,136296],{"class":129,"line":421},[127,136297,170],{"class":147},[19,136299,136300],{},"解决方式2：",[19,136302,136303],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[117,136305,136307],{"className":119,"code":136306,"language":121,"meta":122,"style":122},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[124,136308,136309,136315,136325,136337,136349],{"__ignoreMap":122},[127,136310,136311,136313],{"class":129,"line":130},[127,136312,52147],{"class":140},[127,136314,148],{"class":147},[127,136316,136317,136319,136321,136323],{"class":129,"line":137},[127,136318,132748],{"class":154},[127,136320,158],{"class":147},[127,136322,55298],{"class":154},[127,136324,164],{"class":147},[127,136326,136327,136329,136331,136333,136335],{"class":129,"line":151},[127,136328,132762],{"class":154},[127,136330,158],{"class":147},[127,136332,1121],{"class":154},[127,136334,291],{"class":290},[127,136336,164],{"class":147},[127,136338,136339,136341,136343,136345,136347],{"class":129,"line":167},[127,136340,132779],{"class":154},[127,136342,158],{"class":147},[127,136344,1374],{"class":154},[127,136346,291],{"class":290},[127,136348,164],{"class":147},[127,136350,136351],{"class":129,"line":415},[127,136352,170],{"class":147},[62,136354,136356],{"id":136355},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136358,136127],{},[23,136360],{"style":25,"src":136361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136363,136364],{},"实现结构图：",[23,136366],{"style":25,"src":136367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136369,136370],{},"巧妙运用浮动元素不会压住文字的特性",[19,136372,136373],{},"代码显示：",[117,136375,136377],{"className":119,"code":136376,"language":121,"meta":122,"style":122},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[124,136378,136379,136385,136395,136399,136404,136408,136414,136428],{"__ignoreMap":122},[127,136380,136381,136383],{"class":129,"line":130},[127,136382,130790],{"class":143},[127,136384,148],{"class":147},[127,136386,136387,136389,136391,136393],{"class":129,"line":137},[127,136388,131422],{"class":154},[127,136390,158],{"class":147},[127,136392,24276],{"class":154},[127,136394,164],{"class":147},[127,136396,136397],{"class":129,"line":151},[127,136398,170],{"class":147},[127,136400,136401],{"class":129,"line":167},[127,136402,136403],{"class":147},"```Css\n",[127,136405,136406],{"class":129,"line":415},[127,136407,130785],{"class":133},[127,136409,136410,136412],{"class":129,"line":421},[127,136411,130790],{"class":143},[127,136413,148],{"class":147},[127,136415,136416,136418,136420,136422,136424,136426],{"class":129,"line":1766},[127,136417,71003],{"class":154},[127,136419,158],{"class":147},[127,136421,867],{"class":154},[127,136423,52093],{"class":154},[127,136425,130805],{"class":147},[127,136427,130808],{"class":133},[127,136429,136430],{"class":129,"line":1856},[127,136431,170],{"class":147},[19,136433,136434],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[117,136436,136439],{"className":136437,"code":136438,"language":5729},[5727],"\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",[124,136440,136438],{"__ignoreMap":122},[23,136442],{"style":25,"src":136443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136445,136446],{},"最终展示结果：",[117,136448,136449],{"className":119,"code":130778,"language":121,"meta":122,"style":122},[124,136450,136451,136455,136461,136475],{"__ignoreMap":122},[127,136452,136453],{"class":129,"line":130},[127,136454,130785],{"class":133},[127,136456,136457,136459],{"class":129,"line":137},[127,136458,130790],{"class":143},[127,136460,148],{"class":147},[127,136462,136463,136465,136467,136469,136471,136473],{"class":129,"line":151},[127,136464,71003],{"class":154},[127,136466,158],{"class":147},[127,136468,867],{"class":154},[127,136470,52093],{"class":154},[127,136472,130805],{"class":147},[127,136474,130808],{"class":133},[127,136476,136477],{"class":129,"line":167},[127,136478,170],{"class":147},[23,136480],{"style":25,"src":136481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136483,136485],{"id":136484},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[62,136487,136489],{"id":136488},"_1341-原理","13.4.1 原理",[23,136491],{"style":25,"src":136492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[117,136494,136495],{"className":119,"code":130778,"language":121,"meta":122,"style":122},[124,136496,136497,136501,136507,136521],{"__ignoreMap":122},[127,136498,136499],{"class":129,"line":130},[127,136500,130785],{"class":133},[127,136502,136503,136505],{"class":129,"line":137},[127,136504,130790],{"class":143},[127,136506,148],{"class":147},[127,136508,136509,136511,136513,136515,136517,136519],{"class":129,"line":151},[127,136510,71003],{"class":154},[127,136512,158],{"class":147},[127,136514,867],{"class":154},[127,136516,52093],{"class":154},[127,136518,130805],{"class":147},[127,136520,130808],{"class":133},[127,136522,136523],{"class":129,"line":167},[127,136524,170],{"class":147},[62,136526,136528],{"id":136527},"_1342-实例","13.4.2 实例",[23,136530],{"style":25,"src":136531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[117,136533,136534],{"className":119,"code":131408,"language":121,"meta":122,"style":122},[124,136535,136536,136542,136552,136556,136562,136572],{"__ignoreMap":122},[127,136537,136538,136540],{"class":129,"line":130},[127,136539,131415],{"class":143},[127,136541,148],{"class":147},[127,136543,136544,136546,136548,136550],{"class":129,"line":137},[127,136545,131422],{"class":154},[127,136547,158],{"class":147},[127,136549,24276],{"class":154},[127,136551,164],{"class":147},[127,136553,136554],{"class":129,"line":151},[127,136555,170],{"class":147},[127,136557,136558,136560],{"class":129,"line":167},[127,136559,131437],{"class":143},[127,136561,148],{"class":147},[127,136563,136564,136566,136568,136570],{"class":129,"line":415},[127,136565,131422],{"class":154},[127,136567,158],{"class":147},[127,136569,73051],{"class":154},[127,136571,164],{"class":147},[127,136573,136574],{"class":129,"line":421},[127,136575,170],{"class":147},[14,136577,136579],{"id":136578},"_135-css的初始化","13.5 css的初始化",[19,136581,136582],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136584,136585],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136587,136588],{},"每个网页都必须首先进行 CSS初始化。",[19,136590,136591],{},"这里我们以 京东CSS初始化代码为例。",[19,136593,136594],{},"在网页右键查看网页源代码",[19,136596,136597],{},"找到css的link引入语句",[19,136599,136600],{},"然后ctrl+f 输入body",[19,136602,77755],{},[23,136604],{"style":25,"src":136605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136607,77778],{},[23,136609],{"style":25,"src":136610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136612,136613],{},"③打开了网页上传压缩的代码",[23,136615],{"style":25,"src":136616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136618,136619],{},"④从body前可以查看这个网页的初始化代码",[19,136621,136622],{},[30,136623,136624],{},"Unicode编码字体：",[19,136626,136627],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136629,83736],{},[19,136631,136632],{},"黑体 \\9ED1\\4F53",[19,136634,136635],{},"宋体 \\5B8B\\4F53",[19,136637,136638],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[575,136640,136641],{},"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":122,"searchDepth":137,"depth":137,"links":136643},[136644,136645,136652,136656,136660],{"id":135441,"depth":137,"text":135442},{"id":135563,"depth":137,"text":135564,"children":136646},[136647,136648,136649,136650,136651],{"id":135567,"depth":151,"text":135568},{"id":135720,"depth":151,"text":135721},{"id":135839,"depth":151,"text":135840},{"id":135981,"depth":151,"text":135982},{"id":136039,"depth":151,"text":136040},{"id":136100,"depth":137,"text":136101,"children":136653},[136654,136655],{"id":136123,"depth":151,"text":136124},{"id":136355,"depth":151,"text":136356},{"id":136484,"depth":137,"text":136485,"children":136657},[136658,136659],{"id":136488,"depth":151,"text":136489},{"id":136527,"depth":151,"text":136528},{"id":136578,"depth":137,"text":136579},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135433,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136667,"title":136668,"body":136669,"description":603,"extension":604,"meta":138355,"navigation":606,"path":138356,"seo":138357,"stem":138358,"__hash__":138359},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136670,"toc":138344},[136671,136674,136678,136682,136685,136692,136695,136698,136736,136739,136741,136755,136759,136768,136772,136777,136780,136783,136786,136821,136826,136829,136859,136862,136867,136870,136873,136903,136906,136960,136963,136967,136972,136984,136987,136991,137021,137024,137029,137032,137062,137065,137069,137086,137090,137094,137097,137130,137133,137137,137140,137143,137146,137149,137152,137263,137266,137269,137272,137374,137377,137381,137385,137389,137392,137432,137435,137437,137453,137457,137460,137465,137546,137549,137552,137678,137683,137686,137694,137697,137702,137787,137790,137794,137797,137800,137804,137824,137829,137913,137916,137921,137924,137927,138005,138008,138011,138014,138017,138020,138025,138028,138031,138103,138106,138111,138114,138211,138214,138220,138223,138226,138229,138232,138235,138238,138241,138244,138248,138253,138256,138289,138294,138297,138338,138341],[10,136672,136668],{"id":136673},"_14-html5与css3新特性",[14,136675,136677],{"id":136676},"_141-html5的新特性","14.1 HTML5的新特性",[62,136679,136681],{"id":136680},"_1411-基本标签","14.1.1 基本标签",[19,136683,136684],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136686,136687,136688,136691],{},"这些新特性都有兼容性问题，基本是 ",[30,136689,136690],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136693,136694],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136696,136697],{},"现在使用的是新特性：",[1681,136699,136700,136706,136712,136718,136724,136730],{},[635,136701,136702,136705],{},[124,136703,136704],{},"\u003Cheader>"," 头部标签",[635,136707,136708,136711],{},[124,136709,136710],{},"\u003Cnav>"," 导航标签",[635,136713,136714,136717],{},[124,136715,136716],{},"\u003Carticle>"," 内容标签",[635,136719,136720,136723],{},[124,136721,136722],{},"\u003Csection>"," 定义文档某个区域",[635,136725,136726,136729],{},[124,136727,136728],{},"\u003Caside>"," 侧边栏标签",[635,136731,136732,136735],{},[124,136733,136734],{},"\u003Cfooter>"," 尾部标签",[23,136737],{"style":25,"src":136738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136740,32],{},[1681,136742,136743,136746,136749,136752],{},[635,136744,136745],{},"这种语义化标准主要是针对搜索引擎的",[635,136747,136748],{},"这些标签页面中可以经常使用",[635,136750,136751],{},"在IE9中，需要把这些元素转换为块级元素",[635,136753,136754],{},"移动端更喜欢使用这些标签",[62,136756,136758],{"id":136757},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136760,136761,136762,136764,136765,136767],{},"音频 ",[30,136763,28714],{}," 和视频 ",[30,136766,28723],{}," 两个标签",[22539,136769,136771],{"id":136770},"_14121-视频标签-video","14.1.2.1 视频标签- video",[632,136773,136774],{},[635,136775,136776],{},"支持格式：",[23,136778],{"style":25,"src":136779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136781,136782],{},"尽量使用MP4，兼容性好",[19,136784,136785],{},"用MP4就可以",[117,136787,136789],{"className":127689,"code":136788,"language":127691,"meta":122,"style":122},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[124,136790,136791],{"__ignoreMap":122},[127,136792,136793,136795,136797,136799,136801,136804,136806,136809,136812,136815,136817,136819],{"class":129,"line":130},[127,136794,1584],{"class":147},[127,136796,28723],{"class":140},[127,136798,55773],{"class":143},[127,136800,725],{"class":147},[127,136802,136803],{"class":781},"\"movie.mp4\"",[127,136805,92952],{"class":143},[127,136807,136808],{"class":143}," autoplay",[127,136810,136811],{"class":143}," muted",[127,136813,136814],{"class":143}," loop",[127,136816,55848],{"class":147},[127,136818,28723],{"class":140},[127,136820,51846],{"class":147},[632,136822,136823],{"start":137},[635,136824,136825],{},"兼容写法",[19,136827,136828],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[117,136830,136831],{"className":127689,"code":136788,"language":127691,"meta":122,"style":122},[124,136832,136833],{"__ignoreMap":122},[127,136834,136835,136837,136839,136841,136843,136845,136847,136849,136851,136853,136855,136857],{"class":129,"line":130},[127,136836,1584],{"class":147},[127,136838,28723],{"class":140},[127,136840,55773],{"class":143},[127,136842,725],{"class":147},[127,136844,136803],{"class":781},[127,136846,92952],{"class":143},[127,136848,136808],{"class":143},[127,136850,136811],{"class":143},[127,136852,136814],{"class":143},[127,136854,55848],{"class":147},[127,136856,28723],{"class":140},[127,136858,51846],{"class":147},[19,136860,136861],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[632,136863,136864],{"start":151},[635,136865,136866],{},"video常用属性",[23,136868],{"style":25,"src":136869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136871,136872],{},"poster属性后面是跟的等待加载图片的地址",[117,136874,136875],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,136876,136877],{"__ignoreMap":122},[127,136878,136879,136881,136883,136885,136887,136889,136891,136893,136895,136897,136899,136901],{"class":129,"line":130},[127,136880,1584],{"class":147},[127,136882,23],{"class":140},[127,136884,55773],{"class":143},[127,136886,725],{"class":147},[127,136888,134459],{"class":781},[127,136890,55781],{"class":143},[127,136892,725],{"class":147},[127,136894,134466],{"class":781},[127,136896,134469],{"class":143},[127,136898,725],{"class":147},[127,136900,134474],{"class":781},[127,136902,51846],{"class":147},[19,136904,136905],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[117,136907,136909],{"className":119,"code":136908,"language":121,"meta":122,"style":122},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[124,136910,136911,136916,136922,136946,136951,136956],{"__ignoreMap":122},[127,136912,136913],{"class":129,"line":130},[127,136914,136915],{"class":133},"\u002F* 2D 位移 *\u002F\n",[127,136917,136918,136920],{"class":129,"line":137},[127,136919,52147],{"class":140},[127,136921,148],{"class":147},[127,136923,136924,136927,136929,136932,136934,136936,136938,136940,136942,136944],{"class":129,"line":151},[127,136925,136926],{"class":154},"  transform",[127,136928,158],{"class":147},[127,136930,136931],{"class":154},"translate",[127,136933,681],{"class":147},[127,136935,986],{"class":154},[127,136937,291],{"class":290},[127,136939,12977],{"class":147},[127,136941,1330],{"class":154},[127,136943,291],{"class":290},[127,136945,3261],{"class":147},[127,136947,136948],{"class":129,"line":167},[127,136949,136950],{"class":133},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[127,136952,136953],{"class":129,"line":415},[127,136954,136955],{"class":133},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[127,136957,136958],{"class":129,"line":421},[127,136959,170],{"class":147},[19,136961,136962],{},"muted:自动静音属性",[22539,136964,136966],{"id":136965},"_14122-音频标签audio","14.1.2.2 音频标签audio",[632,136968,136969],{},[635,136970,136971],{},"基本使用",[19,136973,136974,136975,136980,136981],{},"当前 ",[30,136976,136977],{},[124,136978,136979],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[30,136982,136983],{},"mp3格式",[23,136985],{"style":25,"src":136986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[632,136988,136989],{"start":137},[635,136990,136825],{},[117,136992,136993],{"className":127689,"code":136788,"language":127691,"meta":122,"style":122},[124,136994,136995],{"__ignoreMap":122},[127,136996,136997,136999,137001,137003,137005,137007,137009,137011,137013,137015,137017,137019],{"class":129,"line":130},[127,136998,1584],{"class":147},[127,137000,28723],{"class":140},[127,137002,55773],{"class":143},[127,137004,725],{"class":147},[127,137006,136803],{"class":781},[127,137008,92952],{"class":143},[127,137010,136808],{"class":143},[127,137012,136811],{"class":143},[127,137014,136814],{"class":143},[127,137016,55848],{"class":147},[127,137018,28723],{"class":140},[127,137020,51846],{"class":147},[19,137022,137023],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[632,137025,137026],{"start":151},[635,137027,137028],{},"常用属性",[23,137030],{"style":25,"src":137031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[117,137033,137034],{"className":127689,"code":136788,"language":127691,"meta":122,"style":122},[124,137035,137036],{"__ignoreMap":122},[127,137037,137038,137040,137042,137044,137046,137048,137050,137052,137054,137056,137058,137060],{"class":129,"line":130},[127,137039,1584],{"class":147},[127,137041,28723],{"class":140},[127,137043,55773],{"class":143},[127,137045,725],{"class":147},[127,137047,136803],{"class":781},[127,137049,92952],{"class":143},[127,137051,136808],{"class":143},[127,137053,136811],{"class":143},[127,137055,136814],{"class":143},[127,137057,55848],{"class":147},[127,137059,28723],{"class":140},[127,137061,51846],{"class":147},[19,137063,137064],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22539,137066,137068],{"id":137067},"_14123-总结","14.1.2.3 总结",[1681,137070,137071,137074,137077,137080,137083],{},[635,137072,137073],{},"音频标签和视频标签使用方式基本一致",[635,137075,137076],{},"浏览器支持情况不同",[635,137078,137079],{},"谷歌浏览器把音频和视频自动播放禁止了",[635,137081,137082],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[635,137084,137085],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[62,137087,137089],{"id":137088},"_1413-表单元素","14.1.3 表单元素",[22539,137091,137093],{"id":137092},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[23,137095],{"style":25,"src":137096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[117,137098,137100],{"className":127689,"code":137099,"language":127691,"meta":122,"style":122},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[124,137101,137102],{"__ignoreMap":122},[127,137103,137104,137106,137108,137110,137112,137114,137116,137118,137121,137123,137125,137128],{"class":129,"line":130},[127,137105,1584],{"class":147},[127,137107,54356],{"class":140},[127,137109,54359],{"class":143},[127,137111,725],{"class":147},[127,137113,63232],{"class":781},[127,137115,15462],{"class":143},[127,137117,725],{"class":147},[127,137119,137120],{"class":781},"\"username\"",[127,137122,61553],{"class":143},[127,137124,725],{"class":147},[127,137126,137127],{"class":781},"\"请输入用户名\"",[127,137129,51846],{"class":147},[23,137131],{"style":25,"src":137132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22539,137134,137136],{"id":137135},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[23,137138],{"style":25,"src":137139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137141,137142],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137144,137145],{},"快捷操作：",[23,137147],{"style":25,"src":137148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137150,137151],{},"例子1：",[117,137153,137155],{"className":127689,"code":137154,"language":127691,"meta":122,"style":122},"\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",[124,137156,137157,137180,137207,137236,137255],{"__ignoreMap":122},[127,137158,137159,137161,137163,137165,137167,137170,137173,137175,137178],{"class":129,"line":130},[127,137160,1584],{"class":147},[127,137162,67158],{"class":140},[127,137164,67161],{"class":143},[127,137166,725],{"class":147},[127,137168,137169],{"class":781},"\"\u002Fsubmit\"",[127,137171,137172],{"class":143}," method",[127,137174,725],{"class":147},[127,137176,137177],{"class":781},"\"post\"",[127,137179,51846],{"class":147},[127,137181,137182,137184,137186,137188,137190,137192,137194,137196,137198,137200,137202,137205],{"class":129,"line":137},[127,137183,52679],{"class":147},[127,137185,54356],{"class":140},[127,137187,54359],{"class":143},[127,137189,725],{"class":147},[127,137191,63232],{"class":781},[127,137193,15462],{"class":143},[127,137195,725],{"class":147},[127,137197,137120],{"class":781},[127,137199,61553],{"class":143},[127,137201,725],{"class":147},[127,137203,137204],{"class":781},"\"用户名\"",[127,137206,51846],{"class":147},[127,137208,137209,137211,137213,137215,137217,137220,137222,137224,137227,137229,137231,137234],{"class":129,"line":151},[127,137210,52679],{"class":147},[127,137212,54356],{"class":140},[127,137214,54359],{"class":143},[127,137216,725],{"class":147},[127,137218,137219],{"class":781},"\"password\"",[127,137221,15462],{"class":143},[127,137223,725],{"class":147},[127,137225,137226],{"class":781},"\"pwd\"",[127,137228,61553],{"class":143},[127,137230,725],{"class":147},[127,137232,137233],{"class":781},"\"密码\"",[127,137235,51846],{"class":147},[127,137237,137238,137240,137242,137244,137246,137248,137251,137253],{"class":129,"line":167},[127,137239,52679],{"class":147},[127,137241,54422],{"class":140},[127,137243,54359],{"class":143},[127,137245,725],{"class":147},[127,137247,67181],{"class":781},[127,137249,137250],{"class":147},">提交\u003C\u002F",[127,137252,54422],{"class":140},[127,137254,51846],{"class":147},[127,137256,137257,137259,137261],{"class":129,"line":415},[127,137258,52321],{"class":147},[127,137260,67158],{"class":140},[127,137262,51846],{"class":147},[23,137264],{"style":25,"src":137265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137267,137268],{},"value是表单域的内容",[19,137270,137271],{},"例子2：",[117,137273,137274],{"className":127689,"code":137154,"language":127691,"meta":122,"style":122},[124,137275,137276,137296,137322,137348,137366],{"__ignoreMap":122},[127,137277,137278,137280,137282,137284,137286,137288,137290,137292,137294],{"class":129,"line":130},[127,137279,1584],{"class":147},[127,137281,67158],{"class":140},[127,137283,67161],{"class":143},[127,137285,725],{"class":147},[127,137287,137169],{"class":781},[127,137289,137172],{"class":143},[127,137291,725],{"class":147},[127,137293,137177],{"class":781},[127,137295,51846],{"class":147},[127,137297,137298,137300,137302,137304,137306,137308,137310,137312,137314,137316,137318,137320],{"class":129,"line":137},[127,137299,52679],{"class":147},[127,137301,54356],{"class":140},[127,137303,54359],{"class":143},[127,137305,725],{"class":147},[127,137307,63232],{"class":781},[127,137309,15462],{"class":143},[127,137311,725],{"class":147},[127,137313,137120],{"class":781},[127,137315,61553],{"class":143},[127,137317,725],{"class":147},[127,137319,137204],{"class":781},[127,137321,51846],{"class":147},[127,137323,137324,137326,137328,137330,137332,137334,137336,137338,137340,137342,137344,137346],{"class":129,"line":151},[127,137325,52679],{"class":147},[127,137327,54356],{"class":140},[127,137329,54359],{"class":143},[127,137331,725],{"class":147},[127,137333,137219],{"class":781},[127,137335,15462],{"class":143},[127,137337,725],{"class":147},[127,137339,137226],{"class":781},[127,137341,61553],{"class":143},[127,137343,725],{"class":147},[127,137345,137233],{"class":781},[127,137347,51846],{"class":147},[127,137349,137350,137352,137354,137356,137358,137360,137362,137364],{"class":129,"line":167},[127,137351,52679],{"class":147},[127,137353,54422],{"class":140},[127,137355,54359],{"class":143},[127,137357,725],{"class":147},[127,137359,67181],{"class":781},[127,137361,137250],{"class":147},[127,137363,54422],{"class":140},[127,137365,51846],{"class":147},[127,137367,137368,137370,137372],{"class":129,"line":415},[127,137369,52321],{"class":147},[127,137371,67158],{"class":140},[127,137373,51846],{"class":147},[23,137375],{"style":25,"src":137376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137378,137380],{"id":137379},"_142-css新特性","14.2 CSS新特性",[62,137382,137384],{"id":137383},"_1421-新增选择器","14.2.1 新增选择器",[22539,137386,137388],{"id":137387},"_14211-属性选择器","14.2.1.1 属性选择器",[23,137390],{"style":25,"src":137391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[117,137393,137395],{"className":119,"code":137394,"language":121,"meta":122,"style":122},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[124,137396,137397,137412,137428],{"__ignoreMap":122},[127,137398,137399,137401,137403,137405,137407,137409],{"class":129,"line":130},[127,137400,54356],{"class":140},[127,137402,1564],{"class":147},[127,137404,103636],{"class":143},[127,137406,725],{"class":290},[127,137408,63232],{"class":781},[127,137410,137411],{"class":147},"] {\n",[127,137413,137414,137416,137418,137420,137422,137424,137426],{"class":129,"line":137},[127,137415,71426],{"class":154},[127,137417,158],{"class":147},[127,137419,893],{"class":154},[127,137421,291],{"class":290},[127,137423,52058],{"class":154},[127,137425,130522],{"class":154},[127,137427,164],{"class":147},[127,137429,137430],{"class":129,"line":151},[127,137431,170],{"class":147},[23,137433],{"style":25,"src":137434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137436,32],{},[1681,137438,137439,137442,137445,137448],{},[635,137440,137441],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[635,137443,137444],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[635,137446,137447],{},"属性选择器也可以选择出来自定义的属性",[635,137449,137450,137452],{},[30,137451,9567],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22539,137454,137456],{"id":137455},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[23,137458],{"style":25,"src":137459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[632,137461,137462],{},[635,137463,137464],{},"fist-child",[117,137466,137468],{"className":119,"code":137467,"language":121,"meta":122,"style":122},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[124,137469,137470,137475,137490,137510,137528],{"__ignoreMap":122},[127,137471,137472],{"class":129,"line":130},[127,137473,137474],{"class":133},"\u002F* 属性选择器 *\u002F\n",[127,137476,137477,137479,137481,137483,137485,137487],{"class":129,"line":137},[127,137478,54356],{"class":140},[127,137480,1564],{"class":147},[127,137482,103636],{"class":143},[127,137484,725],{"class":290},[127,137486,63232],{"class":781},[127,137488,137489],{"class":147},"] { }\n",[127,137491,137492,137494,137496,137498,137501,137504,137507],{"class":129,"line":151},[127,137493,54356],{"class":140},[127,137495,1564],{"class":147},[127,137497,15236],{"class":143},[127,137499,137500],{"class":290},"^=",[127,137502,137503],{"class":781},"\"icon\"",[127,137505,137506],{"class":147},"] { }  ",[127,137508,137509],{"class":133},"\u002F* 以 icon 开头 *\u002F\n",[127,137511,137512,137514,137516,137518,137521,137523,137525],{"class":129,"line":167},[127,137513,54356],{"class":140},[127,137515,1564],{"class":147},[127,137517,15236],{"class":143},[127,137519,137520],{"class":290},"$=",[127,137522,137503],{"class":781},[127,137524,137506],{"class":147},[127,137526,137527],{"class":133},"\u002F* 以 icon 结尾 *\u002F\n",[127,137529,137530,137532,137534,137536,137539,137541,137543],{"class":129,"line":415},[127,137531,54356],{"class":140},[127,137533,1564],{"class":147},[127,137535,15236],{"class":143},[127,137537,137538],{"class":290},"*=",[127,137540,137503],{"class":781},[127,137542,137506],{"class":147},[127,137544,137545],{"class":133},"\u002F* 包含 icon *\u002F\n",[19,137547,137548],{},"ul的第一个儿子文本为红色",[19,137550,137551],{},"一定要在冒号前加空格，不然就是选中所有的了",[117,137553,137555],{"className":119,"code":137554,"language":121,"meta":122,"style":122},".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",[124,137556,137557,137563,137573,137577,137581,137586,137599,137612,137628,137645,137662],{"__ignoreMap":122},[127,137558,137559,137561],{"class":129,"line":130},[127,137560,144],{"class":143},[127,137562,148],{"class":147},[127,137564,137565,137567,137569,137571],{"class":129,"line":137},[127,137566,400],{"class":154},[127,137568,158],{"class":147},[127,137570,405],{"class":154},[127,137572,164],{"class":147},[127,137574,137575],{"class":129,"line":151},[127,137576,170],{"class":147},[127,137578,137579],{"class":129,"line":167},[127,137580,136403],{"class":147},[127,137582,137583],{"class":129,"line":415},[127,137584,137585],{"class":133},"\u002F* 结构伪类选择器 *\u002F\n",[127,137587,137588,137590,137593,137596],{"class":129,"line":421},[127,137589,635],{"class":140},[127,137591,137592],{"class":143},":first-child",[127,137594,137595],{"class":147}," { }           ",[127,137597,137598],{"class":133},"\u002F* 第一个 *\u002F\n",[127,137600,137601,137603,137606,137609],{"class":129,"line":1766},[127,137602,635],{"class":140},[127,137604,137605],{"class":143},":last-child",[127,137607,137608],{"class":147}," { }            ",[127,137610,137611],{"class":133},"\u002F* 最后一个 *\u002F\n",[127,137613,137614,137616,137618,137620,137622,137625],{"class":129,"line":1856},[127,137615,635],{"class":140},[127,137617,129856],{"class":143},[127,137619,681],{"class":147},[127,137621,530],{"class":154},[127,137623,137624],{"class":147},") { }          ",[127,137626,137627],{"class":133},"\u002F* 第2个 *\u002F\n",[127,137629,137630,137632,137634,137636,137639,137642],{"class":129,"line":1862},[127,137631,635],{"class":140},[127,137633,129856],{"class":143},[127,137635,681],{"class":147},[127,137637,137638],{"class":154},"2n",[127,137640,137641],{"class":147},") { }         ",[127,137643,137644],{"class":133},"\u002F* 偶数 *\u002F\n",[127,137646,137647,137649,137651,137653,137656,137659],{"class":129,"line":1874},[127,137648,635],{"class":140},[127,137650,129856],{"class":143},[127,137652,681],{"class":147},[127,137654,137655],{"class":154},"2n+1",[127,137657,137658],{"class":147},") { }       ",[127,137660,137661],{"class":133},"\u002F* 奇数 *\u002F\n",[127,137663,137664,137666,137668,137670,137673,137675],{"class":129,"line":2155},[127,137665,635],{"class":140},[127,137667,129856],{"class":143},[127,137669,681],{"class":147},[127,137671,137672],{"class":154},"-n+3",[127,137674,137658],{"class":147},[127,137676,137677],{"class":133},"\u002F* 前3个 *\u002F\n",[52147,137679,137682],{"className":137680},[137681],"example","\n  示例内容\n",[19,137684,137685],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1681,137687,137688],{},[635,137689,137690,137693],{},[124,137691,137692],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137695,137696],{},"也就是说它选择的是熊大",[632,137698,137699],{"start":421},[635,137700,137701],{},"权重",[117,137703,137705],{"className":119,"code":137704,"language":121,"meta":122,"style":122},"\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",[124,137706,137707,137711,137721,137731,137745,137759,137773],{"__ignoreMap":122},[127,137708,137709],{"class":129,"line":130},[127,137710,137585],{"class":133},[127,137712,137713,137715,137717,137719],{"class":129,"line":137},[127,137714,635],{"class":140},[127,137716,137592],{"class":143},[127,137718,137595],{"class":147},[127,137720,137598],{"class":133},[127,137722,137723,137725,137727,137729],{"class":129,"line":151},[127,137724,635],{"class":140},[127,137726,137605],{"class":143},[127,137728,137608],{"class":147},[127,137730,137611],{"class":133},[127,137732,137733,137735,137737,137739,137741,137743],{"class":129,"line":167},[127,137734,635],{"class":140},[127,137736,129856],{"class":143},[127,137738,681],{"class":147},[127,137740,530],{"class":154},[127,137742,137624],{"class":147},[127,137744,137627],{"class":133},[127,137746,137747,137749,137751,137753,137755,137757],{"class":129,"line":415},[127,137748,635],{"class":140},[127,137750,129856],{"class":143},[127,137752,681],{"class":147},[127,137754,137638],{"class":154},[127,137756,137641],{"class":147},[127,137758,137644],{"class":133},[127,137760,137761,137763,137765,137767,137769,137771],{"class":129,"line":421},[127,137762,635],{"class":140},[127,137764,129856],{"class":143},[127,137766,681],{"class":147},[127,137768,137655],{"class":154},[127,137770,137658],{"class":147},[127,137772,137661],{"class":133},[127,137774,137775,137777,137779,137781,137783,137785],{"class":129,"line":1766},[127,137776,635],{"class":140},[127,137778,129856],{"class":143},[127,137780,681],{"class":147},[127,137782,137672],{"class":154},[127,137784,137658],{"class":147},[127,137786,137677],{"class":133},[19,137788,137789],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22539,137791,137793],{"id":137792},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137795,137796],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[23,137798],{"style":25,"src":137799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[632,137801,137802],{},[635,137803,32],{},[1681,137805,137806,137809,137812,137815,137818,137821],{},[635,137807,137808],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[635,137810,137811],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[635,137813,137814],{},"语法： element::before {}",[635,137816,137817],{},"before 和 after 必须有 content 属性",[635,137819,137820],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[635,137822,137823],{},"伪元素选择器和标签选择器一样，权重为 1",[632,137825,137826],{"start":137},[635,137827,137828],{},"实例",[117,137830,137831],{"className":119,"code":137704,"language":121,"meta":122,"style":122},[124,137832,137833,137837,137847,137857,137871,137885,137899],{"__ignoreMap":122},[127,137834,137835],{"class":129,"line":130},[127,137836,137585],{"class":133},[127,137838,137839,137841,137843,137845],{"class":129,"line":137},[127,137840,635],{"class":140},[127,137842,137592],{"class":143},[127,137844,137595],{"class":147},[127,137846,137598],{"class":133},[127,137848,137849,137851,137853,137855],{"class":129,"line":151},[127,137850,635],{"class":140},[127,137852,137605],{"class":143},[127,137854,137608],{"class":147},[127,137856,137611],{"class":133},[127,137858,137859,137861,137863,137865,137867,137869],{"class":129,"line":167},[127,137860,635],{"class":140},[127,137862,129856],{"class":143},[127,137864,681],{"class":147},[127,137866,530],{"class":154},[127,137868,137624],{"class":147},[127,137870,137627],{"class":133},[127,137872,137873,137875,137877,137879,137881,137883],{"class":129,"line":415},[127,137874,635],{"class":140},[127,137876,129856],{"class":143},[127,137878,681],{"class":147},[127,137880,137638],{"class":154},[127,137882,137641],{"class":147},[127,137884,137644],{"class":133},[127,137886,137887,137889,137891,137893,137895,137897],{"class":129,"line":421},[127,137888,635],{"class":140},[127,137890,129856],{"class":143},[127,137892,681],{"class":147},[127,137894,137655],{"class":154},[127,137896,137658],{"class":147},[127,137898,137661],{"class":133},[127,137900,137901,137903,137905,137907,137909,137911],{"class":129,"line":1766},[127,137902,635],{"class":140},[127,137904,129856],{"class":143},[127,137906,681],{"class":147},[127,137908,137672],{"class":154},[127,137910,137658],{"class":147},[127,137912,137677],{"class":133},[23,137914],{"style":25,"src":137915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[632,137917,137918],{"start":151},[635,137919,137920],{},"使用场景1",[23,137922],{"style":25,"src":137923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137925,137926],{},"不需要再加盒子来整红色那部分了",[117,137928,137930],{"className":119,"code":137929,"language":121,"meta":122,"style":122},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[124,137931,137932,137937,137946,137957,137967,137971,137980,137991,138001],{"__ignoreMap":122},[127,137933,137934],{"class":129,"line":130},[127,137935,137936],{"class":133},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[127,137938,137939,137941,137944],{"class":129,"line":137},[127,137940,52147],{"class":140},[127,137942,137943],{"class":143},"::before",[127,137945,148],{"class":147},[127,137947,137948,137951,137953,137955],{"class":129,"line":151},[127,137949,137950],{"class":154},"  content",[127,137952,158],{"class":147},[127,137954,8194],{"class":781},[127,137956,164],{"class":147},[127,137958,137959,137961,137963,137965],{"class":129,"line":167},[127,137960,128558],{"class":154},[127,137962,158],{"class":147},[127,137964,61402],{"class":154},[127,137966,164],{"class":147},[127,137968,137969],{"class":129,"line":415},[127,137970,170],{"class":147},[127,137972,137973,137975,137978],{"class":129,"line":421},[127,137974,52147],{"class":140},[127,137976,137977],{"class":143},"::after",[127,137979,148],{"class":147},[127,137981,137982,137984,137986,137989],{"class":129,"line":1766},[127,137983,137950],{"class":154},[127,137985,158],{"class":147},[127,137987,137988],{"class":781},"\"→\"",[127,137990,164],{"class":147},[127,137992,137993,137995,137997,137999],{"class":129,"line":1856},[127,137994,400],{"class":154},[127,137996,158],{"class":147},[127,137998,62603],{"class":154},[127,138000,164],{"class":147},[127,138002,138003],{"class":129,"line":1862},[127,138004,170],{"class":147},[23,138006],{"style":25,"src":138007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138009,138010],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[23,138012],{"style":25,"src":138013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138015,138016],{},"但是在引用时需要先转义一下",[19,138018,138019],{},"content='\\e930'",[632,138021,138022],{"start":167},[635,138023,138024],{},"使用场景2",[19,138026,138027],{},"仿土豆效果",[19,138029,138030],{},"通过使用伪元素选择器可以减少body中盒子的数量",[117,138032,138033],{"className":119,"code":137929,"language":121,"meta":122,"style":122},[124,138034,138035,138039,138047,138057,138067,138071,138079,138089,138099],{"__ignoreMap":122},[127,138036,138037],{"class":129,"line":130},[127,138038,137936],{"class":133},[127,138040,138041,138043,138045],{"class":129,"line":137},[127,138042,52147],{"class":140},[127,138044,137943],{"class":143},[127,138046,148],{"class":147},[127,138048,138049,138051,138053,138055],{"class":129,"line":151},[127,138050,137950],{"class":154},[127,138052,158],{"class":147},[127,138054,8194],{"class":781},[127,138056,164],{"class":147},[127,138058,138059,138061,138063,138065],{"class":129,"line":167},[127,138060,128558],{"class":154},[127,138062,158],{"class":147},[127,138064,61402],{"class":154},[127,138066,164],{"class":147},[127,138068,138069],{"class":129,"line":415},[127,138070,170],{"class":147},[127,138072,138073,138075,138077],{"class":129,"line":421},[127,138074,52147],{"class":140},[127,138076,137977],{"class":143},[127,138078,148],{"class":147},[127,138080,138081,138083,138085,138087],{"class":129,"line":1766},[127,138082,137950],{"class":154},[127,138084,158],{"class":147},[127,138086,137988],{"class":781},[127,138088,164],{"class":147},[127,138090,138091,138093,138095,138097],{"class":129,"line":1856},[127,138092,400],{"class":154},[127,138094,158],{"class":147},[127,138096,62603],{"class":154},[127,138098,164],{"class":147},[127,138100,138101],{"class":129,"line":1862},[127,138102,170],{"class":147},[23,138104],{"style":25,"src":138105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[632,138107,138108],{"start":415},[635,138109,138110],{},"使用场景3",[19,138112,138113],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[117,138115,138117],{"className":119,"code":138116,"language":121,"meta":122,"style":122},".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",[124,138118,138119,138125,138135,138139,138143,138147,138155,138165,138175,138179,138187,138197,138207],{"__ignoreMap":122},[127,138120,138121,138123],{"class":129,"line":130},[127,138122,130790],{"class":143},[127,138124,148],{"class":147},[127,138126,138127,138129,138131,138133],{"class":129,"line":137},[127,138128,131422],{"class":154},[127,138130,158],{"class":147},[127,138132,24276],{"class":154},[127,138134,164],{"class":147},[127,138136,138137],{"class":129,"line":151},[127,138138,170],{"class":147},[127,138140,138141],{"class":129,"line":167},[127,138142,136403],{"class":147},[127,138144,138145],{"class":129,"line":415},[127,138146,137936],{"class":133},[127,138148,138149,138151,138153],{"class":129,"line":421},[127,138150,52147],{"class":140},[127,138152,137943],{"class":143},[127,138154,148],{"class":147},[127,138156,138157,138159,138161,138163],{"class":129,"line":1766},[127,138158,137950],{"class":154},[127,138160,158],{"class":147},[127,138162,8194],{"class":781},[127,138164,164],{"class":147},[127,138166,138167,138169,138171,138173],{"class":129,"line":1856},[127,138168,128558],{"class":154},[127,138170,158],{"class":147},[127,138172,61402],{"class":154},[127,138174,164],{"class":147},[127,138176,138177],{"class":129,"line":1862},[127,138178,170],{"class":147},[127,138180,138181,138183,138185],{"class":129,"line":1874},[127,138182,52147],{"class":140},[127,138184,137977],{"class":143},[127,138186,148],{"class":147},[127,138188,138189,138191,138193,138195],{"class":129,"line":2155},[127,138190,137950],{"class":154},[127,138192,158],{"class":147},[127,138194,137988],{"class":781},[127,138196,164],{"class":147},[127,138198,138199,138201,138203,138205],{"class":129,"line":2160},[127,138200,400],{"class":154},[127,138202,158],{"class":147},[127,138204,62603],{"class":154},[127,138206,164],{"class":147},[127,138208,138209],{"class":129,"line":2166},[127,138210,170],{"class":147},[19,138212,138213],{},"div {\nmargin: 0 auto;\n}",[117,138215,138218],{"className":138216,"code":138217,"language":5729},[5727],"\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",[124,138219,138217],{"__ignoreMap":122},[19,138221,138222],{},"如果想让多个元素都发生变化",[19,138224,138225],{},"不能如下操作：",[19,138227,138228],{},"transition: width 2s ease 0.5s;",[19,138230,138231],{},"transition: height 2s ease 0.5s;不对！！！",[19,138233,138234],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138236,138237],{},"使用如下：加逗号隔开",[19,138239,138240],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138242,138243],{},"transition all 2s ease;",[62,138245,138247],{"id":138246},"_1426-过渡练习","14.2.6 过渡练习",[632,138249,138250],{},[635,138251,138252],{},"进度条",[23,138254],{"style":25,"src":138255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[117,138257,138259],{"className":119,"code":138258,"language":121,"meta":122,"style":122},"div {\n  transition: all 0.3s ease;\n}\n",[124,138260,138261,138267,138285],{"__ignoreMap":122},[127,138262,138263,138265],{"class":129,"line":130},[127,138264,52147],{"class":140},[127,138266,148],{"class":147},[127,138268,138269,138272,138274,138276,138279,138281,138283],{"class":129,"line":137},[127,138270,138271],{"class":154},"  transition",[127,138273,158],{"class":147},[127,138275,28661],{"class":154},[127,138277,138278],{"class":154}," 0.3",[127,138280,1369],{"class":290},[127,138282,79209],{"class":154},[127,138284,164],{"class":147},[127,138286,138287],{"class":129,"line":151},[127,138288,170],{"class":147},[632,138290,138291],{"start":137},[635,138292,138293],{},"小米logo",[19,138295,138296],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[117,138298,138300],{"className":119,"code":138299,"language":121,"meta":122,"style":122},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[124,138301,138302,138307,138313,138329,138334],{"__ignoreMap":122},[127,138303,138304],{"class":129,"line":130},[127,138305,138306],{"class":133},"\u002F* CSS3 过渡 *\u002F\n",[127,138308,138309,138311],{"class":129,"line":137},[127,138310,52147],{"class":140},[127,138312,148],{"class":147},[127,138314,138315,138317,138319,138321,138323,138325,138327],{"class":129,"line":151},[127,138316,138271],{"class":154},[127,138318,158],{"class":147},[127,138320,28661],{"class":154},[127,138322,138278],{"class":154},[127,138324,1369],{"class":290},[127,138326,79209],{"class":154},[127,138328,164],{"class":147},[127,138330,138331],{"class":129,"line":167},[127,138332,138333],{"class":133},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[127,138335,138336],{"class":129,"line":415},[127,138337,170],{"class":147},[19,138339,138340],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[575,138342,138343],{},"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":122,"searchDepth":137,"depth":137,"links":138345},[138346,138351],{"id":136676,"depth":137,"text":136677,"children":138347},[138348,138349,138350],{"id":136680,"depth":151,"text":136681},{"id":136757,"depth":151,"text":136758},{"id":137088,"depth":151,"text":137089},{"id":137379,"depth":137,"text":137380,"children":138352},[138353,138354],{"id":137383,"depth":151,"text":137384},{"id":138246,"depth":151,"text":138247},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136668,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138361,"title":138362,"body":138363,"description":603,"extension":604,"meta":140107,"navigation":606,"path":140108,"seo":140109,"stem":140110,"__hash__":140111},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138364,"toc":140088},[138365,138368,138372,138375,138381,138387,138391,138393,138396,138399,138402,138405,138408,138411,138414,138418,138422,138425,138428,138431,138435,138438,138441,138446,138449,138452,138455,138459,138462,138471,138474,138477,138481,138484,138487,138492,138499,138513,138521,138528,138533,138536,138539,138542,138549,138553,138559,138565,138568,138571,138576,138582,138584,138592,138597,138600,138606,138608,138613,138618,138621,138623,138628,138631,138636,138641,138675,138679,138683,138686,138690,138693,138779,138782,138819,138822,138858,138862,138867,138880,138934,138936,138964,138966,138994,139000,139014,139016,139060,139062,139106,139109,139116,139127,139129,139156,139158,139184,139191,139207,139209,139303,139305,139399,139406,139409,139414,139420,139494,139497,139499,139535,139537,139573,139576,139583,139602,139605,139608,139610,139635,139637,139661,139664,139667,139697,139701,139704,139767,139769,139835,139837,139901,139904,139936,139938,139964,139966,139992,139995,140026,140028,140054,140056,140082,140085],[10,138366,138362],{"id":138367},"_15-品优购项目上篇-搭建与公共模块",[14,138369,138371],{"id":138370},"_151-项目规划","15.1 项目规划",[23,138373],{"style":25,"src":138374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138376,138377,138380],{},[30,138378,138379],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138382,138383,138386],{},[30,138384,138385],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138388,138390],{"id":138389},"_152-项目介绍","15.2 项目介绍",[19,138392,138379],{},[23,138394],{"style":25,"src":138395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138397,138398],{},"主页：",[23,138400],{"style":25,"src":138401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138403,138404],{},"列表页：",[23,138406],{"style":25,"src":138407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138409,138410],{},"注册页：",[23,138412],{"style":25,"src":138413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138415,138417],{"id":138416},"_153-项目搭建工作","15.3 项目搭建工作",[62,138419,138421],{"id":138420},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[23,138423],{"style":25,"src":138424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138426,138427],{},"经常更换的图片要放到upload文件夹中",[19,138429,138430],{},"不经常换的放到images文件夹中",[62,138432,138434],{"id":138433},"_1532-创建文件如下","15.3.2 创建文件如下",[23,138436],{"style":25,"src":138437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[23,138439],{"style":25,"src":138440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138442,138443],{},[30,138444,138445],{},"初始化样式：",[19,138447,138448],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138450,138451],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138453,138454],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[62,138456,138458],{"id":138457},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138460,138461],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138463,138464,138465,138470],{},"这里最典型的应用就是 ",[30,138466,138467],{},[124,138468,138469],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[23,138472],{"style":25,"src":138473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138475,138476],{},"通过link方法来引入",[62,138478,138480],{"id":138479},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[23,138482],{"style":25,"src":138483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138485,138486],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[632,138488,138489],{},[635,138490,138491],{},"制作favicon图标",[19,138493,138494,138495,138498],{},"①把品优购图标切成 ",[124,138496,138497],{},"png"," 图片",[19,138500,138501,138502,138504,138505,138508,138509],{},"②把 ",[124,138503,138497],{}," 图片转换为 ",[124,138506,138507],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[457,138510,138511],{"href":138511,"rel":138512},"http:\u002F\u002Fwww.bitbug.net\u002F",[24405],[632,138514,138515,138518],{"start":137},[635,138516,138517],{},"favicon图标放到网站根目录下",[635,138519,138520],{},"HTML页面引入favicon",[19,138522,138523,138524,138527],{},"在html 页面里面的 ",[124,138525,138526],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138529,138530],{},[124,138531,138532],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138534,138535],{},"复制这行代码或者在生成这个的网站进行复制",[23,138537],{"style":25,"src":138538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138540,138541],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138543,138544,138545],{},"例如:",[457,138546,138547],{"href":138547,"rel":138548},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24405],[62,138550,138552],{"id":138551},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138554,138555,138558],{},[30,138556,138557],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138560,138561,138564],{},[30,138562,138563],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138566,138567],{},"页面必须有三个标签用来符合 SEO 优化",[23,138569],{"style":25,"src":138570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[632,138572,138573],{},[635,138574,138575],{},"title网站标题",[19,138577,138578,138581],{},[30,138579,138580],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138583,69323],{},[1681,138585,138586,138589],{},[635,138587,138588],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[635,138590,138591],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[632,138593,138594],{"start":137},[635,138595,138596],{},"description网站描述",[19,138598,138599],{},"简要说明我们网站主要是做什么的",[19,138601,138602,138605],{},[30,138603,138604],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138607,69323],{},[19,138609,138610],{},[124,138611,138612],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[632,138614,138615],{"start":151},[635,138616,138617],{},"keywords关键词",[19,138619,138620],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138622,69323],{},[19,138624,138625],{},[124,138626,138627],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138629,138630],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138632,138633],{},[30,138634,138635],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[632,138637,138638],{"start":167},[635,138639,138640],{},"代码总结",[117,138642,138643],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,138644,138645,138649,138663,138667],{"__ignoreMap":122},[127,138646,138647],{"class":129,"line":130},[127,138648,131053],{"class":133},[127,138650,138651,138653,138655,138657,138659,138661],{"class":129,"line":137},[127,138652,1584],{"class":147},[127,138654,52147],{"class":140},[127,138656,54021],{"class":143},[127,138658,725],{"class":147},[127,138660,131066],{"class":781},[127,138662,51846],{"class":147},[127,138664,138665],{"class":129,"line":151},[127,138666,131073],{"class":147},[127,138668,138669,138671,138673],{"class":129,"line":167},[127,138670,52321],{"class":147},[127,138672,52147],{"class":140},[127,138674,51846],{"class":147},[14,138676,138678],{"id":138677},"_154-项目公共部分制作","15.4 项目公共部分制作",[62,138680,138682],{"id":138681},"_1541-常用模块类命名","15.4.1 常用模块类命名",[23,138684],{"style":25,"src":138685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[62,138687,138689],{"id":138688},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138691,138692],{},"布局思路：",[1681,138694,138695,138698,138701,138723,138756],{},[635,138696,138697],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[635,138699,138700],{},"里面包含版心的盒子",[635,138702,138703,138704],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1681,138705,138706,138714,138720],{},[635,138707,138708,138709,22041,138711,138713],{},"1 号盒子 里面包含一个",[124,138710,1681],{},[124,138712,1681],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[635,138715,138716,138717,138719],{},"里面的内容是水平排列，所以需要给",[124,138718,635],{},"设置浮动",[635,138721,138722],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[635,138724,138725,138726],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1681,138727,138728,138742,138747],{},[635,138729,138730,138731,22041,138733,138735,138736,138738,138739,138741],{},"2 号盒子 里面包含一个",[124,138732,1681],{},[124,138734,1681],{},"包裹",[124,138737,635],{},"，中间的",[124,138740,1595],{},"可以用样式去设置，也可以用字符 |",[635,138743,138744,138745,138719],{},"里面内容水平排列，给",[124,138746,635],{},[635,138748,138749,138750,138752,138753,138755],{},"找到里面所有偶数的 ",[124,138751,635],{}," 设置样式（偶数的 ",[124,138754,635],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[635,138757,138758,138759],{},"需要用到字体图标",[1681,138760,138761,138767,138770,138773,138776],{},[635,138762,138763,138764],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[124,138765,138766],{},"arrow-icon",[635,138768,138769],{},"先要引入字体图片的资源",[635,138771,138772],{},"在样式里面利用 font-face 来进行声明",[635,138774,138775],{},"在伪元素的 content属性设置 图标的编码",[635,138777,138778],{},"给伪元素设置font-family属性",[19,138780,138781],{},"结构实例代码：",[117,138783,138785],{"className":119,"code":138784,"language":121,"meta":122,"style":122},"div::before {\n  content: \"\";\n  display: block;\n}\n",[124,138786,138787,138795,138805,138815],{"__ignoreMap":122},[127,138788,138789,138791,138793],{"class":129,"line":130},[127,138790,52147],{"class":140},[127,138792,137943],{"class":143},[127,138794,148],{"class":147},[127,138796,138797,138799,138801,138803],{"class":129,"line":137},[127,138798,137950],{"class":154},[127,138800,158],{"class":147},[127,138802,8194],{"class":781},[127,138804,164],{"class":147},[127,138806,138807,138809,138811,138813],{"class":129,"line":151},[127,138808,128558],{"class":154},[127,138810,158],{"class":147},[127,138812,61402],{"class":154},[127,138814,164],{"class":147},[127,138816,138817],{"class":129,"line":167},[127,138818,170],{"class":147},[19,138820,138821],{},"样式实例代码：",[117,138823,138824],{"className":119,"code":138784,"language":121,"meta":122,"style":122},[124,138825,138826,138834,138844,138854],{"__ignoreMap":122},[127,138827,138828,138830,138832],{"class":129,"line":130},[127,138829,52147],{"class":140},[127,138831,137943],{"class":143},[127,138833,148],{"class":147},[127,138835,138836,138838,138840,138842],{"class":129,"line":137},[127,138837,137950],{"class":154},[127,138839,158],{"class":147},[127,138841,8194],{"class":781},[127,138843,164],{"class":147},[127,138845,138846,138848,138850,138852],{"class":129,"line":151},[127,138847,128558],{"class":154},[127,138849,158],{"class":147},[127,138851,61402],{"class":154},[127,138853,164],{"class":147},[127,138855,138856],{"class":129,"line":167},[127,138857,170],{"class":147},[62,138859,138861],{"id":138860},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1681,138863,138864],{},[635,138865,138866],{},"header 盒子必须要有高度",[19,138868,138869,138870,138872,138873],{},"1 号盒子是 ",[124,138871,131954],{}," 标志定位，在正常开发过程中， ",[30,138874,138875,138876,138879],{},"logo的布局其实是有讲究的，需要进行 ",[124,138877,138878],{},"logoSEO","的优化 （★★★）",[1681,138881,138882,138890,138898,138925],{},[635,138883,138884,138886,138887,138889],{},[124,138885,131954],{}," 里面首先放一个 ",[124,138888,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[635,138891,138892,138894,138895,138897],{},[124,138893,10],{}," 里面再放一个链接，可以返回首页的，把 ",[124,138896,131954],{}," 的背景图片给链接即可",[635,138899,138900,138901],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1681,138902,138903,138918],{},[635,138904,138905,138906,138909,138910,138913,138914,138917],{},"方法1：",[124,138907,138908],{},"text-indent"," 移到盒子外面（",[124,138911,138912],{},"text-indent: -9999px",") ，然后 ",[124,138915,138916],{},"overflow:hidden"," ，淘宝的做法",[635,138919,138920,138921,138924],{},"方法2：直接给 ",[124,138922,138923],{},"font-size: 0;"," 就看不到文字了，京东的做法",[635,138926,138927,138928,138930,138931,138933],{},"最后给链接一个 ",[124,138929,51946],{}," 属性，这样鼠标放到 ",[124,138932,131954],{}," 上就可以看到提示文字了",[19,138935,138781],{},[117,138937,138938],{"className":127689,"code":132175,"language":127691,"meta":122,"style":122},[124,138939,138940],{"__ignoreMap":122},[127,138941,138942,138944,138946,138948,138950,138952,138954,138956,138958,138960,138962],{"class":129,"line":130},[127,138943,1584],{"class":147},[127,138945,457],{"class":140},[127,138947,61590],{"class":143},[127,138949,725],{"class":147},[127,138951,132190],{"class":781},[127,138953,132193],{"class":143},[127,138955,725],{"class":147},[127,138957,132198],{"class":781},[127,138959,132201],{"class":147},[127,138961,457],{"class":140},[127,138963,51846],{"class":147},[19,138965,138821],{},[117,138967,138968],{"className":127689,"code":132175,"language":127691,"meta":122,"style":122},[124,138969,138970],{"__ignoreMap":122},[127,138971,138972,138974,138976,138978,138980,138982,138984,138986,138988,138990,138992],{"class":129,"line":130},[127,138973,1584],{"class":147},[127,138975,457],{"class":140},[127,138977,61590],{"class":143},[127,138979,725],{"class":147},[127,138981,132190],{"class":781},[127,138983,132193],{"class":143},[127,138985,725],{"class":147},[127,138987,132198],{"class":781},[127,138989,132201],{"class":147},[127,138991,457],{"class":140},[127,138993,51846],{"class":147},[19,138995,138996,138997,138999],{},"2 号盒子是 ",[124,138998,131967],{}," 搜索模块定位",[1681,139001,139002,139005,139008,139011],{},[635,139003,139004],{},"search盒子利用定位的方式放在对应的位置",[635,139006,139007],{},"search盒子设置绝对定位，header盒子设置相对定位",[635,139009,139010],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[635,139012,139013],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139015,138781],{},[117,139017,139018],{"className":119,"code":132262,"language":121,"meta":122,"style":122},[124,139019,139020,139042,139046,139056],{"__ignoreMap":122},[127,139021,139022,139024,139026,139028,139030,139032,139034,139036,139038,139040],{"class":129,"line":130},[127,139023,52147],{"class":140},[127,139025,12977],{"class":147},[127,139027,19],{"class":140},[127,139029,12977],{"class":147},[127,139031,10],{"class":140},[127,139033,12977],{"class":147},[127,139035,1681],{"class":140},[127,139037,12977],{"class":147},[127,139039,635],{"class":140},[127,139041,148],{"class":147},[127,139043,139044],{"class":129,"line":137},[127,139045,132291],{"class":133},[127,139047,139048,139050,139052,139054],{"class":129,"line":151},[127,139049,128558],{"class":154},[127,139051,158],{"class":147},[127,139053,61402],{"class":154},[127,139055,164],{"class":147},[127,139057,139058],{"class":129,"line":167},[127,139059,170],{"class":147},[19,139061,138821],{},[117,139063,139064],{"className":119,"code":132262,"language":121,"meta":122,"style":122},[124,139065,139066,139088,139092,139102],{"__ignoreMap":122},[127,139067,139068,139070,139072,139074,139076,139078,139080,139082,139084,139086],{"class":129,"line":130},[127,139069,52147],{"class":140},[127,139071,12977],{"class":147},[127,139073,19],{"class":140},[127,139075,12977],{"class":147},[127,139077,10],{"class":140},[127,139079,12977],{"class":147},[127,139081,1681],{"class":140},[127,139083,12977],{"class":147},[127,139085,635],{"class":140},[127,139087,148],{"class":147},[127,139089,139090],{"class":129,"line":137},[127,139091,132291],{"class":133},[127,139093,139094,139096,139098,139100],{"class":129,"line":151},[127,139095,128558],{"class":154},[127,139097,158],{"class":147},[127,139099,61402],{"class":154},[127,139101,164],{"class":147},[127,139103,139104],{"class":129,"line":167},[127,139105,170],{"class":147},[19,139107,139108],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139110,139111,139112,139115],{},"3 号盒子是 ",[124,139113,139114],{},"hotwords"," 热词模块定位",[1681,139117,139118,139121,139124],{},[635,139119,139120],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[635,139122,139123],{},"给里面所有的a标签设置 左右10px的外边距",[635,139125,139126],{},"给第一个a标签设置文字变红色（#c81623）",[19,139128,138781],{},[117,139130,139132],{"className":119,"code":139131,"language":121,"meta":122,"style":122},"div {\n  margin: 0 auto;\n}\n",[124,139133,139134,139140,139152],{"__ignoreMap":122},[127,139135,139136,139138],{"class":129,"line":130},[127,139137,52147],{"class":140},[127,139139,148],{"class":147},[127,139141,139142,139144,139146,139148,139150],{"class":129,"line":137},[127,139143,71003],{"class":154},[127,139145,158],{"class":147},[127,139147,867],{"class":154},[127,139149,52093],{"class":154},[127,139151,164],{"class":147},[127,139153,139154],{"class":129,"line":151},[127,139155,170],{"class":147},[19,139157,138821],{},[117,139159,139160],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,139161,139162,139168,139180],{"__ignoreMap":122},[127,139163,139164,139166],{"class":129,"line":130},[127,139165,52147],{"class":140},[127,139167,148],{"class":147},[127,139169,139170,139172,139174,139176,139178],{"class":129,"line":137},[127,139171,71003],{"class":154},[127,139173,158],{"class":147},[127,139175,867],{"class":154},[127,139177,52093],{"class":154},[127,139179,164],{"class":147},[127,139181,139182],{"class":129,"line":151},[127,139183,170],{"class":147},[19,139185,139186,139187,139190],{},"4 号盒子是 ",[124,139188,139189],{},"shopcar"," 购物车模块",[1681,139192,139193,139198,139201,139204],{},[635,139194,123864,139195,139197],{},[124,139196,139189],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[635,139199,139200],{},"count 统计部分用绝对定位做",[635,139202,139203],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[635,139205,139206],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139208,138781],{},[117,139210,139211],{"className":119,"code":132374,"language":121,"meta":122,"style":122},[124,139212,139213,139217,139231,139235,139249,139253,139267,139271,139285,139289],{"__ignoreMap":122},[127,139214,139215],{"class":129,"line":130},[127,139216,132381],{"class":133},[127,139218,139219,139221,139223,139225,139227,139229],{"class":129,"line":137},[127,139220,132386],{"class":143},[127,139222,80336],{"class":147},[127,139224,129302],{"class":154},[127,139226,158],{"class":147},[127,139228,132395],{"class":154},[127,139230,129872],{"class":147},[127,139232,139233],{"class":129,"line":151},[127,139234,132402],{"class":133},[127,139236,139237,139239,139241,139243,139245,139247],{"class":129,"line":167},[127,139238,132407],{"class":143},[127,139240,80336],{"class":147},[127,139242,129302],{"class":154},[127,139244,158],{"class":147},[127,139246,55298],{"class":154},[127,139248,129872],{"class":147},[127,139250,139251],{"class":129,"line":415},[127,139252,132422],{"class":133},[127,139254,139255,139257,139259,139261,139263,139265],{"class":129,"line":421},[127,139256,132427],{"class":143},[127,139258,80336],{"class":147},[127,139260,129302],{"class":154},[127,139262,158],{"class":147},[127,139264,55365],{"class":154},[127,139266,129872],{"class":147},[127,139268,139269],{"class":129,"line":1766},[127,139270,132442],{"class":133},[127,139272,139273,139275,139277,139279,139281,139283],{"class":129,"line":1856},[127,139274,132447],{"class":143},[127,139276,80336],{"class":147},[127,139278,129302],{"class":154},[127,139280,158],{"class":147},[127,139282,86762],{"class":154},[127,139284,129872],{"class":147},[127,139286,139287],{"class":129,"line":1862},[127,139288,132462],{"class":133},[127,139290,139291,139293,139295,139297,139299,139301],{"class":129,"line":1874},[127,139292,132467],{"class":143},[127,139294,80336],{"class":147},[127,139296,129302],{"class":154},[127,139298,158],{"class":147},[127,139300,132476],{"class":154},[127,139302,129872],{"class":147},[19,139304,138821],{},[117,139306,139307],{"className":119,"code":132374,"language":121,"meta":122,"style":122},[124,139308,139309,139313,139327,139331,139345,139349,139363,139367,139381,139385],{"__ignoreMap":122},[127,139310,139311],{"class":129,"line":130},[127,139312,132381],{"class":133},[127,139314,139315,139317,139319,139321,139323,139325],{"class":129,"line":137},[127,139316,132386],{"class":143},[127,139318,80336],{"class":147},[127,139320,129302],{"class":154},[127,139322,158],{"class":147},[127,139324,132395],{"class":154},[127,139326,129872],{"class":147},[127,139328,139329],{"class":129,"line":151},[127,139330,132402],{"class":133},[127,139332,139333,139335,139337,139339,139341,139343],{"class":129,"line":167},[127,139334,132407],{"class":143},[127,139336,80336],{"class":147},[127,139338,129302],{"class":154},[127,139340,158],{"class":147},[127,139342,55298],{"class":154},[127,139344,129872],{"class":147},[127,139346,139347],{"class":129,"line":415},[127,139348,132422],{"class":133},[127,139350,139351,139353,139355,139357,139359,139361],{"class":129,"line":421},[127,139352,132427],{"class":143},[127,139354,80336],{"class":147},[127,139356,129302],{"class":154},[127,139358,158],{"class":147},[127,139360,55365],{"class":154},[127,139362,129872],{"class":147},[127,139364,139365],{"class":129,"line":1766},[127,139366,132442],{"class":133},[127,139368,139369,139371,139373,139375,139377,139379],{"class":129,"line":1856},[127,139370,132447],{"class":143},[127,139372,80336],{"class":147},[127,139374,129302],{"class":154},[127,139376,158],{"class":147},[127,139378,86762],{"class":154},[127,139380,129872],{"class":147},[127,139382,139383],{"class":129,"line":1862},[127,139384,132462],{"class":133},[127,139386,139387,139389,139391,139393,139395,139397],{"class":129,"line":1874},[127,139388,132467],{"class":143},[127,139390,80336],{"class":147},[127,139392,129302],{"class":154},[127,139394,158],{"class":147},[127,139396,132476],{"class":154},[127,139398,129872],{"class":147},[62,139400,139402,139403,139405],{"id":139401},"_1544-nav导航模块制作","15.4.4 ",[124,139404,54248],{},"导航模块制作",[23,139407],{"style":25,"src":139408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139410,139411,139413],{},[124,139412,54248],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139415,139416,139417],{},"1 号盒子左侧浮动，",[124,139418,139419],{},"dropdown",[1681,139421,139422,139432,139440,139446,139454,139464,139472,139483],{},[635,139423,139424,139425,101547,139428,139431],{},"1号盒子有讲究，根据相关性 里面包含 ",[124,139426,139427],{},".dt",[124,139429,139430],{},".dd"," 两个盒子",[635,139433,139434,139436,139437,139439],{},[124,139435,139427],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[124,139438,139430],{}," 挤到下面去了",[635,139441,139442,139443,139445],{},"给 ",[124,139444,139430],{}," 盒子设置宽度 和 高度，以及背景颜色",[635,139447,139442,139448,139450,139451,120766],{},[124,139449,139430],{}," 盒子里面定义 无序列表 （",[124,139452,139453],{},"ul > li > a",[635,139455,139456,139457,139459,139460,139463],{},"每个 ",[124,139458,635],{}," 都有一个高度（",[124,139461,139462],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[635,139465,139442,139466,139468,139469,120766],{},[124,139467,635],{}," 里面的a设置文字大小（",[124,139470,139471],{},"14px",[635,139473,139442,139474,139476,139477,139479,139480,139482],{},[124,139475,635],{}," 设置 ",[124,139478,128103],{},"，当鼠标移入的时候，让",[124,139481,635],{},"的背景变成白色，让里面的文字变成红色",[635,139484,139485,139487,139488,139490,139491,139493],{},[124,139486,635],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[124,139489,635],{},"的右侧，那么给",[124,139492,635],{},"设置相对定位",[19,139495,139496],{},"一定要注意相关性",[19,139498,138781],{},[117,139500,139501],{"className":119,"code":138784,"language":121,"meta":122,"style":122},[124,139502,139503,139511,139521,139531],{"__ignoreMap":122},[127,139504,139505,139507,139509],{"class":129,"line":130},[127,139506,52147],{"class":140},[127,139508,137943],{"class":143},[127,139510,148],{"class":147},[127,139512,139513,139515,139517,139519],{"class":129,"line":137},[127,139514,137950],{"class":154},[127,139516,158],{"class":147},[127,139518,8194],{"class":781},[127,139520,164],{"class":147},[127,139522,139523,139525,139527,139529],{"class":129,"line":151},[127,139524,128558],{"class":154},[127,139526,158],{"class":147},[127,139528,61402],{"class":154},[127,139530,164],{"class":147},[127,139532,139533],{"class":129,"line":167},[127,139534,170],{"class":147},[19,139536,138821],{},[117,139538,139539],{"className":119,"code":138784,"language":121,"meta":122,"style":122},[124,139540,139541,139549,139559,139569],{"__ignoreMap":122},[127,139542,139543,139545,139547],{"class":129,"line":130},[127,139544,52147],{"class":140},[127,139546,137943],{"class":143},[127,139548,148],{"class":147},[127,139550,139551,139553,139555,139557],{"class":129,"line":137},[127,139552,137950],{"class":154},[127,139554,158],{"class":147},[127,139556,8194],{"class":781},[127,139558,164],{"class":147},[127,139560,139561,139563,139565,139567],{"class":129,"line":151},[127,139562,128558],{"class":154},[127,139564,158],{"class":147},[127,139566,61402],{"class":154},[127,139568,164],{"class":147},[127,139570,139571],{"class":129,"line":167},[127,139572,170],{"class":147},[19,139574,139575],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139577,139578,139579,139582],{},"2 号盒子左侧浮动，",[124,139580,139581],{},"navitems"," 导航栏组",[1681,139584,139585,139590,139599],{},[635,139586,139587,139588],{},"里面结构是 ",[124,139589,139453],{},[635,139591,139592,139593,139595,139596,139598],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[124,139594,457],{},"左右的",[124,139597,31423],{},"把两侧撑开",[635,139600,139601],{},"让文字垂直居中（行高等于高度）",[23,139603],{"style":25,"src":139604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139606,139607],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139609,138781],{},[117,139611,139613],{"className":119,"code":139612,"language":121,"meta":122,"style":122},".box {\n  float: left;\n}\n",[124,139614,139615,139621,139631],{"__ignoreMap":122},[127,139616,139617,139619],{"class":129,"line":130},[127,139618,130790],{"class":143},[127,139620,148],{"class":147},[127,139622,139623,139625,139627,139629],{"class":129,"line":137},[127,139624,131422],{"class":154},[127,139626,158],{"class":147},[127,139628,24276],{"class":154},[127,139630,164],{"class":147},[127,139632,139633],{"class":129,"line":151},[127,139634,170],{"class":147},[19,139636,138821],{},[117,139638,139639],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,139640,139641,139647,139657],{"__ignoreMap":122},[127,139642,139643,139645],{"class":129,"line":130},[127,139644,130790],{"class":143},[127,139646,148],{"class":147},[127,139648,139649,139651,139653,139655],{"class":129,"line":137},[127,139650,131422],{"class":154},[127,139652,158],{"class":147},[127,139654,24276],{"class":154},[127,139656,164],{"class":147},[127,139658,139659],{"class":129,"line":151},[127,139660,170],{"class":147},[19,139662,139663],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[23,139665],{"style":25,"src":139666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[117,139668,139669],{"className":119,"code":131099,"language":121,"meta":122,"style":122},[124,139670,139671,139677,139693],{"__ignoreMap":122},[127,139672,139673,139675],{"class":129,"line":130},[127,139674,52147],{"class":140},[127,139676,148],{"class":147},[127,139678,139679,139681,139683,139685,139687,139689,139691],{"class":129,"line":137},[127,139680,71426],{"class":154},[127,139682,158],{"class":147},[127,139684,893],{"class":154},[127,139686,291],{"class":290},[127,139688,52058],{"class":154},[127,139690,130334],{"class":154},[127,139692,164],{"class":147},[127,139694,139695],{"class":129,"line":151},[127,139696,170],{"class":147},[62,139698,139700],{"id":139699},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[23,139702],{"style":25,"src":139703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1681,139705,139706,139711,139716],{},[635,139707,139708,139710],{},[124,139709,132145],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[635,139712,139713,139715],{},[124,139714,132145],{}," 里面有一个大的版心",[635,139717,139718,139719,139722,139723],{},"版心里面包含 1 号盒子，",[124,139720,139721],{},"mod_service"," 是服务模块，mod 是模块的意思",[1681,139724,139725,139730,139743,139759,139764],{},[635,139726,139442,139727,139729],{},[124,139728,139721],{}," 设置高度（80px）和下边框",[635,139731,139732,139733,139736,139737,139739,139740,139742],{},"在里面定义 ",[124,139734,139735],{},"ul > li"," ,每个",[124,139738,635],{}," 宽度是300px 高度是 50px，给每个",[124,139741,635],{},"设置35px的左内边距",[635,139744,139745,139746,139748,139749,139751,139752,139754,139755,18951,139757,120766],{},"在每个",[124,139747,635],{},"里面，放一个 ",[124,139750,23451],{},"（里面放图标），一个",[124,139753,52147],{},"（里面放",[124,139756,52147],{},[124,139758,19],{},[635,139760,139442,139761,139763],{},[124,139762,23451],{},"设置浮动，让h5与这个div左右排列",[635,139765,139766],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139768,138781],{},[117,139770,139772],{"className":119,"code":139771,"language":121,"meta":122,"style":122},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[124,139773,139774,139780,139792,139804,139831],{"__ignoreMap":122},[127,139775,139776,139778],{"class":129,"line":130},[127,139777,134699],{"class":143},[127,139779,148],{"class":147},[127,139781,139782,139784,139786,139788,139790],{"class":129,"line":137},[127,139783,71099],{"class":154},[127,139785,158],{"class":147},[127,139787,1374],{"class":154},[127,139789,291],{"class":290},[127,139791,164],{"class":147},[127,139793,139794,139796,139798,139800,139802],{"class":129,"line":151},[127,139795,71318],{"class":154},[127,139797,158],{"class":147},[127,139799,1374],{"class":154},[127,139801,291],{"class":290},[127,139803,164],{"class":147},[127,139805,139806,139808,139810,139812,139814,139816,139818,139820,139823,139825,139827,139829],{"class":129,"line":167},[127,139807,71142],{"class":154},[127,139809,158],{"class":147},[127,139811,62259],{"class":154},[127,139813,681],{"class":147},[127,139815,134738],{"class":5758},[127,139817,14256],{"class":147},[127,139819,62269],{"class":154},[127,139821,139822],{"class":154}," -10",[127,139824,291],{"class":290},[127,139826,134757],{"class":154},[127,139828,291],{"class":290},[127,139830,164],{"class":147},[127,139832,139833],{"class":129,"line":415},[127,139834,170],{"class":147},[19,139836,138821],{},[117,139838,139839],{"className":119,"code":139771,"language":121,"meta":122,"style":122},[124,139840,139841,139847,139859,139871,139897],{"__ignoreMap":122},[127,139842,139843,139845],{"class":129,"line":130},[127,139844,134699],{"class":143},[127,139846,148],{"class":147},[127,139848,139849,139851,139853,139855,139857],{"class":129,"line":137},[127,139850,71099],{"class":154},[127,139852,158],{"class":147},[127,139854,1374],{"class":154},[127,139856,291],{"class":290},[127,139858,164],{"class":147},[127,139860,139861,139863,139865,139867,139869],{"class":129,"line":151},[127,139862,71318],{"class":154},[127,139864,158],{"class":147},[127,139866,1374],{"class":154},[127,139868,291],{"class":290},[127,139870,164],{"class":147},[127,139872,139873,139875,139877,139879,139881,139883,139885,139887,139889,139891,139893,139895],{"class":129,"line":167},[127,139874,71142],{"class":154},[127,139876,158],{"class":147},[127,139878,62259],{"class":154},[127,139880,681],{"class":147},[127,139882,134738],{"class":5758},[127,139884,14256],{"class":147},[127,139886,62269],{"class":154},[127,139888,139822],{"class":154},[127,139890,291],{"class":290},[127,139892,134757],{"class":154},[127,139894,291],{"class":290},[127,139896,164],{"class":147},[127,139898,139899],{"class":129,"line":415},[127,139900,170],{"class":147},[19,139902,139903],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1681,139905,139906,139909,139915,139921,139933],{},[635,139907,139908],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[635,139910,139911,139912,120766],{},"里面的布局利用 自定义列表来实现（",[124,139913,139914],{},"dl > dt + dd",[635,139916,139442,139917,139920],{},[124,139918,139919],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[635,139922,139442,139923,139926,139927,18951,139929,139932],{},[124,139924,139925],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[124,139928,139925],{},[124,139930,139931],{},"dd","之间有些距离",[635,139934,139935],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139937,138781],{},[117,139939,139940],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,139941,139942,139948,139960],{"__ignoreMap":122},[127,139943,139944,139946],{"class":129,"line":130},[127,139945,52147],{"class":140},[127,139947,148],{"class":147},[127,139949,139950,139952,139954,139956,139958],{"class":129,"line":137},[127,139951,71003],{"class":154},[127,139953,158],{"class":147},[127,139955,867],{"class":154},[127,139957,52093],{"class":154},[127,139959,164],{"class":147},[127,139961,139962],{"class":129,"line":151},[127,139963,170],{"class":147},[19,139965,138821],{},[117,139967,139968],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,139969,139970,139976,139988],{"__ignoreMap":122},[127,139971,139972,139974],{"class":129,"line":130},[127,139973,52147],{"class":140},[127,139975,148],{"class":147},[127,139977,139978,139980,139982,139984,139986],{"class":129,"line":137},[127,139979,71003],{"class":154},[127,139981,158],{"class":147},[127,139983,867],{"class":154},[127,139985,52093],{"class":154},[127,139987,164],{"class":147},[127,139989,139990],{"class":129,"line":151},[127,139991,170],{"class":147},[19,139993,139994],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1681,139996,139997,140006,140009,140020],{},[635,139998,139999,140000,140002,140003,140005],{},"分为上下两块，上面是 ",[124,140001,132162],{}," 友情链接，下面是 ",[124,140004,132155],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[635,140007,140008],{},"把内容分别复制到相应模块中",[635,140010,139442,140011,140013,140014,140016,140017,140019],{},[124,140012,132162],{}," 设置 15px 的下外边距，给",[124,140015,132162],{}," 里面 的 ",[124,140018,457],{}," 标签设置 左右 3px 的外边距",[635,140021,140022,140023,140025],{},"给",[124,140024,132155],{}," 设置 20px 的行高",[19,140027,138781],{},[117,140029,140030],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,140031,140032,140038,140050],{"__ignoreMap":122},[127,140033,140034,140036],{"class":129,"line":130},[127,140035,52147],{"class":140},[127,140037,148],{"class":147},[127,140039,140040,140042,140044,140046,140048],{"class":129,"line":137},[127,140041,71003],{"class":154},[127,140043,158],{"class":147},[127,140045,867],{"class":154},[127,140047,52093],{"class":154},[127,140049,164],{"class":147},[127,140051,140052],{"class":129,"line":151},[127,140053,170],{"class":147},[19,140055,138821],{},[117,140057,140058],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,140059,140060,140066,140078],{"__ignoreMap":122},[127,140061,140062,140064],{"class":129,"line":130},[127,140063,52147],{"class":140},[127,140065,148],{"class":147},[127,140067,140068,140070,140072,140074,140076],{"class":129,"line":137},[127,140069,71003],{"class":154},[127,140071,158],{"class":147},[127,140073,867],{"class":154},[127,140075,52093],{"class":154},[127,140077,164],{"class":147},[127,140079,140080],{"class":129,"line":151},[127,140081,170],{"class":147},[19,140083,140084],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[575,140086,140087],{},"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":122,"searchDepth":137,"depth":137,"links":140089},[140090,140091,140092,140099],{"id":138370,"depth":137,"text":138371},{"id":138389,"depth":137,"text":138390},{"id":138416,"depth":137,"text":138417,"children":140093},[140094,140095,140096,140097,140098],{"id":138420,"depth":151,"text":138421},{"id":138433,"depth":151,"text":138434},{"id":138457,"depth":151,"text":138458},{"id":138479,"depth":151,"text":138480},{"id":138551,"depth":151,"text":138552},{"id":138677,"depth":137,"text":138678,"children":140100},[140101,140102,140103,140104,140106],{"id":138681,"depth":151,"text":138682},{"id":138688,"depth":151,"text":138689},{"id":138860,"depth":151,"text":138861},{"id":139401,"depth":151,"text":140105},"15.4.4 nav导航模块制作",{"id":139699,"depth":151,"text":139700},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138362,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140113,"title":140114,"body":140115,"description":603,"extension":604,"meta":142517,"navigation":606,"path":142518,"seo":142519,"stem":142520,"__hash__":142521},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140116,"toc":142494},[140117,140120,140124,140128,140140,140143,140146,140149,140160,140162,140186,140188,140212,140217,140220,140222,140258,140260,140296,140299,140304,140307,140310,140313,140343,140350,140353,140363,140365,140399,140402,140436,140442,140459,140461,140497,140499,140535,140540,140565,140567,140593,140595,140619,140626,140629,140693,140695,140737,140739,140779,140786,140791,140793,140823,140825,140855,140859,140862,140869,140881,140883,140909,140911,140935,140938,140940,140964,140970,140980,140982,141012,141014,141044,141051,141092,141094,141130,141132,141168,141172,141175,141178,141181,141187,141192,141195,141218,141221,141245,141248,141272,141277,141280,141283,141286,141289,141292,141366,141368,141398,141400,141430,141433,141436,141468,141472,141476,141490,141499,141502,141507,141509,141603,141605,141699,141722,141724,141748,141750,141774,141781,141784,141794,141796,141820,141825,141833,141835,141865,141870,141910,141912,141938,141940,141966,141970,141973,141978,141981,141985,141993,142000,142008,142010,142040,142042,142072,142080,142083,142086,142088,142118,142120,142150,142153,142158,142160,142184,142186,142210,142213,142298,142300,142324,142326,142350,142354,142356,142380,142382,142416,142420,142434,142437,142442,142445,142450,142453,142483,142491],[10,140118,140114],{"id":140119},"_16-品优购项目下篇-主体与页面开发",[14,140121,140123],{"id":140122},"_161-项目主体模块制作","16.1 项目主体模块制作",[62,140125,140127],{"id":140126},"_1611-首页制作","16.1.1 首页制作",[19,140129,140130,140132,140133,140135,140136,140139],{},[30,140131,102587],{}," 主体模块是 ",[30,140134,74587],{}," 里面专有的，注意需要新的样式文件 ",[30,140137,140138],{},"index.css，"," 就不要写在common.css中了",[23,140141],{"style":25,"src":140142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[23,140144],{"style":25,"src":140145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140147,140148],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1681,140150,140151,140154,140157],{},[635,140152,140153],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[635,140155,140156],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[635,140158,140159],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140161,138781],{},[117,140163,140164],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,140165,140166,140172,140182],{"__ignoreMap":122},[127,140167,140168,140170],{"class":129,"line":130},[127,140169,130790],{"class":143},[127,140171,148],{"class":147},[127,140173,140174,140176,140178,140180],{"class":129,"line":137},[127,140175,131422],{"class":154},[127,140177,158],{"class":147},[127,140179,24276],{"class":154},[127,140181,164],{"class":147},[127,140183,140184],{"class":129,"line":151},[127,140185,170],{"class":147},[19,140187,138821],{},[117,140189,140190],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,140191,140192,140198,140208],{"__ignoreMap":122},[127,140193,140194,140196],{"class":129,"line":130},[127,140195,130790],{"class":143},[127,140197,148],{"class":147},[127,140199,140200,140202,140204,140206],{"class":129,"line":137},[127,140201,131422],{"class":154},[127,140203,158],{"class":147},[127,140205,24276],{"class":154},[127,140207,164],{"class":147},[127,140209,140210],{"class":129,"line":151},[127,140211,170],{"class":147},[632,140213,140214],{},[635,140215,140216],{},"左侧focus模块制作",[23,140218],{"style":25,"src":140219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140221,138781],{},[117,140223,140224],{"className":119,"code":128265,"language":121,"meta":122,"style":122},[124,140225,140226,140234,140244,140254],{"__ignoreMap":122},[127,140227,140228,140230,140232],{"class":129,"line":130},[127,140229,54356],{"class":140},[127,140231,62433],{"class":143},[127,140233,148],{"class":147},[127,140235,140236,140238,140240,140242],{"class":129,"line":137},[127,140237,128280],{"class":154},[127,140239,158],{"class":147},[127,140241,55423],{"class":154},[127,140243,164],{"class":147},[127,140245,140246,140248,140250,140252],{"class":129,"line":151},[127,140247,71328],{"class":154},[127,140249,158],{"class":147},[127,140251,469],{"class":154},[127,140253,164],{"class":147},[127,140255,140256],{"class":129,"line":167},[127,140257,170],{"class":147},[19,140259,138821],{},[117,140261,140262],{"className":119,"code":128265,"language":121,"meta":122,"style":122},[124,140263,140264,140272,140282,140292],{"__ignoreMap":122},[127,140265,140266,140268,140270],{"class":129,"line":130},[127,140267,54356],{"class":140},[127,140269,62433],{"class":143},[127,140271,148],{"class":147},[127,140273,140274,140276,140278,140280],{"class":129,"line":137},[127,140275,128280],{"class":154},[127,140277,158],{"class":147},[127,140279,55423],{"class":154},[127,140281,164],{"class":147},[127,140283,140284,140286,140288,140290],{"class":129,"line":151},[127,140285,71328],{"class":154},[127,140287,158],{"class":147},[127,140289,469],{"class":154},[127,140291,164],{"class":147},[127,140293,140294],{"class":129,"line":167},[127,140295,170],{"class":147},[19,140297,140298],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[632,140300,140301],{"start":137},[635,140302,140303],{},"右侧newsflash模块制作",[23,140305],{"style":25,"src":140306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140308,140309],{},"右侧的模块 分为上中下三个盒子",[19,140311,140312],{},"结构代码：",[117,140314,140315],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,140316,140317],{"__ignoreMap":122},[127,140318,140319,140321,140323,140325,140327,140329,140331,140333,140335,140337,140339,140341],{"class":129,"line":130},[127,140320,1584],{"class":147},[127,140322,23],{"class":140},[127,140324,55773],{"class":143},[127,140326,725],{"class":147},[127,140328,134459],{"class":781},[127,140330,55781],{"class":143},[127,140332,725],{"class":147},[127,140334,134466],{"class":781},[127,140336,134469],{"class":143},[127,140338,725],{"class":147},[127,140340,134474],{"class":781},[127,140342,51846],{"class":147},[19,140344,140345,140346,140349],{},"1 号盒子为 ",[124,140347,140348],{},"news"," 新闻模块 高度为 165px",[23,140351],{"style":25,"src":140352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140354,140355,140356,140359,140360],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[124,140357,140358],{},"news-hd","，下面是 ",[124,140361,140362],{},"news-bd",[19,140364,140312],{},[117,140366,140367],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,140368,140369,140373,140387,140391],{"__ignoreMap":122},[127,140370,140371],{"class":129,"line":130},[127,140372,131053],{"class":133},[127,140374,140375,140377,140379,140381,140383,140385],{"class":129,"line":137},[127,140376,1584],{"class":147},[127,140378,52147],{"class":140},[127,140380,54021],{"class":143},[127,140382,725],{"class":147},[127,140384,131066],{"class":781},[127,140386,51846],{"class":147},[127,140388,140389],{"class":129,"line":151},[127,140390,131073],{"class":147},[127,140392,140393,140395,140397],{"class":129,"line":167},[127,140394,52321],{"class":147},[127,140396,52147],{"class":140},[127,140398,51846],{"class":147},[19,140400,140401],{},"样式代码：",[117,140403,140404],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,140405,140406,140410,140424,140428],{"__ignoreMap":122},[127,140407,140408],{"class":129,"line":130},[127,140409,131053],{"class":133},[127,140411,140412,140414,140416,140418,140420,140422],{"class":129,"line":137},[127,140413,1584],{"class":147},[127,140415,52147],{"class":140},[127,140417,54021],{"class":143},[127,140419,725],{"class":147},[127,140421,131066],{"class":781},[127,140423,51846],{"class":147},[127,140425,140426],{"class":129,"line":151},[127,140427,131073],{"class":147},[127,140429,140430,140432,140434],{"class":129,"line":167},[127,140431,52321],{"class":147},[127,140433,52147],{"class":140},[127,140435,51846],{"class":147},[19,140437,140438,140439,140441],{},"上面是",[124,140440,140358],{},"，设置高度是 33px，设置下边框",[1681,140443,140444,140450],{},[635,140445,140446,140447,140449],{},"里面放一个",[124,140448,23451],{}," 标题",[635,140451,140452,140453,140455,140456,140458],{},"放一个a",[124,140454,103222],{},"，内容是 更多，然后让 ",[124,140457,457],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140460,140312],{},[117,140462,140463],{"className":119,"code":138784,"language":121,"meta":122,"style":122},[124,140464,140465,140473,140483,140493],{"__ignoreMap":122},[127,140466,140467,140469,140471],{"class":129,"line":130},[127,140468,52147],{"class":140},[127,140470,137943],{"class":143},[127,140472,148],{"class":147},[127,140474,140475,140477,140479,140481],{"class":129,"line":137},[127,140476,137950],{"class":154},[127,140478,158],{"class":147},[127,140480,8194],{"class":781},[127,140482,164],{"class":147},[127,140484,140485,140487,140489,140491],{"class":129,"line":151},[127,140486,128558],{"class":154},[127,140488,158],{"class":147},[127,140490,61402],{"class":154},[127,140492,164],{"class":147},[127,140494,140495],{"class":129,"line":167},[127,140496,170],{"class":147},[19,140498,140401],{},[117,140500,140501],{"className":119,"code":138784,"language":121,"meta":122,"style":122},[124,140502,140503,140511,140521,140531],{"__ignoreMap":122},[127,140504,140505,140507,140509],{"class":129,"line":130},[127,140506,52147],{"class":140},[127,140508,137943],{"class":143},[127,140510,148],{"class":147},[127,140512,140513,140515,140517,140519],{"class":129,"line":137},[127,140514,137950],{"class":154},[127,140516,158],{"class":147},[127,140518,8194],{"class":781},[127,140520,164],{"class":147},[127,140522,140523,140525,140527,140529],{"class":129,"line":151},[127,140524,128558],{"class":154},[127,140526,158],{"class":147},[127,140528,61402],{"class":154},[127,140530,164],{"class":147},[127,140532,140533],{"class":129,"line":167},[127,140534,170],{"class":147},[19,140536,140537,140538],{},"下面是",[124,140539,140362],{},[1681,140541,140542,140550],{},[635,140543,140544,140545,101547,140547,140549],{},"里面包含 ",[124,140546,1681],{},[124,140548,635],{}," 还有链接",[635,140551,140022,140552,140554,140555,140557,140558,140561,140562],{},[124,140553,635],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[124,140556,131608],{}," 2.设置 ",[124,140559,140560],{},"white-space: nowrap;"," 3. 设置 ",[124,140563,140564],{},"text-overflow: ellipsis;",[19,140566,140312],{},[117,140568,140570],{"className":119,"code":140569,"language":121,"meta":122,"style":122},"div {\n  overflow: hidden;\n}\n",[124,140571,140572,140578,140589],{"__ignoreMap":122},[127,140573,140574,140576],{"class":129,"line":130},[127,140575,52147],{"class":140},[127,140577,148],{"class":147},[127,140579,140580,140583,140585,140587],{"class":129,"line":137},[127,140581,140582],{"class":154},"  overflow",[127,140584,158],{"class":147},[127,140586,62247],{"class":154},[127,140588,164],{"class":147},[127,140590,140591],{"class":129,"line":151},[127,140592,170],{"class":147},[19,140594,140401],{},[117,140596,140597],{"className":119,"code":140569,"language":121,"meta":122,"style":122},[124,140598,140599,140605,140615],{"__ignoreMap":122},[127,140600,140601,140603],{"class":129,"line":130},[127,140602,52147],{"class":140},[127,140604,148],{"class":147},[127,140606,140607,140609,140611,140613],{"class":129,"line":137},[127,140608,140582],{"class":154},[127,140610,158],{"class":147},[127,140612,62247],{"class":154},[127,140614,164],{"class":147},[127,140616,140617],{"class":129,"line":151},[127,140618,170],{"class":147},[19,140620,140621,140622,140625],{},"2 号盒子为 ",[124,140623,140624],{},"lifeservice"," 生活服务模块 高度为 209px",[23,140627],{"style":25,"src":140628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1681,140630,140631,140634,140644,140668,140679],{},[635,140632,140633],{},"设置边框（左右下边框）",[635,140635,140636,140637,140640,140641,140643],{},"里面的内容 是 ",[124,140638,140639],{},"ul > 12*li","，给",[124,140642,635],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[635,140645,140646,140647],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1681,140648,140649,140654,140663],{},[635,140650,140651,140653],{},[124,140652,140624],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[635,140655,140656,140657,140659,140660,140662],{},"可以让 ",[124,140658,140624],{}," 里面的 ",[124,140661,1681],{}," 宽度为 252，就可以装的下 4 个 小 li",[635,140664,140665,140667],{},[124,140666,140624],{}," 盒子 overflow 隐藏多余的部分就可以了",[635,140669,116996,140670,140672,140673,140675,140676,140678],{},[124,140671,635],{}," 里面放一个 ",[124,140674,1116],{},"（里面放图标），下面的文本用 ",[124,140677,19],{}," 标签包裹",[635,140680,139442,140681,140683,140684,140686,140687,139476,140689,140692],{},[124,140682,1116],{}," 设置 24px宽和28px的高（注意 ",[124,140685,1116],{}," 是行内元素， 转成行内块），给 ",[124,140688,635],{},[124,140690,140691],{},"text-align:center"," 让里面内容居中显示",[19,140694,140312],{},[117,140696,140698],{"className":119,"code":140697,"language":121,"meta":122,"style":122},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[124,140699,140700,140718,140723,140733],{"__ignoreMap":122},[127,140701,140702,140704,140706,140708,140710,140712,140714,140716],{"class":129,"line":130},[127,140703,127],{"class":140},[127,140705,12977],{"class":147},[127,140707,457],{"class":140},[127,140709,12977],{"class":147},[127,140711,533],{"class":140},[127,140713,12977],{"class":147},[127,140715,30],{"class":140},[127,140717,148],{"class":147},[127,140719,140720],{"class":129,"line":137},[127,140721,140722],{"class":133},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[127,140724,140725,140727,140729,140731],{"class":129,"line":151},[127,140726,128558],{"class":154},[127,140728,158],{"class":147},[127,140730,128620],{"class":154},[127,140732,164],{"class":147},[127,140734,140735],{"class":129,"line":167},[127,140736,170],{"class":147},[19,140738,140401],{},[117,140740,140741],{"className":119,"code":140697,"language":121,"meta":122,"style":122},[124,140742,140743,140761,140765,140775],{"__ignoreMap":122},[127,140744,140745,140747,140749,140751,140753,140755,140757,140759],{"class":129,"line":130},[127,140746,127],{"class":140},[127,140748,12977],{"class":147},[127,140750,457],{"class":140},[127,140752,12977],{"class":147},[127,140754,533],{"class":140},[127,140756,12977],{"class":147},[127,140758,30],{"class":140},[127,140760,148],{"class":147},[127,140762,140763],{"class":129,"line":137},[127,140764,140722],{"class":133},[127,140766,140767,140769,140771,140773],{"class":129,"line":151},[127,140768,128558],{"class":154},[127,140770,158],{"class":147},[127,140772,128620],{"class":154},[127,140774,164],{"class":147},[127,140776,140777],{"class":129,"line":167},[127,140778,170],{"class":147},[19,140780,140781,140782,140785],{},"3 号盒子为 ",[124,140783,140784],{},"bargain"," 特价商品",[1681,140787,140788],{},[635,140789,140790],{},"这个比较简单，直接插入一张图片即可",[19,140792,140312],{},[117,140794,140795],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,140796,140797],{"__ignoreMap":122},[127,140798,140799,140801,140803,140805,140807,140809,140811,140813,140815,140817,140819,140821],{"class":129,"line":130},[127,140800,1584],{"class":147},[127,140802,23],{"class":140},[127,140804,55773],{"class":143},[127,140806,725],{"class":147},[127,140808,134459],{"class":781},[127,140810,55781],{"class":143},[127,140812,725],{"class":147},[127,140814,134466],{"class":781},[127,140816,134469],{"class":143},[127,140818,725],{"class":147},[127,140820,134474],{"class":781},[127,140822,51846],{"class":147},[19,140824,140401],{},[117,140826,140827],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,140828,140829],{"__ignoreMap":122},[127,140830,140831,140833,140835,140837,140839,140841,140843,140845,140847,140849,140851,140853],{"class":129,"line":130},[127,140832,1584],{"class":147},[127,140834,23],{"class":140},[127,140836,55773],{"class":143},[127,140838,725],{"class":147},[127,140840,134459],{"class":781},[127,140842,55781],{"class":143},[127,140844,725],{"class":147},[127,140846,134466],{"class":781},[127,140848,134469],{"class":143},[127,140850,725],{"class":147},[127,140852,134474],{"class":781},[127,140854,51846],{"class":147},[62,140856,140858],{"id":140857},"_1612-推荐模块制作","16.1.2 推荐模块制作",[23,140860],{"style":25,"src":140861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140863,140864,140865,140868],{},"大盒子 ",[124,140866,140867],{},"recom"," 推荐模块 recommend",[1681,140870,140871],{},[635,140872,140873,140874,140876,140877,140880],{},"给这个 ",[124,140875,140867],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[124,140878,140879],{},"#ebebeb","），设置距离上边 12px",[19,140882,140312],{},[117,140884,140886],{"className":119,"code":140885,"language":121,"meta":122,"style":122},"div {\n  background-color: #f0f0f0;\n}\n",[124,140887,140888,140894,140905],{"__ignoreMap":122},[127,140889,140890,140892],{"class":129,"line":130},[127,140891,52147],{"class":140},[127,140893,148],{"class":147},[127,140895,140896,140898,140900,140903],{"class":129,"line":137},[127,140897,71408],{"class":154},[127,140899,158],{"class":147},[127,140901,140902],{"class":154},"#f0f0f0",[127,140904,164],{"class":147},[127,140906,140907],{"class":129,"line":151},[127,140908,170],{"class":147},[19,140910,140401],{},[117,140912,140913],{"className":119,"code":140885,"language":121,"meta":122,"style":122},[124,140914,140915,140921,140931],{"__ignoreMap":122},[127,140916,140917,140919],{"class":129,"line":130},[127,140918,52147],{"class":140},[127,140920,148],{"class":147},[127,140922,140923,140925,140927,140929],{"class":129,"line":137},[127,140924,71408],{"class":154},[127,140926,158],{"class":147},[127,140928,140902],{"class":154},[127,140930,164],{"class":147},[127,140932,140933],{"class":129,"line":151},[127,140934,170],{"class":147},[19,140936,140937],{},"里面包含 2 个盒子， 浮动即可",[19,140939,140312],{},[117,140941,140942],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,140943,140944,140950,140960],{"__ignoreMap":122},[127,140945,140946,140948],{"class":129,"line":130},[127,140947,130790],{"class":143},[127,140949,148],{"class":147},[127,140951,140952,140954,140956,140958],{"class":129,"line":137},[127,140953,131422],{"class":154},[127,140955,158],{"class":147},[127,140957,24276],{"class":154},[127,140959,164],{"class":147},[127,140961,140962],{"class":129,"line":151},[127,140963,170],{"class":147},[19,140965,140966,140967],{},"1 号盒子 ",[124,140968,140969],{},"recom_hd",[1681,140971,140972,140975],{},[635,140973,140974],{},"设置宽度205px，高度163px",[635,140976,140446,140977,140979],{},[124,140978,23],{},"标签，插入图片即可",[19,140981,140312],{},[117,140983,140984],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,140985,140986],{"__ignoreMap":122},[127,140987,140988,140990,140992,140994,140996,140998,141000,141002,141004,141006,141008,141010],{"class":129,"line":130},[127,140989,1584],{"class":147},[127,140991,23],{"class":140},[127,140993,55773],{"class":143},[127,140995,725],{"class":147},[127,140997,134459],{"class":781},[127,140999,55781],{"class":143},[127,141001,725],{"class":147},[127,141003,134466],{"class":781},[127,141005,134469],{"class":143},[127,141007,725],{"class":147},[127,141009,134474],{"class":781},[127,141011,51846],{"class":147},[19,141013,140401],{},[117,141015,141016],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,141017,141018],{"__ignoreMap":122},[127,141019,141020,141022,141024,141026,141028,141030,141032,141034,141036,141038,141040,141042],{"class":129,"line":130},[127,141021,1584],{"class":147},[127,141023,23],{"class":140},[127,141025,55773],{"class":143},[127,141027,725],{"class":147},[127,141029,134459],{"class":781},[127,141031,55781],{"class":143},[127,141033,725],{"class":147},[127,141035,134466],{"class":781},[127,141037,134469],{"class":143},[127,141039,725],{"class":147},[127,141041,134474],{"class":781},[127,141043,51846],{"class":147},[19,141045,141046,141047,141050],{},"2 号盒子 ",[124,141048,141049],{},"recom_bd"," ，注意里面的小竖线",[1681,141052,141053,141064,141067,141072,141077],{},[635,141054,141055,141056,141058,141059,141061,141062],{},"右侧结构里面放 ",[124,141057,1681],{}," 包含 4个 ",[124,141060,635],{},"，每个li里面包含一个",[124,141063,23],{},[635,141065,141066],{},"直接利用切片工具把里面的内容当成一张图片",[635,141068,139442,141069,141071],{},[124,141070,635],{}," 设置浮动",[635,141073,139442,141074,141076],{},[124,141075,23],{}," 设置宽高，宽度 248px，高度 163px",[635,141078,141079,141080,140640,141083,141085,141086,141088,141089],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[124,141081,141082],{},"top 10px",[124,141084,635],{},"设置相对定位（注意，最后一个",[124,141087,635],{},"不用设置伪元素），可以利用 ",[124,141090,141091],{},"nth-child(-n+3){...}",[19,141093,140312],{},[117,141095,141096],{"className":119,"code":138784,"language":121,"meta":122,"style":122},[124,141097,141098,141106,141116,141126],{"__ignoreMap":122},[127,141099,141100,141102,141104],{"class":129,"line":130},[127,141101,52147],{"class":140},[127,141103,137943],{"class":143},[127,141105,148],{"class":147},[127,141107,141108,141110,141112,141114],{"class":129,"line":137},[127,141109,137950],{"class":154},[127,141111,158],{"class":147},[127,141113,8194],{"class":781},[127,141115,164],{"class":147},[127,141117,141118,141120,141122,141124],{"class":129,"line":151},[127,141119,128558],{"class":154},[127,141121,158],{"class":147},[127,141123,61402],{"class":154},[127,141125,164],{"class":147},[127,141127,141128],{"class":129,"line":167},[127,141129,170],{"class":147},[19,141131,140401],{},[117,141133,141134],{"className":119,"code":138784,"language":121,"meta":122,"style":122},[124,141135,141136,141144,141154,141164],{"__ignoreMap":122},[127,141137,141138,141140,141142],{"class":129,"line":130},[127,141139,52147],{"class":140},[127,141141,137943],{"class":143},[127,141143,148],{"class":147},[127,141145,141146,141148,141150,141152],{"class":129,"line":137},[127,141147,137950],{"class":154},[127,141149,158],{"class":147},[127,141151,8194],{"class":781},[127,141153,164],{"class":147},[127,141155,141156,141158,141160,141162],{"class":129,"line":151},[127,141157,128558],{"class":154},[127,141159,158],{"class":147},[127,141161,61402],{"class":154},[127,141163,164],{"class":147},[127,141165,141166],{"class":129,"line":167},[127,141167,170],{"class":147},[62,141169,141171],{"id":141170},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[23,141173],{"style":25,"src":141174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141176,141177],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141179,141180],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141182,141183,141186],{},[124,141184,141185],{},"box_hd"," 制作",[19,141188,140966,141189,141191],{},[124,141190,141185],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[23,141193],{"style":25,"src":141194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1681,141196,141197,141202,141207,141210],{},[635,141198,141199,141201],{},[124,141200,141185],{}," 给 30px 的高度，2个像素的下边框",[635,141203,141204,141205],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[124,141206,139453],{},[635,141208,141209],{},"左侧盒左浮动，右侧盒子右浮动",[635,141211,141212,141214,141215,141217],{},[124,141213,457],{},"标签之间的距离用左右的",[124,141216,31423],{},"撑开即可",[19,141219,141220],{},"结构代码",[117,141222,141223],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,141224,141225,141231,141241],{"__ignoreMap":122},[127,141226,141227,141229],{"class":129,"line":130},[127,141228,130790],{"class":143},[127,141230,148],{"class":147},[127,141232,141233,141235,141237,141239],{"class":129,"line":137},[127,141234,131422],{"class":154},[127,141236,158],{"class":147},[127,141238,24276],{"class":154},[127,141240,164],{"class":147},[127,141242,141243],{"class":129,"line":151},[127,141244,170],{"class":147},[19,141246,141247],{},"样式代码",[117,141249,141250],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,141251,141252,141258,141268],{"__ignoreMap":122},[127,141253,141254,141256],{"class":129,"line":130},[127,141255,130790],{"class":143},[127,141257,148],{"class":147},[127,141259,141260,141262,141264,141266],{"class":129,"line":137},[127,141261,131422],{"class":154},[127,141263,158],{"class":147},[127,141265,24276],{"class":154},[127,141267,164],{"class":147},[127,141269,141270],{"class":129,"line":151},[127,141271,170],{"class":147},[19,141273,141274,141186],{},[124,141275,141276],{},"box_bd",[19,141278,141279],{},"2 号盒子 box_bd，不要给高度",[23,141281],{"style":25,"src":141282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141284,141285],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141287,141288],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141290,141291],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1681,141293,141294,141306,141322],{},[635,141295,141296,141298,141299,141302,141303,141305],{},[124,141297,141276],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[124,141300,141301],{},"tab_content","，在",[124,141304,141301],{}," 里面包裹tab选项卡对应的内容",[635,141307,141308,141309,141312,141313,141315,141316,141318,141319,141321],{},"内容被一个大盒子包裹（",[124,141310,141311],{},"tab_list_item","），里面是 ",[124,141314,1681],{}," 包裹 5个 ",[124,141317,635],{},"，每个",[124,141320,635],{},"设置对应的宽度，然后设置浮动",[635,141323,141324,141325,141327,141328,141330,141331],{},"而这5个",[124,141326,635],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[124,141329,635],{},"设置",[1681,141332,141333,141351,141354],{},[635,141334,141335,141336,141338,141339,141341,141342,141344,141345,141347,141348,141350],{},"第一个小 ",[124,141337,635],{}," 分为上下结构，上面是 ",[124,141340,1681],{}," 包裹 ",[124,141343,635],{}," ，",[124,141346,635],{},"里面包裹 ",[124,141349,457],{},"，下面插入一张图片",[635,141352,141353],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[635,141355,141356,141357,141359,141360,141362,141363,141365],{},"后面的小 ",[124,141358,635],{}," 里面先放一个",[124,141361,457],{},"标签，然后在",[124,141364,457],{},"标签里面插入图片即可",[19,141367,141220],{},[117,141369,141370],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,141371,141372],{"__ignoreMap":122},[127,141373,141374,141376,141378,141380,141382,141384,141386,141388,141390,141392,141394,141396],{"class":129,"line":130},[127,141375,1584],{"class":147},[127,141377,23],{"class":140},[127,141379,55773],{"class":143},[127,141381,725],{"class":147},[127,141383,134459],{"class":781},[127,141385,55781],{"class":143},[127,141387,725],{"class":147},[127,141389,134466],{"class":781},[127,141391,134469],{"class":143},[127,141393,725],{"class":147},[127,141395,134474],{"class":781},[127,141397,51846],{"class":147},[19,141399,141247],{},[117,141401,141402],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,141403,141404],{"__ignoreMap":122},[127,141405,141406,141408,141410,141412,141414,141416,141418,141420,141422,141424,141426,141428],{"class":129,"line":130},[127,141407,1584],{"class":147},[127,141409,23],{"class":140},[127,141411,55773],{"class":143},[127,141413,725],{"class":147},[127,141415,134459],{"class":781},[127,141417,55781],{"class":143},[127,141419,725],{"class":147},[127,141421,134466],{"class":781},[127,141423,134469],{"class":143},[127,141425,725],{"class":147},[127,141427,134474],{"class":781},[127,141429,51846],{"class":147},[19,141431,141432],{},"tab栏切换需求！！！！！！介绍：",[23,141434],{"style":25,"src":141435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1681,141437,141438,141446,141452,141455],{},[635,141439,141440,141443,141444],{},[124,141441,141442],{},"tab","栏的布局是 ",[124,141445,139453],{},[635,141447,141448,141449,141451],{},"有多少个",[124,141450,141442],{},"选项卡，那么对应就有多少个内容",[635,141453,141454],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[635,141456,141457,141458,141461,141462,141464,141465,141467],{},"等后面我们学习了",[124,141459,141460],{},"js","之后，我们就会配合",[124,141463,141460],{},"来实现，",[124,141466,141442],{},"栏的切换",[14,141469,141471],{"id":141470},"_162-列表制作","16.2 列表制作",[62,141473,141475],{"id":141474},"_1621-准备工作","16.2.1 准备工作",[1681,141477,141478,141481,141484,141487],{},[635,141479,141480],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[635,141482,141483],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[635,141485,141486],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[635,141488,141489],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[62,141491,141493,141494,101547,141496,141498],{"id":141492},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[124,141495,131947],{},[124,141497,54248],{}," 修改",[23,141500],{"style":25,"src":141501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1681,141503,141504],{},[635,141505,141506],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141508,140312],{},[117,141510,141511],{"className":119,"code":132374,"language":121,"meta":122,"style":122},[124,141512,141513,141517,141531,141535,141549,141553,141567,141571,141585,141589],{"__ignoreMap":122},[127,141514,141515],{"class":129,"line":130},[127,141516,132381],{"class":133},[127,141518,141519,141521,141523,141525,141527,141529],{"class":129,"line":137},[127,141520,132386],{"class":143},[127,141522,80336],{"class":147},[127,141524,129302],{"class":154},[127,141526,158],{"class":147},[127,141528,132395],{"class":154},[127,141530,129872],{"class":147},[127,141532,141533],{"class":129,"line":151},[127,141534,132402],{"class":133},[127,141536,141537,141539,141541,141543,141545,141547],{"class":129,"line":167},[127,141538,132407],{"class":143},[127,141540,80336],{"class":147},[127,141542,129302],{"class":154},[127,141544,158],{"class":147},[127,141546,55298],{"class":154},[127,141548,129872],{"class":147},[127,141550,141551],{"class":129,"line":415},[127,141552,132422],{"class":133},[127,141554,141555,141557,141559,141561,141563,141565],{"class":129,"line":421},[127,141556,132427],{"class":143},[127,141558,80336],{"class":147},[127,141560,129302],{"class":154},[127,141562,158],{"class":147},[127,141564,55365],{"class":154},[127,141566,129872],{"class":147},[127,141568,141569],{"class":129,"line":1766},[127,141570,132442],{"class":133},[127,141572,141573,141575,141577,141579,141581,141583],{"class":129,"line":1856},[127,141574,132447],{"class":143},[127,141576,80336],{"class":147},[127,141578,129302],{"class":154},[127,141580,158],{"class":147},[127,141582,86762],{"class":154},[127,141584,129872],{"class":147},[127,141586,141587],{"class":129,"line":1862},[127,141588,132462],{"class":133},[127,141590,141591,141593,141595,141597,141599,141601],{"class":129,"line":1874},[127,141592,132467],{"class":143},[127,141594,80336],{"class":147},[127,141596,129302],{"class":154},[127,141598,158],{"class":147},[127,141600,132476],{"class":154},[127,141602,129872],{"class":147},[19,141604,140401],{},[117,141606,141607],{"className":119,"code":132374,"language":121,"meta":122,"style":122},[124,141608,141609,141613,141627,141631,141645,141649,141663,141667,141681,141685],{"__ignoreMap":122},[127,141610,141611],{"class":129,"line":130},[127,141612,132381],{"class":133},[127,141614,141615,141617,141619,141621,141623,141625],{"class":129,"line":137},[127,141616,132386],{"class":143},[127,141618,80336],{"class":147},[127,141620,129302],{"class":154},[127,141622,158],{"class":147},[127,141624,132395],{"class":154},[127,141626,129872],{"class":147},[127,141628,141629],{"class":129,"line":151},[127,141630,132402],{"class":133},[127,141632,141633,141635,141637,141639,141641,141643],{"class":129,"line":167},[127,141634,132407],{"class":143},[127,141636,80336],{"class":147},[127,141638,129302],{"class":154},[127,141640,158],{"class":147},[127,141642,55298],{"class":154},[127,141644,129872],{"class":147},[127,141646,141647],{"class":129,"line":415},[127,141648,132422],{"class":133},[127,141650,141651,141653,141655,141657,141659,141661],{"class":129,"line":421},[127,141652,132427],{"class":143},[127,141654,80336],{"class":147},[127,141656,129302],{"class":154},[127,141658,158],{"class":147},[127,141660,55365],{"class":154},[127,141662,129872],{"class":147},[127,141664,141665],{"class":129,"line":1766},[127,141666,132442],{"class":133},[127,141668,141669,141671,141673,141675,141677,141679],{"class":129,"line":1856},[127,141670,132447],{"class":143},[127,141672,80336],{"class":147},[127,141674,129302],{"class":154},[127,141676,158],{"class":147},[127,141678,86762],{"class":154},[127,141680,129872],{"class":147},[127,141682,141683],{"class":129,"line":1862},[127,141684,132462],{"class":133},[127,141686,141687,141689,141691,141693,141695,141697],{"class":129,"line":1874},[127,141688,132467],{"class":143},[127,141690,80336],{"class":147},[127,141692,129302],{"class":154},[127,141694,158],{"class":147},[127,141696,132476],{"class":154},[127,141698,129872],{"class":147},[1681,141700,141701,141712],{},[635,141702,141703,141704,141707,141708,101547,141710],{},"1 号盒子左侧浮动 ",[124,141705,141706],{},"sk_list"," 里面包含 ",[124,141709,1681],{},[124,141711,635],{},[635,141713,141714,141715,141707,141718,101547,141720],{},"2 号盒子左侧浮动 ",[124,141716,141717],{},"sk_con",[124,141719,1681],{},[124,141721,635],{},[19,141723,140312],{},[117,141725,141726],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,141727,141728,141734,141744],{"__ignoreMap":122},[127,141729,141730,141732],{"class":129,"line":130},[127,141731,130790],{"class":143},[127,141733,148],{"class":147},[127,141735,141736,141738,141740,141742],{"class":129,"line":137},[127,141737,131422],{"class":154},[127,141739,158],{"class":147},[127,141741,24276],{"class":154},[127,141743,164],{"class":147},[127,141745,141746],{"class":129,"line":151},[127,141747,170],{"class":147},[19,141749,140401],{},[117,141751,141752],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,141753,141754,141760,141770],{"__ignoreMap":122},[127,141755,141756,141758],{"class":129,"line":130},[127,141757,130790],{"class":143},[127,141759,148],{"class":147},[127,141761,141762,141764,141766,141768],{"class":129,"line":137},[127,141763,131422],{"class":154},[127,141765,158],{"class":147},[127,141767,24276],{"class":154},[127,141769,164],{"class":147},[127,141771,141772],{"class":129,"line":151},[127,141773,170],{"class":147},[62,141775,141777,141778],{"id":141776},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[124,141779,141780],{},"sk_container",[23,141782],{"style":25,"src":141783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1681,141785,141786,141791],{},[635,141787,140966,141788,141790],{},[124,141789,141780],{}," 给宽度 1200，不要给高度",[635,141792,141793],{},"一定不要忘记清除浮动",[19,141795,140312],{},[117,141797,141798],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,141799,141800,141806,141816],{"__ignoreMap":122},[127,141801,141802,141804],{"class":129,"line":130},[127,141803,130790],{"class":143},[127,141805,148],{"class":147},[127,141807,141808,141810,141812,141814],{"class":129,"line":137},[127,141809,131422],{"class":154},[127,141811,158],{"class":147},[127,141813,24276],{"class":154},[127,141815,164],{"class":147},[127,141817,141818],{"class":129,"line":151},[127,141819,170],{"class":147},[632,141821,141822],{},[635,141823,141824],{},"sk_hd制作",[1681,141826,141827],{},[635,141828,141046,141829,141832],{},[124,141830,141831],{},"sk_hd"," ，插入图片即可",[19,141834,140312],{},[117,141836,141837],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,141838,141839],{"__ignoreMap":122},[127,141840,141841,141843,141845,141847,141849,141851,141853,141855,141857,141859,141861,141863],{"class":129,"line":130},[127,141842,1584],{"class":147},[127,141844,23],{"class":140},[127,141846,55773],{"class":143},[127,141848,725],{"class":147},[127,141850,134459],{"class":781},[127,141852,55781],{"class":143},[127,141854,725],{"class":147},[127,141856,134466],{"class":781},[127,141858,134469],{"class":143},[127,141860,725],{"class":147},[127,141862,134474],{"class":781},[127,141864,51846],{"class":147},[632,141866,141867],{"start":137},[635,141868,141869],{},"sk_bd制作",[1681,141871,141872],{},[635,141873,141874,141875,141878,141879,101547,141881,141883],{},"3 号盒子 ",[124,141876,141877],{},"sk_bd"," ，里面包含很多的 ",[124,141880,1681],{},[124,141882,635],{},[1681,141884,141885,141894],{},[635,141886,141887,141888,141890,141891,141893],{},"当鼠标移入到 ",[124,141889,635],{}," 上面的时候显示红色的边框，在这里先给 ",[124,141892,635],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[635,141895,141896,141897,141899,141900,141902,141903,141906,141907,141909],{},"由于给每个 ",[124,141898,635],{}," 都设置了外边距，导致一行的最后一个 ",[124,141901,635],{}," 掉了下来，在这里我们利用 ",[124,141904,141905],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[124,141908,635],{},"，去掉外边距就好了",[19,141911,140312],{},[117,141913,141914],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,141915,141916,141922,141934],{"__ignoreMap":122},[127,141917,141918,141920],{"class":129,"line":130},[127,141919,52147],{"class":140},[127,141921,148],{"class":147},[127,141923,141924,141926,141928,141930,141932],{"class":129,"line":137},[127,141925,71003],{"class":154},[127,141927,158],{"class":147},[127,141929,867],{"class":154},[127,141931,52093],{"class":154},[127,141933,164],{"class":147},[127,141935,141936],{"class":129,"line":151},[127,141937,170],{"class":147},[19,141939,140401],{},[117,141941,141942],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,141943,141944,141950,141962],{"__ignoreMap":122},[127,141945,141946,141948],{"class":129,"line":130},[127,141947,52147],{"class":140},[127,141949,148],{"class":147},[127,141951,141952,141954,141956,141958,141960],{"class":129,"line":137},[127,141953,71003],{"class":154},[127,141955,158],{"class":147},[127,141957,867],{"class":154},[127,141959,52093],{"class":154},[127,141961,164],{"class":147},[127,141963,141964],{"class":129,"line":151},[127,141965,170],{"class":147},[14,141967,141969],{"id":141968},"_163-注册页面制作","16.3 注册页面制作",[23,141971],{"style":25,"src":141972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141974,141975,141977],{},[30,141976,9567],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[23,141979],{"style":25,"src":141980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[62,141982,141984],{"id":141983},"_1631-准备工作","16.3.1 准备工作",[1681,141986,141987,141990],{},[635,141988,141989],{},"创建register.html，引入 base.css，引入favicon图标",[635,141991,141992],{},"创建register.css ，在html页面进行引入",[62,141994,141996,141997,141999],{"id":141995},"_1632-header-头部实现","16.3.2 ",[124,141998,131947],{}," 头部实现",[1681,142001,142002,142005],{},[635,142003,142004],{},"整个内容用 版心 进行包裹",[635,142006,142007],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142009,140312],{},[117,142011,142012],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,142013,142014],{"__ignoreMap":122},[127,142015,142016,142018,142020,142022,142024,142026,142028,142030,142032,142034,142036,142038],{"class":129,"line":130},[127,142017,1584],{"class":147},[127,142019,23],{"class":140},[127,142021,55773],{"class":143},[127,142023,725],{"class":147},[127,142025,134459],{"class":781},[127,142027,55781],{"class":143},[127,142029,725],{"class":147},[127,142031,134466],{"class":781},[127,142033,134469],{"class":143},[127,142035,725],{"class":147},[127,142037,134474],{"class":781},[127,142039,51846],{"class":147},[19,142041,140401],{},[117,142043,142044],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,142045,142046],{"__ignoreMap":122},[127,142047,142048,142050,142052,142054,142056,142058,142060,142062,142064,142066,142068,142070],{"class":129,"line":130},[127,142049,1584],{"class":147},[127,142051,23],{"class":140},[127,142053,55773],{"class":143},[127,142055,725],{"class":147},[127,142057,134459],{"class":781},[127,142059,55781],{"class":143},[127,142061,725],{"class":147},[127,142063,134466],{"class":781},[127,142065,134469],{"class":143},[127,142067,725],{"class":147},[127,142069,134474],{"class":781},[127,142071,51846],{"class":147},[62,142073,142075,142076,142079],{"id":142074},"_1633-registerarea-主体模块实现","16.3.3 ",[124,142077,142078],{},"registerarea"," 主体模块实现",[23,142081],{"style":25,"src":142082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142084,142085],{},"整个大盒子 高度为 522px，设置4个边框",[19,142087,140312],{},[117,142089,142090],{"className":119,"code":131099,"language":121,"meta":122,"style":122},[124,142091,142092,142098,142114],{"__ignoreMap":122},[127,142093,142094,142096],{"class":129,"line":130},[127,142095,52147],{"class":140},[127,142097,148],{"class":147},[127,142099,142100,142102,142104,142106,142108,142110,142112],{"class":129,"line":137},[127,142101,71426],{"class":154},[127,142103,158],{"class":147},[127,142105,893],{"class":154},[127,142107,291],{"class":290},[127,142109,52058],{"class":154},[127,142111,130334],{"class":154},[127,142113,164],{"class":147},[127,142115,142116],{"class":129,"line":151},[127,142117,170],{"class":147},[19,142119,140401],{},[117,142121,142122],{"className":119,"code":131099,"language":121,"meta":122,"style":122},[124,142123,142124,142130,142146],{"__ignoreMap":122},[127,142125,142126,142128],{"class":129,"line":130},[127,142127,52147],{"class":140},[127,142129,148],{"class":147},[127,142131,142132,142134,142136,142138,142140,142142,142144],{"class":129,"line":137},[127,142133,71426],{"class":154},[127,142135,158],{"class":147},[127,142137,893],{"class":154},[127,142139,291],{"class":290},[127,142141,52058],{"class":154},[127,142143,130334],{"class":154},[127,142145,164],{"class":147},[127,142147,142148],{"class":129,"line":151},[127,142149,170],{"class":147},[19,142151,142152],{},"1号盒子 是一个 h3 标签，放标题",[1681,142154,142155],{},[635,142156,142157],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142159,140312],{},[117,142161,142162],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,142163,142164,142170,142180],{"__ignoreMap":122},[127,142165,142166,142168],{"class":129,"line":130},[127,142167,130790],{"class":143},[127,142169,148],{"class":147},[127,142171,142172,142174,142176,142178],{"class":129,"line":137},[127,142173,131422],{"class":154},[127,142175,158],{"class":147},[127,142177,24276],{"class":154},[127,142179,164],{"class":147},[127,142181,142182],{"class":129,"line":151},[127,142183,170],{"class":147},[19,142185,140401],{},[117,142187,142188],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,142189,142190,142196,142206],{"__ignoreMap":122},[127,142191,142192,142194],{"class":129,"line":130},[127,142193,130790],{"class":143},[127,142195,148],{"class":147},[127,142197,142198,142200,142202,142204],{"class":129,"line":137},[127,142199,131422],{"class":154},[127,142201,158],{"class":147},[127,142203,24276],{"class":154},[127,142205,164],{"class":147},[127,142207,142208],{"class":129,"line":151},[127,142209,170],{"class":147},[19,142211,142212],{},"2号盒子 里面放注册的内容",[1681,142214,142215,142218,142227,142241,142254,142257,142260,142278,142292],{},[635,142216,142217],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[635,142219,142220,142221,142223,142224,142226],{},"里面的内容利用 ",[124,142222,1681],{}," 包含 ",[124,142225,635],{}," 来实现的（不需要用表格）",[635,142228,139456,142229,142231,142232,142234,142235,142237,142238,142240],{},[124,142230,635],{}," 里面，左侧放 ",[124,142233,34148],{}," 标签， 中间放",[124,142236,54356],{}," 标签， 右侧放 ",[124,142239,127],{}," 提示信息",[635,142242,142243,142244,142246,142247,142249,142250,142253],{},"左侧 ",[124,142245,34148],{},"里面的文字都是右对齐，我们可以给",[124,142248,34148],{},"设置一个宽度（88px），然后利用",[124,142251,142252],{},"text-align"," 来设置右对齐",[635,142255,142256],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[635,142258,142259],{},"右侧 span修饰一下文字颜色",[635,142261,142262,142263],{},"提示信息的样式优化",[1681,142264,142265,142268,142271],{},[635,142266,142267],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[635,142269,142270],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[635,142272,142273,142274,142277],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[124,142275,142276],{},"vertical-algin"," 来设置 图片与文字对齐方式",[635,142279,142280,142281],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1681,142282,142283,142289],{},[635,142284,142285,142286,142288],{},"设置 ",[124,142287,533],{}," 的 左右 12px 的内边距，设置一下文字颜色",[635,142290,142291],{},"分别设置 背景颜色",[635,142293,142294,142295,142297],{},"同意协议 和 完成注册 都是用 ",[124,142296,635],{}," 进行包裹",[19,142299,140312],{},[117,142301,142302],{"className":119,"code":140885,"language":121,"meta":122,"style":122},[124,142303,142304,142310,142320],{"__ignoreMap":122},[127,142305,142306,142308],{"class":129,"line":130},[127,142307,52147],{"class":140},[127,142309,148],{"class":147},[127,142311,142312,142314,142316,142318],{"class":129,"line":137},[127,142313,71408],{"class":154},[127,142315,158],{"class":147},[127,142317,140902],{"class":154},[127,142319,164],{"class":147},[127,142321,142322],{"class":129,"line":151},[127,142323,170],{"class":147},[19,142325,140401],{},[117,142327,142328],{"className":119,"code":140885,"language":121,"meta":122,"style":122},[124,142329,142330,142336,142346],{"__ignoreMap":122},[127,142331,142332,142334],{"class":129,"line":130},[127,142333,52147],{"class":140},[127,142335,148],{"class":147},[127,142337,142338,142340,142342,142344],{"class":129,"line":137},[127,142339,71408],{"class":154},[127,142341,158],{"class":147},[127,142343,140902],{"class":154},[127,142345,164],{"class":147},[127,142347,142348],{"class":129,"line":151},[127,142349,170],{"class":147},[62,142351,142353],{"id":142352},"_1634-底部实现","16.3.4 底部实现",[19,142355,140312],{},[117,142357,142358],{"className":119,"code":140885,"language":121,"meta":122,"style":122},[124,142359,142360,142366,142376],{"__ignoreMap":122},[127,142361,142362,142364],{"class":129,"line":130},[127,142363,52147],{"class":140},[127,142365,148],{"class":147},[127,142367,142368,142370,142372,142374],{"class":129,"line":137},[127,142369,71408],{"class":154},[127,142371,158],{"class":147},[127,142373,140902],{"class":154},[127,142375,164],{"class":147},[127,142377,142378],{"class":129,"line":151},[127,142379,170],{"class":147},[19,142381,140401],{},[117,142383,142384],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,142385,142386,142390,142404,142408],{"__ignoreMap":122},[127,142387,142388],{"class":129,"line":130},[127,142389,131053],{"class":133},[127,142391,142392,142394,142396,142398,142400,142402],{"class":129,"line":137},[127,142393,1584],{"class":147},[127,142395,52147],{"class":140},[127,142397,54021],{"class":143},[127,142399,725],{"class":147},[127,142401,131066],{"class":781},[127,142403,51846],{"class":147},[127,142405,142406],{"class":129,"line":151},[127,142407,131073],{"class":147},[127,142409,142410,142412,142414],{"class":129,"line":167},[127,142411,52321],{"class":147},[127,142413,52147],{"class":140},[127,142415,51846],{"class":147},[14,142417,142419],{"id":142418},"_164-项目总结","16.4 项目总结",[632,142421,142422,142425,142428,142431],{},[635,142423,142424],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[635,142426,142427],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[635,142429,142430],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[635,142432,142433],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[23,142435],{"style":25,"src":142436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[632,142438,142439],{"start":415},[635,142440,142441],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[23,142443],{"style":25,"src":142444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[632,142446,142447],{"start":421},[635,142448,142449],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[23,142451],{"style":25,"src":142452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[117,142454,142455],{"className":127689,"code":137099,"language":127691,"meta":122,"style":122},[124,142456,142457],{"__ignoreMap":122},[127,142458,142459,142461,142463,142465,142467,142469,142471,142473,142475,142477,142479,142481],{"class":129,"line":130},[127,142460,1584],{"class":147},[127,142462,54356],{"class":140},[127,142464,54359],{"class":143},[127,142466,725],{"class":147},[127,142468,63232],{"class":781},[127,142470,15462],{"class":143},[127,142472,725],{"class":147},[127,142474,137120],{"class":781},[127,142476,61553],{"class":143},[127,142478,725],{"class":147},[127,142480,137127],{"class":781},[127,142482,51846],{"class":147},[632,142484,142485,142488],{"start":1766},[635,142486,142487],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[635,142489,142490],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[575,142492,142493],{},"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":122,"searchDepth":137,"depth":137,"links":142495},[142496,142501,142508,142516],{"id":140122,"depth":137,"text":140123,"children":142497},[142498,142499,142500],{"id":140126,"depth":151,"text":140127},{"id":140857,"depth":151,"text":140858},{"id":141170,"depth":151,"text":141171},{"id":141470,"depth":137,"text":141471,"children":142502},[142503,142504,142506],{"id":141474,"depth":151,"text":141475},{"id":141492,"depth":151,"text":142505},"16.2.2 列表页 header 和 nav 修改",{"id":141776,"depth":151,"text":142507},"16.2.3 列表页主体 sk_container",{"id":141968,"depth":137,"text":141969,"children":142509},[142510,142511,142513,142515],{"id":141983,"depth":151,"text":141984},{"id":141995,"depth":151,"text":142512},"16.3.2 header 头部实现",{"id":142074,"depth":151,"text":142514},"16.3.3 registerarea 主体模块实现",{"id":142352,"depth":151,"text":142353},{"id":142418,"depth":137,"text":142419},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140114,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142523,"title":142524,"body":142525,"description":603,"extension":604,"meta":142633,"navigation":606,"path":142634,"seo":142635,"stem":142636,"__hash__":142637},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142526,"toc":142628},[142527,142530,142534,142537,142540,142549,142558,142562,142567,142574,142592,142595,142598,142601,142604,142607,142610,142613,142616,142619,142622,142625],[10,142528,142524],{"id":142529},"_17-web服务器与网站发布",[14,142531,142533],{"id":142532},"_171-web服务器","17.1 Web服务器",[19,142535,142536],{},"把自己网站上传到服务器上，可以让其他人访问",[23,142538],{"style":25,"src":142539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142541,142542,142545,142546],{},[30,142543,142544],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[30,142547,142548],{},"Web 服务器等",[19,142550,142551,142552,101547,142555,26281],{},"根据服务器在网络中所在的位置不同，又可分为 ",[30,142553,142554],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[30,142556,142557],{},"远程服务器",[62,142559,142561],{"id":142560},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142563,142564],{},[30,142565,142566],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142568,142569,142570],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[457,142571,142572],{"href":142572,"rel":142573},"http:\u002F\u002Ffree.3v.do\u002F",[24405],[1681,142575,142576,142579,142582,142589],{},[635,142577,142578],{},"去免费空间网站注册账号。",[635,142580,142581],{},"记录下主机名、用户名、密码、域名。",[635,142583,142584,142585,142588],{},"利用 ",[124,142586,142587],{},"utftp"," 软件 上传网站到远程服务器",[635,142590,142591],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142593,142594],{},"使用软件上传，对上传软件文件进行解压",[23,142596],{"style":25,"src":142597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[23,142599],{"style":25,"src":142600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142602,142603],{},"输入刚刚申请的服务器账号信息：",[23,142605],{"style":25,"src":142606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[23,142608],{"style":25,"src":142609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[23,142611],{"style":25,"src":142612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[23,142614],{"style":25,"src":142615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142617,142618],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[23,142620],{"style":25,"src":142621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142623,142624],{},"浏览器输入域名即可访问",[19,142626,142627],{},"首页一定必须是index",{"title":122,"searchDepth":137,"depth":137,"links":142629},[142630],{"id":142532,"depth":137,"text":142533,"children":142631},[142632],{"id":142560,"depth":151,"text":142561},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142524,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142639,"title":142640,"body":142641,"description":603,"extension":604,"meta":143568,"navigation":606,"path":143569,"seo":143570,"stem":143571,"__hash__":143572},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142642,"toc":143551},[142643,142646,142650,142653,142656,142667,142670,142674,142678,142683,142686,142689,142692,142695,142699,142725,142729,142733,142736,142739,142743,142776,142780,142783,142786,142850,142854,142858,142861,142864,142867,142871,142916,142920,142923,142953,142957,142961,142964,142967,142971,142974,143043,143046,143154,143156,143162,143166,143169,143172,143268,143271,143275,143299,143303,143306,143310,143313,143317,143320,143323,143326,143329,143333,143336,143339,143343,143347,143350,143353,143356,143359,143363,143366,143370,143373,143376,143421,143425,143429,143432,143435,143438,143470,143474,143477,143511,143515,143518,143548],[10,142644,142640],{"id":142645},"_18-2d动画与3d转换",[14,142647,142649],{"id":142648},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142651,142652],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142654,142655],{},"转换（transform）你可以简单理解为变形",[1681,142657,142658,142661,142664],{},[635,142659,142660],{},"移动：translate",[635,142662,142663],{},"旋转：rotate",[635,142665,142666],{},"缩放：scale",[23,142668],{"style":25,"src":142669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[62,142671,142673],{"id":142672},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22539,142675,142677],{"id":142676},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142679,142680,142681],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[30,142682,133601],{},[23,142684],{"style":25,"src":142685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142687,142688],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142690,142691],{},"对于行内元素无效",[19,142693,142694],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22539,142696,142698],{"id":142697},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[117,142700,142701],{"className":119,"code":139131,"language":121,"meta":122,"style":122},[124,142702,142703,142709,142721],{"__ignoreMap":122},[127,142704,142705,142707],{"class":129,"line":130},[127,142706,52147],{"class":140},[127,142708,148],{"class":147},[127,142710,142711,142713,142715,142717,142719],{"class":129,"line":137},[127,142712,71003],{"class":154},[127,142714,158],{"class":147},[127,142716,867],{"class":154},[127,142718,52093],{"class":154},[127,142720,164],{"class":147},[127,142722,142723],{"class":129,"line":151},[127,142724,170],{"class":147},[62,142726,142728],{"id":142727},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22539,142730,142732],{"id":142731},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142734,142735],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[23,142737],{"style":25,"src":142738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22539,142740,142742],{"id":142741},"_18122-旋转效果","18.1.2.2 旋转效果",[117,142744,142746],{"className":119,"code":142745,"language":121,"meta":122,"style":122},"div {\n  transform: rotate(45deg);\n}\n",[124,142747,142748,142754,142772],{"__ignoreMap":122},[127,142749,142750,142752],{"class":129,"line":130},[127,142751,52147],{"class":140},[127,142753,148],{"class":147},[127,142755,142756,142758,142760,142763,142765,142767,142770],{"class":129,"line":137},[127,142757,136926],{"class":154},[127,142759,158],{"class":147},[127,142761,142762],{"class":154},"rotate",[127,142764,681],{"class":147},[127,142766,1204],{"class":154},[127,142768,142769],{"class":290},"deg",[127,142771,3261],{"class":147},[127,142773,142774],{"class":129,"line":151},[127,142775,170],{"class":147},[22539,142777,142779],{"id":142778},"_18123-三角做法","18.1.2.3 三角做法",[19,142781,142782],{},"该下标当经过最外层大盒子时会实现向上反转",[23,142784],{"style":25,"src":142785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[117,142787,142788],{"className":119,"code":135462,"language":121,"meta":122,"style":122},[124,142789,142790,142794,142800,142810,142820,142836,142846],{"__ignoreMap":122},[127,142791,142792],{"class":129,"line":130},[127,142793,135469],{"class":133},[127,142795,142796,142798],{"class":129,"line":137},[127,142797,135474],{"class":143},[127,142799,148],{"class":147},[127,142801,142802,142804,142806,142808],{"class":129,"line":151},[127,142803,71099],{"class":154},[127,142805,158],{"class":147},[127,142807,867],{"class":154},[127,142809,164],{"class":147},[127,142811,142812,142814,142816,142818],{"class":129,"line":167},[127,142813,71318],{"class":154},[127,142815,158],{"class":147},[127,142817,867],{"class":154},[127,142819,164],{"class":147},[127,142821,142822,142824,142826,142828,142830,142832,142834],{"class":129,"line":415},[127,142823,71426],{"class":154},[127,142825,158],{"class":147},[127,142827,1121],{"class":154},[127,142829,291],{"class":290},[127,142831,52058],{"class":154},[127,142833,64524],{"class":154},[127,142835,164],{"class":147},[127,142837,142838,142840,142842,142844],{"class":129,"line":421},[127,142839,135517],{"class":154},[127,142841,158],{"class":147},[127,142843,62902],{"class":154},[127,142845,164],{"class":147},[127,142847,142848],{"class":129,"line":1766},[127,142849,170],{"class":147},[62,142851,142853],{"id":142852},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22539,142855,142857],{"id":142856},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142859,142860],{},"设置中心点",[23,142862],{"style":25,"src":142863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142865,142866],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22539,142868,142870],{"id":142869},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[117,142872,142874],{"className":119,"code":142873,"language":121,"meta":122,"style":122},"\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",[124,142875,142876,142881,142887,142902,142907,142912],{"__ignoreMap":122},[127,142877,142878],{"class":129,"line":130},[127,142879,142880],{"class":133},"\u002F* 转换中心点 *\u002F\n",[127,142882,142883,142885],{"class":129,"line":137},[127,142884,52147],{"class":140},[127,142886,148],{"class":147},[127,142888,142889,142892,142894,142896,142898,142900],{"class":129,"line":151},[127,142890,142891],{"class":154},"  transform-origin",[127,142893,158],{"class":147},[127,142895,161],{"class":154},[127,142897,17685],{"class":154},[127,142899,130805],{"class":147},[127,142901,135615],{"class":133},[127,142903,142904],{"class":129,"line":167},[127,142905,142906],{"class":133},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[127,142908,142909],{"class":129,"line":415},[127,142910,142911],{"class":133},"  \u002F* transform-origin: left top; *\u002F\n",[127,142913,142914],{"class":129,"line":421},[127,142915,170],{"class":147},[22539,142917,142919],{"id":142918},"_18133-旋转案例","18.1.3.3 旋转案例",[23,142921],{"style":25,"src":142922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[117,142924,142925],{"className":119,"code":142745,"language":121,"meta":122,"style":122},[124,142926,142927,142933,142949],{"__ignoreMap":122},[127,142928,142929,142931],{"class":129,"line":130},[127,142930,52147],{"class":140},[127,142932,148],{"class":147},[127,142934,142935,142937,142939,142941,142943,142945,142947],{"class":129,"line":137},[127,142936,136926],{"class":154},[127,142938,158],{"class":147},[127,142940,142762],{"class":154},[127,142942,681],{"class":147},[127,142944,1204],{"class":154},[127,142946,142769],{"class":290},[127,142948,3261],{"class":147},[127,142950,142951],{"class":129,"line":151},[127,142952,170],{"class":147},[62,142954,142956],{"id":142955},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22539,142958,142960],{"id":142959},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142962,142963],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[23,142965],{"style":25,"src":142966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22539,142968,142970],{"id":142969},"_18142-分页按钮","18.1.4.2 分页按钮",[23,142972],{"style":25,"src":142973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[117,142975,142977],{"className":119,"code":142976,"language":121,"meta":122,"style":122},"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",[124,142978,142979,142985,143001,143005,143009,143014,143020,143034,143039],{"__ignoreMap":122},[127,142980,142981,142983],{"class":129,"line":130},[127,142982,52147],{"class":140},[127,142984,148],{"class":147},[127,142986,142987,142989,142991,142994,142996,142999],{"class":129,"line":137},[127,142988,136926],{"class":154},[127,142990,158],{"class":147},[127,142992,142993],{"class":154},"scale",[127,142995,681],{"class":147},[127,142997,142998],{"class":154},"1.2",[127,143000,3261],{"class":147},[127,143002,143003],{"class":129,"line":151},[127,143004,170],{"class":147},[127,143006,143007],{"class":129,"line":167},[127,143008,136403],{"class":147},[127,143010,143011],{"class":129,"line":415},[127,143012,143013],{"class":133},"\u002F* 2D 缩放 *\u002F\n",[127,143015,143016,143018],{"class":129,"line":421},[127,143017,52147],{"class":140},[127,143019,148],{"class":147},[127,143021,143022,143024,143026,143028,143030,143032],{"class":129,"line":1766},[127,143023,136926],{"class":154},[127,143025,158],{"class":147},[127,143027,142993],{"class":154},[127,143029,681],{"class":147},[127,143031,142998],{"class":154},[127,143033,3261],{"class":147},[127,143035,143036],{"class":129,"line":1856},[127,143037,143038],{"class":133},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[127,143040,143041],{"class":129,"line":1862},[127,143042,170],{"class":147},[19,143044,143045],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[117,143047,143049],{"className":119,"code":143048,"language":121,"meta":122,"style":122},"\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",[124,143050,143051,143056,143066,143087,143108,143112,143117,143123,143150],{"__ignoreMap":122},[127,143052,143053],{"class":129,"line":130},[127,143054,143055],{"class":133},"\u002F* 定义动画 *\u002F\n",[127,143057,143058,143061,143064],{"class":129,"line":137},[127,143059,143060],{"class":290},"@keyframes",[127,143062,143063],{"class":5758}," move",[127,143065,148],{"class":147},[127,143067,143068,143071,143073,143075,143077,143080,143082,143084],{"class":129,"line":151},[127,143069,143070],{"class":143},"  0%",[127,143072,80336],{"class":147},[127,143074,48674],{"class":154},[127,143076,158],{"class":147},[127,143078,143079],{"class":154},"translateX",[127,143081,681],{"class":147},[127,143083,867],{"class":154},[127,143085,143086],{"class":147},"); }\n",[127,143088,143089,143092,143094,143096,143098,143100,143102,143104,143106],{"class":129,"line":167},[127,143090,143091],{"class":143},"  100%",[127,143093,80336],{"class":147},[127,143095,48674],{"class":154},[127,143097,158],{"class":147},[127,143099,143079],{"class":154},[127,143101,681],{"class":147},[127,143103,986],{"class":154},[127,143105,291],{"class":290},[127,143107,143086],{"class":147},[127,143109,143110],{"class":129,"line":415},[127,143111,170],{"class":147},[127,143113,143114],{"class":129,"line":421},[127,143115,143116],{"class":133},"\u002F* 调用动画 *\u002F\n",[127,143118,143119,143121],{"class":129,"line":1766},[127,143120,52147],{"class":140},[127,143122,148],{"class":147},[127,143124,143125,143128,143130,143132,143134,143136,143138,143140,143142,143145,143148],{"class":129,"line":1856},[127,143126,143127],{"class":154},"  animation",[127,143129,158],{"class":147},[127,143131,135628],{"class":154},[127,143133,25659],{"class":154},[127,143135,1369],{"class":290},[127,143137,79209],{"class":154},[127,143139,4635],{"class":154},[127,143141,1369],{"class":290},[127,143143,143144],{"class":154}," infinite",[127,143146,143147],{"class":154}," alternate",[127,143149,164],{"class":147},[127,143151,143152],{"class":129,"line":1862},[127,143153,170],{"class":147},[19,143155,143045],{},[117,143157,143160],{"className":143158,"code":143159,"language":5729},[5727],"\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",[124,143161,143159],{"__ignoreMap":122},[22539,143163,143165],{"id":143164},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143167,143168],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[23,143170],{"style":25,"src":143171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[117,143173,143174],{"className":119,"code":143048,"language":121,"meta":122,"style":122},[124,143175,143176,143180,143188,143206,143226,143230,143234,143240,143264],{"__ignoreMap":122},[127,143177,143178],{"class":129,"line":130},[127,143179,143055],{"class":133},[127,143181,143182,143184,143186],{"class":129,"line":137},[127,143183,143060],{"class":290},[127,143185,143063],{"class":5758},[127,143187,148],{"class":147},[127,143189,143190,143192,143194,143196,143198,143200,143202,143204],{"class":129,"line":151},[127,143191,143070],{"class":143},[127,143193,80336],{"class":147},[127,143195,48674],{"class":154},[127,143197,158],{"class":147},[127,143199,143079],{"class":154},[127,143201,681],{"class":147},[127,143203,867],{"class":154},[127,143205,143086],{"class":147},[127,143207,143208,143210,143212,143214,143216,143218,143220,143222,143224],{"class":129,"line":167},[127,143209,143091],{"class":143},[127,143211,80336],{"class":147},[127,143213,48674],{"class":154},[127,143215,158],{"class":147},[127,143217,143079],{"class":154},[127,143219,681],{"class":147},[127,143221,986],{"class":154},[127,143223,291],{"class":290},[127,143225,143086],{"class":147},[127,143227,143228],{"class":129,"line":415},[127,143229,170],{"class":147},[127,143231,143232],{"class":129,"line":421},[127,143233,143116],{"class":133},[127,143235,143236,143238],{"class":129,"line":1766},[127,143237,52147],{"class":140},[127,143239,148],{"class":147},[127,143241,143242,143244,143246,143248,143250,143252,143254,143256,143258,143260,143262],{"class":129,"line":1856},[127,143243,143127],{"class":154},[127,143245,158],{"class":147},[127,143247,135628],{"class":154},[127,143249,25659],{"class":154},[127,143251,1369],{"class":290},[127,143253,79209],{"class":154},[127,143255,4635],{"class":154},[127,143257,1369],{"class":290},[127,143259,143144],{"class":154},[127,143261,143147],{"class":154},[127,143263,164],{"class":147},[127,143265,143266],{"class":129,"line":1862},[127,143267,170],{"class":147},[19,143269,143270],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[62,143272,143274],{"id":143273},"_1823-知识点回顾","18.2.3 知识点回顾",[117,143276,143277],{"className":119,"code":129111,"language":121,"meta":122,"style":122},[124,143278,143279,143285,143295],{"__ignoreMap":122},[127,143280,143281,143283],{"class":129,"line":130},[127,143282,52147],{"class":140},[127,143284,148],{"class":147},[127,143286,143287,143289,143291,143293],{"class":129,"line":137},[127,143288,129124],{"class":154},[127,143290,158],{"class":147},[127,143292,62269],{"class":154},[127,143294,164],{"class":147},[127,143296,143297],{"class":129,"line":151},[127,143298,170],{"class":147},[14,143300,143302],{"id":143301},"_183-3d-转换","18.3 3D 转换",[19,143304,143305],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[62,143307,143309],{"id":143308},"_1831-坐标轴认识","18.3.1 坐标轴认识",[23,143311],{"style":25,"src":143312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[62,143314,143316],{"id":143315},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[23,143318],{"style":25,"src":143319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143321,143322],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143324,143325],{},"translate3d的效果需要搭配透视perspective来使用",[23,143327],{"style":25,"src":143328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[62,143330,143332],{"id":143331},"_1833-透视-perspective","18.3.3 透视 perspective",[23,143334],{"style":25,"src":143335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143337,143338],{},"透视写在父盒子上，单位为像素",[62,143340,143342],{"id":143341},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22539,143344,143346],{"id":143345},"_18341-分开解释","18.3.4.1 分开解释",[23,143348],{"style":25,"src":143349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[23,143351],{"style":25,"src":143352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[23,143354],{"style":25,"src":143355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143357,143358],{},"总结来说就是左手原则",[22539,143360,143362],{"id":143361},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[23,143364],{"style":25,"src":143365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[62,143367,143369],{"id":143368},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[23,143371],{"style":25,"src":143372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[23,143374],{"style":25,"src":143375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[117,143377,143379],{"className":119,"code":143378,"language":121,"meta":122,"style":122},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[124,143380,143381,143387,143400,143417],{"__ignoreMap":122},[127,143382,143383,143385],{"class":129,"line":130},[127,143384,52147],{"class":140},[127,143386,148],{"class":147},[127,143388,143389,143392,143394,143396,143398],{"class":129,"line":137},[127,143390,143391],{"class":154},"  perspective",[127,143393,158],{"class":147},[127,143395,65607],{"class":154},[127,143397,291],{"class":290},[127,143399,164],{"class":147},[127,143401,143402,143404,143406,143409,143411,143413,143415],{"class":129,"line":151},[127,143403,136926],{"class":154},[127,143405,158],{"class":147},[127,143407,143408],{"class":154},"rotateX",[127,143410,681],{"class":147},[127,143412,1204],{"class":154},[127,143414,142769],{"class":290},[127,143416,3261],{"class":147},[127,143418,143419],{"class":129,"line":167},[127,143420,170],{"class":147},[62,143422,143424],{"id":143423},"_1836-案例","18.3.6 案例",[22539,143426,143428],{"id":143427},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[23,143430],{"style":25,"src":143431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[23,143433],{"style":25,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[23,143436],{"style":25,"src":143437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[117,143439,143441],{"className":119,"code":143440,"language":121,"meta":122,"style":122},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[124,143442,143443,143448,143454,143466],{"__ignoreMap":122},[127,143444,143445],{"class":129,"line":130},[127,143446,143447],{"class":133},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[127,143449,143450,143452],{"class":129,"line":137},[127,143451,133939],{"class":143},[127,143453,148],{"class":147},[127,143455,143456,143458,143460,143462,143464],{"class":129,"line":151},[127,143457,143391],{"class":154},[127,143459,158],{"class":147},[127,143461,65607],{"class":154},[127,143463,291],{"class":290},[127,143465,164],{"class":147},[127,143467,143468],{"class":129,"line":167},[127,143469,170],{"class":147},[22539,143471,143473],{"id":143472},"_18362-3d导航栏","18.3.6.2 3D导航栏",[23,143475],{"style":25,"src":143476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[117,143478,143479],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,143480,143481,143485,143499,143503],{"__ignoreMap":122},[127,143482,143483],{"class":129,"line":130},[127,143484,131053],{"class":133},[127,143486,143487,143489,143491,143493,143495,143497],{"class":129,"line":137},[127,143488,1584],{"class":147},[127,143490,52147],{"class":140},[127,143492,54021],{"class":143},[127,143494,725],{"class":147},[127,143496,131066],{"class":781},[127,143498,51846],{"class":147},[127,143500,143501],{"class":129,"line":151},[127,143502,131073],{"class":147},[127,143504,143505,143507,143509],{"class":129,"line":167},[127,143506,52321],{"class":147},[127,143508,52147],{"class":140},[127,143510,51846],{"class":147},[22539,143512,143514],{"id":143513},"_18363-旋转木马","18.3.6.3 旋转木马",[23,143516],{"style":25,"src":143517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[117,143519,143520],{"className":119,"code":142745,"language":121,"meta":122,"style":122},[124,143521,143522,143528,143544],{"__ignoreMap":122},[127,143523,143524,143526],{"class":129,"line":130},[127,143525,52147],{"class":140},[127,143527,148],{"class":147},[127,143529,143530,143532,143534,143536,143538,143540,143542],{"class":129,"line":137},[127,143531,136926],{"class":154},[127,143533,158],{"class":147},[127,143535,142762],{"class":154},[127,143537,681],{"class":147},[127,143539,1204],{"class":154},[127,143541,142769],{"class":290},[127,143543,3261],{"class":147},[127,143545,143546],{"class":129,"line":151},[127,143547,170],{"class":147},[575,143549,143550],{},"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":122,"searchDepth":137,"depth":137,"links":143552},[143553,143560],{"id":142648,"depth":137,"text":142649,"children":143554},[143555,143556,143557,143558,143559],{"id":142672,"depth":151,"text":142673},{"id":142727,"depth":151,"text":142728},{"id":142852,"depth":151,"text":142853},{"id":142955,"depth":151,"text":142956},{"id":143273,"depth":151,"text":143274},{"id":143301,"depth":137,"text":143302,"children":143561},[143562,143563,143564,143565,143566,143567],{"id":143308,"depth":151,"text":143309},{"id":143315,"depth":151,"text":143316},{"id":143331,"depth":151,"text":143332},{"id":143341,"depth":151,"text":143342},{"id":143368,"depth":151,"text":143369},{"id":143423,"depth":151,"text":143424},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142640,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143574,"title":143575,"body":143576,"description":603,"extension":604,"meta":143779,"navigation":606,"path":143780,"seo":143781,"stem":143782,"__hash__":143783},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143577,"toc":143768},[143578,143581,143585,143588,143591,143595,143598,143601,143604,143608,143611,143615,143618,143622,143625,143629,143643,143647,143672,143675,143678,143695,143699,143703,143706,143709,143713,143716,143719,143737,143741,143744,143758,143762,143765],[10,143579,143575],{"id":143580},"_19-移动端基础-前缀现状与视口",[14,143582,143584],{"id":143583},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[23,143586],{"style":25,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143589,143590],{},"意思就是加个前缀，增加兼容性",[14,143592,143594],{"id":143593},"_192-移动端现状认识","19.2 移动端现状认识",[23,143596],{"style":25,"src":143597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143599,143600],{},"调试方法：",[23,143602],{"style":25,"src":143603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143605,143607],{"id":143606},"_193-视口","19.3 视口",[19,143609,143610],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[62,143612,143614],{"id":143613},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[23,143616],{"style":25,"src":143617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[62,143619,143621],{"id":143620},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[23,143623],{"style":25,"src":143624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[62,143626,143628],{"id":143627},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1681,143630,143631,143634,143637,143640],{},[635,143632,143633],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[635,143635,143636],{},"理想视口，对设备来讲，是最理想的视口尺寸",[635,143638,143639],{},"需要手动添写meta视口标签通知浏览器操作",[635,143641,143642],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[62,143644,143646],{"id":143645},"_1934-meta视口标签","19.3.4 meta视口标签",[117,143648,143650],{"className":127689,"code":143649,"language":127691,"meta":122,"style":122},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[124,143651,143652],{"__ignoreMap":122},[127,143653,143654,143656,143658,143660,143662,143664,143666,143668,143670],{"class":129,"line":130},[127,143655,1584],{"class":147},[127,143657,51883],{"class":140},[127,143659,15462],{"class":143},[127,143661,725],{"class":147},[127,143663,51930],{"class":781},[127,143665,51910],{"class":143},[127,143667,725],{"class":147},[127,143669,51937],{"class":781},[127,143671,51846],{"class":147},[23,143673],{"style":25,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143676,143677],{},"标准视口设置：",[632,143679,143680,143683,143686,143689,143692],{},[635,143681,143682],{},"视口宽度和设备保持一致",[635,143684,143685],{},"视口的默认缩放比例1.0",[635,143687,143688],{},"不允许用户自行缩放",[635,143690,143691],{},"最大允许的缩放比例1.0",[635,143693,143694],{},"最小允许的缩放比例1.0",[62,143696,143698],{"id":143697},"_1935-二倍图","19.3.5 二倍图",[22539,143700,143702],{"id":143701},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[23,143704],{"style":25,"src":143705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[23,143707],{"style":25,"src":143708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22539,143710,143712],{"id":143711},"_19352-多倍图","19.3.5.2 多倍图",[23,143714],{"style":25,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143717,143718],{},"二倍图法，代码如下：",[117,143720,143722],{"className":119,"code":143721,"language":121,"meta":122,"style":122},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[124,143723,143724,143729],{"__ignoreMap":122},[127,143725,143726],{"class":129,"line":130},[127,143727,143728],{"class":133},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[127,143730,143731,143734],{"class":129,"line":137},[127,143732,143733],{"class":140},"background-size",[127,143735,143736],{"class":147},": 50% 50%;\n",[22539,143738,143740],{"id":143739},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[23,143742],{"style":25,"src":143743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[632,143745,143746,143749,143752,143755],{},[635,143747,143748],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[635,143750,143751],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[635,143753,143754],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[635,143756,143757],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22539,143759,143761],{"id":143760},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[23,143763],{"style":25,"src":143764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[575,143766,143767],{},"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":122,"searchDepth":137,"depth":137,"links":143769},[143770,143771,143772],{"id":143583,"depth":137,"text":143584},{"id":143593,"depth":137,"text":143594},{"id":143606,"depth":137,"text":143607,"children":143773},[143774,143775,143776,143777,143778],{"id":143613,"depth":151,"text":143614},{"id":143620,"depth":151,"text":143621},{"id":143627,"depth":151,"text":143628},{"id":143645,"depth":151,"text":143646},{"id":143697,"depth":151,"text":143698},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143575,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143785,"title":143786,"body":143787,"description":603,"extension":604,"meta":144664,"navigation":606,"path":144665,"seo":144666,"stem":144667,"__hash__":144668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143788,"toc":144648},[143789,143792,143796,143803,143806,143813,143816,143821,143824,143828,143832,143839,143842,143845,143849,143852,143855,143858,143861,143864,143868,143871,143875,143877,143880,143883,143886,143889,143891,143894,143896,143926,143928,143958,143962,143965,143969,143972,143989,143992,143995,144071,144073,144076,144079,144082,144085,144087,144090,144093,144097,144119,144122,144125,144129,144132,144138,144141,144145,144148,144151,144155,144158,144161,144164,144168,144171,144174,144177,144180,144184,144187,144191,144198,144201,144204,144207,144210,144220,144223,144226,144233,144236,144240,144243,144246,144250,144253,144256,144259,144304,144307,144310,144313,144315,144444,144446,144484,144487,144490,144492,144610,144612,144646],[10,143790,143786],{"id":143791},"_20-移动端布局实战上篇",[14,143793,143795],{"id":143794},"_201-移动端主流方案","20.1 移动端主流方案",[632,143797,143798],{},[635,143799,143800],{},[30,143801,143802],{},"单独移动端页面（主流）",[23,143804],{"style":25,"src":143805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[632,143807,143808],{"start":137},[635,143809,143810],{},[30,143811,143812],{},"响应式兼容PC移动端",[23,143814],{"style":25,"src":143815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[632,143817,143818],{"start":151},[635,143819,143820],{},"两种页面选型布局方式",[23,143822],{"style":25,"src":143823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143825,143827],{"id":143826},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[62,143829,143831],{"id":143830},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143833,143834,143835],{},"官网地址： ",[457,143836,143837],{"href":143837,"rel":143838},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24405],[23,143840],{"style":25,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[23,143843],{"style":25,"src":143844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[62,143846,143848],{"id":143847},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[23,143850],{"style":25,"src":143851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[23,143853],{"style":25,"src":143854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143856,143857],{},"去除高亮：",[19,143859,143860],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143862,143863],{},"-webkit- tap-highlight-color: transparent;",[14,143865,143867],{"id":143866},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[23,143869],{"style":25,"src":143870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143872,143874],{"id":143873},"_204-流式布局案例","20.4 流式布局案例",[19,143876,32],{},[19,143878,143879],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143881,143882],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143884,143885],{},"图片格式：",[23,143887],{"style":25,"src":143888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143890,135985],{},[23,143892],{"style":25,"src":143893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143895,140312],{},[117,143897,143898],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,143899,143900],{"__ignoreMap":122},[127,143901,143902,143904,143906,143908,143910,143912,143914,143916,143918,143920,143922,143924],{"class":129,"line":130},[127,143903,1584],{"class":147},[127,143905,23],{"class":140},[127,143907,55773],{"class":143},[127,143909,725],{"class":147},[127,143911,134459],{"class":781},[127,143913,55781],{"class":143},[127,143915,725],{"class":147},[127,143917,134466],{"class":781},[127,143919,134469],{"class":143},[127,143921,725],{"class":147},[127,143923,134474],{"class":781},[127,143925,51846],{"class":147},[19,143927,140401],{},[117,143929,143930],{"className":127689,"code":134444,"language":127691,"meta":122,"style":122},[124,143931,143932],{"__ignoreMap":122},[127,143933,143934,143936,143938,143940,143942,143944,143946,143948,143950,143952,143954,143956],{"class":129,"line":130},[127,143935,1584],{"class":147},[127,143937,23],{"class":140},[127,143939,55773],{"class":143},[127,143941,725],{"class":147},[127,143943,134459],{"class":781},[127,143945,55781],{"class":143},[127,143947,725],{"class":147},[127,143949,134466],{"class":781},[127,143951,134469],{"class":143},[127,143953,725],{"class":147},[127,143955,134474],{"class":781},[127,143957,51846],{"class":147},[14,143959,143961],{"id":143960},"_205-flex布局","20.5 flex布局",[23,143963],{"style":25,"src":143964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[62,143966,143968],{"id":143967},"_2051-布局原理","20.5.1 布局原理",[19,143970,143971],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1681,143973,143974,143977,143980,143983,143986],{},[635,143975,143976],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[635,143978,143979],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[635,143981,143982],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[635,143984,143985],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[635,143987,143988],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143990,143991],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143993,143994],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[117,143996,143998],{"className":119,"code":143997,"language":121,"meta":122,"style":122},"\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",[124,143999,144000,144005,144012,144022,144034,144045,144056,144067],{"__ignoreMap":122},[127,144001,144002],{"class":129,"line":130},[127,144003,144004],{"class":133},"\u002F* Flex 弹性布局 *\u002F\n",[127,144006,144007,144010],{"class":129,"line":137},[127,144008,144009],{"class":143},".container",[127,144011,148],{"class":147},[127,144013,144014,144016,144018,144020],{"class":129,"line":151},[127,144015,128558],{"class":154},[127,144017,158],{"class":147},[127,144019,52015],{"class":154},[127,144021,164],{"class":147},[127,144023,144024,144027,144029,144032],{"class":129,"line":167},[127,144025,144026],{"class":154},"  flex-direction",[127,144028,158],{"class":147},[127,144030,144031],{"class":154},"row",[127,144033,164],{"class":147},[127,144035,144036,144039,144041,144043],{"class":129,"line":415},[127,144037,144038],{"class":154},"  justify-content",[127,144040,158],{"class":147},[127,144042,52204],{"class":154},[127,144044,164],{"class":147},[127,144046,144047,144050,144052,144054],{"class":129,"line":421},[127,144048,144049],{"class":154},"  align-items",[127,144051,158],{"class":147},[127,144053,161],{"class":154},[127,144055,164],{"class":147},[127,144057,144058,144061,144063,144065],{"class":129,"line":1766},[127,144059,144060],{"class":154},"  flex-wrap",[127,144062,158],{"class":147},[127,144064,79139],{"class":154},[127,144066,164],{"class":147},[127,144068,144069],{"class":129,"line":1856},[127,144070,170],{"class":147},[19,144072,70986],{},[19,144074,144075],{},".form-item .male-label {",[19,144077,144078],{},"   margin-right: 20px;",[19,144080,144081],{},"   display: inline-flex;",[19,144083,144084],{},"   align-items: center;",[19,144086,1620],{},[23,144088],{"style":25,"src":144089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[23,144091],{"style":25,"src":144092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[62,144094,144096],{"id":144095},"_2052-常见父项属性","20.5.2 常见父项属性",[632,144098,144099,144102,144105,144108,144111,144114,144117],{},[635,144100,144101],{},"flex-direction：设置主轴的方向",[635,144103,144104],{},"justify-content：设置主轴上的子元素排列方式",[635,144106,144107],{},"flex-wrap：设置子元素是否换行",[635,144109,144110],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[635,144112,144113],{},"align-items：设置侧轴上的子元素排列方式（单行）",[635,144115,144116],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[635,144118,144101],{},[23,144120],{"style":25,"src":144121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[23,144123],{"style":25,"src":144124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[632,144126,144127],{"start":137},[635,144128,144104],{},[23,144130],{"style":25,"src":144131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144133,144134,144137],{},[124,144135,144136],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144139,144140],{},"跟着主轴走",[632,144142,144143],{"start":151},[635,144144,144107],{},[23,144146],{"style":25,"src":144147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144149,144150],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[632,144152,144153],{"start":167},[635,144154,144110],{},[23,144156],{"style":25,"src":144157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144159,144160],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144162,144163],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[632,144165,144166],{"start":415},[635,144167,144113],{},[23,144169],{"style":25,"src":144170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144172,144173],{},"align-items与align-content之间的区别：",[19,144175,144176],{},"单找items，多找content",[23,144178],{"style":25,"src":144179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[632,144181,144182],{"start":421},[635,144183,144116],{},[23,144185],{"style":25,"src":144186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[62,144188,144190],{"id":144189},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[632,144192,144193],{},[635,144194,144195],{},[30,144196,144197],{},"flex 属性",[19,144199,144200],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[23,144202],{"style":25,"src":144203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144205,144206],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144208,144209],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[632,144211,144212],{"start":137},[635,144213,144214,14337,144217],{},[30,144215,144216],{},"align-self",[30,144218,144219],{},"控制子项自己在侧轴上的排列方式",[23,144221],{"style":25,"src":144222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144224,144225],{},"单个子盒子在父盒子侧轴上的排列方式",[632,144227,144228],{"start":151},[635,144229,144230,144232],{},[30,144231,95826],{}," 属性定义项目的排列顺序",[23,144234],{"style":25,"src":144235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[62,144237,144239],{"id":144238},"_2054-背景线性渐变","20.5.4 背景线性渐变",[23,144241],{"style":25,"src":144242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144244,144245],{},"必须要添加浏览器的私有前缀",[62,144247,144249],{"id":144248},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144251,144252],{},"学到最重要的知识：",[19,144254,144255],{},"flex处理这样的布局思路",[23,144257],{"style":25,"src":144258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[117,144260,144262],{"className":119,"code":144261,"language":121,"meta":122,"style":122},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[124,144263,144264,144270,144280,144290,144300],{"__ignoreMap":122},[127,144265,144266,144268],{"class":129,"line":130},[127,144267,144009],{"class":143},[127,144269,148],{"class":147},[127,144271,144272,144274,144276,144278],{"class":129,"line":137},[127,144273,128558],{"class":154},[127,144275,158],{"class":147},[127,144277,52015],{"class":154},[127,144279,164],{"class":147},[127,144281,144282,144284,144286,144288],{"class":129,"line":151},[127,144283,144038],{"class":154},[127,144285,158],{"class":147},[127,144287,161],{"class":154},[127,144289,164],{"class":147},[127,144291,144292,144294,144296,144298],{"class":129,"line":167},[127,144293,144049],{"class":154},[127,144295,158],{"class":147},[127,144297,161],{"class":154},[127,144299,164],{"class":147},[127,144301,144302],{"class":129,"line":415},[127,144303,170],{"class":147},[19,144305,144306],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144308,144309],{},"使用属性选择器",[23,144311],{"style":25,"src":144312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144314,69422],{},[117,144316,144318],{"className":127689,"code":144317,"language":127691,"meta":122,"style":122},"\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",[124,144319,144320,144325,144339,144344,144364,144369,144388,144393,144412,144417,144436],{"__ignoreMap":122},[127,144321,144322],{"class":129,"line":130},[127,144323,144324],{"class":133},"\u003C!-- 携程网移动端案例结构 -->\n",[127,144326,144327,144329,144331,144333,144335,144337],{"class":129,"line":137},[127,144328,1584],{"class":147},[127,144330,52147],{"class":140},[127,144332,54021],{"class":143},[127,144334,725],{"class":147},[127,144336,92852],{"class":781},[127,144338,51846],{"class":147},[127,144340,144341],{"class":129,"line":151},[127,144342,144343],{"class":133},"  \u003C!-- 搜索栏 -->\n",[127,144345,144346,144348,144350,144352,144354,144357,144360,144362],{"class":129,"line":167},[127,144347,52679],{"class":147},[127,144349,52147],{"class":140},[127,144351,54021],{"class":143},[127,144353,725],{"class":147},[127,144355,144356],{"class":781},"\"search-index\"",[127,144358,144359],{"class":147},">...\u003C\u002F",[127,144361,52147],{"class":140},[127,144363,51846],{"class":147},[127,144365,144366],{"class":129,"line":415},[127,144367,144368],{"class":133},"  \u003C!-- 焦点图 -->\n",[127,144370,144371,144373,144375,144377,144379,144382,144384,144386],{"class":129,"line":421},[127,144372,52679],{"class":147},[127,144374,52147],{"class":140},[127,144376,54021],{"class":143},[127,144378,725],{"class":147},[127,144380,144381],{"class":781},"\"focus\"",[127,144383,144359],{"class":147},[127,144385,52147],{"class":140},[127,144387,51846],{"class":147},[127,144389,144390],{"class":129,"line":1766},[127,144391,144392],{"class":133},"  \u003C!-- 主导航 -->\n",[127,144394,144395,144397,144399,144401,144403,144406,144408,144410],{"class":129,"line":1856},[127,144396,52679],{"class":147},[127,144398,52147],{"class":140},[127,144400,54021],{"class":143},[127,144402,725],{"class":147},[127,144404,144405],{"class":781},"\"local-nav\"",[127,144407,144359],{"class":147},[127,144409,52147],{"class":140},[127,144411,51846],{"class":147},[127,144413,144414],{"class":129,"line":1862},[127,144415,144416],{"class":133},"  \u003C!-- 子导航 -->\n",[127,144418,144419,144421,144423,144425,144427,144430,144432,144434],{"class":129,"line":1874},[127,144420,52679],{"class":147},[127,144422,52147],{"class":140},[127,144424,54021],{"class":143},[127,144426,725],{"class":147},[127,144428,144429],{"class":781},"\"nav-common\"",[127,144431,144359],{"class":147},[127,144433,52147],{"class":140},[127,144435,51846],{"class":147},[127,144437,144438,144440,144442],{"class":129,"line":2155},[127,144439,52321],{"class":147},[127,144441,52147],{"class":140},[127,144443,51846],{"class":147},[19,144445,70986],{},[117,144447,144448],{"className":119,"code":137394,"language":121,"meta":122,"style":122},[124,144449,144450,144464,144480],{"__ignoreMap":122},[127,144451,144452,144454,144456,144458,144460,144462],{"class":129,"line":130},[127,144453,54356],{"class":140},[127,144455,1564],{"class":147},[127,144457,103636],{"class":143},[127,144459,725],{"class":290},[127,144461,63232],{"class":781},[127,144463,137411],{"class":147},[127,144465,144466,144468,144470,144472,144474,144476,144478],{"class":129,"line":137},[127,144467,71426],{"class":154},[127,144469,158],{"class":147},[127,144471,893],{"class":154},[127,144473,291],{"class":290},[127,144475,52058],{"class":154},[127,144477,130522],{"class":154},[127,144479,164],{"class":147},[127,144481,144482],{"class":129,"line":151},[127,144483,170],{"class":147},[19,144485,144486],{},"总代码和效果展示：",[23,144488],{"style":25,"src":144489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144491,69422],{},[117,144493,144494],{"className":127689,"code":144317,"language":127691,"meta":122,"style":122},[124,144495,144496,144500,144514,144518,144536,144540,144558,144562,144580,144584,144602],{"__ignoreMap":122},[127,144497,144498],{"class":129,"line":130},[127,144499,144324],{"class":133},[127,144501,144502,144504,144506,144508,144510,144512],{"class":129,"line":137},[127,144503,1584],{"class":147},[127,144505,52147],{"class":140},[127,144507,54021],{"class":143},[127,144509,725],{"class":147},[127,144511,92852],{"class":781},[127,144513,51846],{"class":147},[127,144515,144516],{"class":129,"line":151},[127,144517,144343],{"class":133},[127,144519,144520,144522,144524,144526,144528,144530,144532,144534],{"class":129,"line":167},[127,144521,52679],{"class":147},[127,144523,52147],{"class":140},[127,144525,54021],{"class":143},[127,144527,725],{"class":147},[127,144529,144356],{"class":781},[127,144531,144359],{"class":147},[127,144533,52147],{"class":140},[127,144535,51846],{"class":147},[127,144537,144538],{"class":129,"line":415},[127,144539,144368],{"class":133},[127,144541,144542,144544,144546,144548,144550,144552,144554,144556],{"class":129,"line":421},[127,144543,52679],{"class":147},[127,144545,52147],{"class":140},[127,144547,54021],{"class":143},[127,144549,725],{"class":147},[127,144551,144381],{"class":781},[127,144553,144359],{"class":147},[127,144555,52147],{"class":140},[127,144557,51846],{"class":147},[127,144559,144560],{"class":129,"line":1766},[127,144561,144392],{"class":133},[127,144563,144564,144566,144568,144570,144572,144574,144576,144578],{"class":129,"line":1856},[127,144565,52679],{"class":147},[127,144567,52147],{"class":140},[127,144569,54021],{"class":143},[127,144571,725],{"class":147},[127,144573,144405],{"class":781},[127,144575,144359],{"class":147},[127,144577,52147],{"class":140},[127,144579,51846],{"class":147},[127,144581,144582],{"class":129,"line":1862},[127,144583,144416],{"class":133},[127,144585,144586,144588,144590,144592,144594,144596,144598,144600],{"class":129,"line":1874},[127,144587,52679],{"class":147},[127,144589,52147],{"class":140},[127,144591,54021],{"class":143},[127,144593,725],{"class":147},[127,144595,144429],{"class":781},[127,144597,144359],{"class":147},[127,144599,52147],{"class":140},[127,144601,51846],{"class":147},[127,144603,144604,144606,144608],{"class":129,"line":2155},[127,144605,52321],{"class":147},[127,144607,52147],{"class":140},[127,144609,51846],{"class":147},[19,144611,70986],{},[117,144613,144614],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,144615,144616,144620,144634,144638],{"__ignoreMap":122},[127,144617,144618],{"class":129,"line":130},[127,144619,131053],{"class":133},[127,144621,144622,144624,144626,144628,144630,144632],{"class":129,"line":137},[127,144623,1584],{"class":147},[127,144625,52147],{"class":140},[127,144627,54021],{"class":143},[127,144629,725],{"class":147},[127,144631,131066],{"class":781},[127,144633,51846],{"class":147},[127,144635,144636],{"class":129,"line":151},[127,144637,131073],{"class":147},[127,144639,144640,144642,144644],{"class":129,"line":167},[127,144641,52321],{"class":147},[127,144643,52147],{"class":140},[127,144645,51846],{"class":147},[575,144647,138343],{},{"title":122,"searchDepth":137,"depth":137,"links":144649},[144650,144651,144655,144656,144657],{"id":143794,"depth":137,"text":143795},{"id":143826,"depth":137,"text":143827,"children":144652},[144653,144654],{"id":143830,"depth":151,"text":143831},{"id":143847,"depth":151,"text":143848},{"id":143866,"depth":137,"text":143867},{"id":143873,"depth":137,"text":143874},{"id":143960,"depth":137,"text":143961,"children":144658},[144659,144660,144661,144662,144663],{"id":143967,"depth":151,"text":143968},{"id":144095,"depth":151,"text":144096},{"id":144189,"depth":151,"text":144190},{"id":144238,"depth":151,"text":144239},{"id":144248,"depth":151,"text":144249},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143786,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144670,"title":144671,"body":144672,"description":603,"extension":604,"meta":145899,"navigation":606,"path":145900,"seo":145901,"stem":145902,"__hash__":145903},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144673,"toc":145877},[144674,144677,144681,144685,144688,144691,144695,144700,144703,144706,144709,144712,144715,144772,144775,144780,144783,144786,144790,144801,144805,144808,144811,144818,144823,144827,144830,144836,144839,144843,144846,144853,144856,144859,144866,144869,144876,144879,144882,144889,144892,144895,144897,144914,144918,144921,144924,144927,144931,144934,144937,144940,144943,144946,144949,144951,144954,144957,145019,145022,145132,145139,145145,145148,145151,145155,145158,145162,145167,145170,145177,145180,145186,145191,145194,145197,145200,145203,145206,145209,145212,145215,145271,145273,145299,145303,145306,145309,145312,145320,145323,145326,145330,145386,145389,145393,145399,145410,145413,145418,145421,145424,145430,145433,145436,145439,145442,145445,145448,145451,145454,145479,145485,145488,145491,145494,145497,145500,145503,145508,145511,145514,145517,145525,145528,145535,145538,145541,145543,145567,145569,145572,145575,145578,145581,145584,145587,145590,145624,145627,145630,145664,145671,145674,145677,145680,145683,145686,145689,145696,145699,145702,145705,145708,145715,145718,145721,145728,145731,145734,145738,145741,145744,145747,145750,145753,145756,145759,145762,145764,145788,145790,145814,145818,145829,145832,145835,145838,145841,145844,145847,145850,145853,145856,145859,145862,145865,145868,145871,145874],[10,144675,144671],{"id":144676},"_21-移动端布局实战下篇",[14,144678,144680],{"id":144679},"_211-rem适配布局","21.1 rem适配布局",[62,144682,144684],{"id":144683},"_2111-rem单位","21.1.1 rem单位",[23,144686],{"style":25,"src":144687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144689,144690],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[62,144692,144694],{"id":144693},"_2112-媒体查询","21.1.2 媒体查询",[632,144696,144697],{},[635,144698,144699],{},"参数介绍",[23,144701],{"style":25,"src":144702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[23,144704],{"style":25,"src":144705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[23,144707],{"style":25,"src":144708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[23,144710],{"style":25,"src":144711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[23,144713],{"style":25,"src":144714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[117,144716,144718],{"className":119,"code":144717,"language":121,"meta":122,"style":122},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[124,144719,144720,144725,144744,144751,144764,144768],{"__ignoreMap":122},[127,144721,144722],{"class":129,"line":130},[127,144723,144724],{"class":133},"\u002F* 媒体查询 *\u002F\n",[127,144726,144727,144730,144732,144735,144737,144740,144742],{"class":129,"line":137},[127,144728,144729],{"class":290},"@media",[127,144731,2201],{"class":147},[127,144733,144734],{"class":154},"max-width",[127,144736,158],{"class":147},[127,144738,144739],{"class":154},"768",[127,144741,291],{"class":290},[127,144743,12984],{"class":147},[127,144745,144746,144749],{"class":129,"line":151},[127,144747,144748],{"class":143},"  .container",[127,144750,148],{"class":147},[127,144752,144753,144756,144758,144760,144762],{"class":129,"line":167},[127,144754,144755],{"class":154},"    width",[127,144757,158],{"class":147},[127,144759,986],{"class":154},[127,144761,1003],{"class":290},[127,144763,164],{"class":147},[127,144765,144766],{"class":129,"line":415},[127,144767,127738],{"class":147},[127,144769,144770],{"class":129,"line":421},[127,144771,170],{"class":147},[19,144773,144774],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[632,144776,144777],{"start":137},[635,144778,144779],{},"引入资源",[23,144781],{"style":25,"src":144782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144784,144785],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[62,144787,144789],{"id":144788},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1681,144791,144792,144795,144798],{},[635,144793,144794],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[635,144796,144797],{},"媒体查询可以根据不同设备宽度来修改样式",[635,144799,144800],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144802,144804],{"id":144803},"_212-less基础","21.2 Less基础",[19,144806,144807],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144809,144810],{},"Less可以解决该问题，它是css的扩展语言",[19,144812,144813,144814],{},"Less中文网址： ",[457,144815,144816],{"href":144816,"rel":144817},"http:\u002F\u002Flesscss.cn\u002F",[24405],[19,144819,144820],{},[30,144821,144822],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[62,144824,144826],{"id":144825},"_2121-less安装","21.2.1 less安装",[19,144828,144829],{},"如果使用vscode，则无需进行下方安装步骤",[19,144831,144832],{},[457,144833,144834],{"href":144834,"rel":144835},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24405],[23,144837],{"style":25,"src":144838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[62,144840,144842],{"id":144841},"_2122-less使用","21.2.2 less使用",[19,144844,144845],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[632,144847,144848],{},[635,144849,144850],{},[30,144851,144852],{},"Less 变量",[23,144854],{"style":25,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[23,144857],{"style":25,"src":144858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[632,144860,144861],{"start":137},[635,144862,144863],{},[30,144864,144865],{},"Less 编译",[23,144867],{"style":25,"src":144868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[632,144870,144871],{"start":151},[635,144872,144873],{},[30,144874,144875],{},"Less 嵌套",[23,144877],{"style":25,"src":144878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[23,144880],{"style":25,"src":144881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[632,144883,144884],{"start":167},[635,144885,144886],{},[30,144887,144888],{},"Less 运算",[23,144890],{"style":25,"src":144891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144893,144894],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144896,32],{},[1681,144898,144899,144902,144905,144908,144911],{},[635,144900,144901],{},"乘号（*）和除号（\u002F）的写法",[635,144903,144904],{},"运算符中间左右有个空格隔开 1px + 5",[635,144906,144907],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[635,144909,144910],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[635,144912,144913],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144915,144917],{"id":144916},"_213-rem-适配方案","21.3 rem 适配方案",[19,144919,144920],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144922,144923],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[23,144925],{"style":25,"src":144926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[62,144928,144930],{"id":144929},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144932,144933],{},"rem + 媒体查询 + less 技术",[23,144935],{"style":25,"src":144936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144938,144939],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144941,144942],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[23,144944],{"style":25,"src":144945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144947,144948],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144950,15175],{},[23,144952],{"style":25,"src":144953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144955,144956],{},"index.html:",[117,144958,144960],{"className":119,"code":144959,"language":121,"meta":122,"style":122},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[124,144961,144962,144967,144973,144989,144993,144999,145015],{"__ignoreMap":122},[127,144963,144964],{"class":129,"line":130},[127,144965,144966],{"class":133},"\u002F* rem 适配方案 *\u002F\n",[127,144968,144969,144971],{"class":129,"line":137},[127,144970,51175],{"class":140},[127,144972,148],{"class":147},[127,144974,144975,144977,144979,144982,144984,144986],{"class":129,"line":151},[127,144976,282],{"class":154},[127,144978,158],{"class":147},[127,144980,144981],{"class":154},"62.5",[127,144983,1003],{"class":290},[127,144985,130805],{"class":147},[127,144987,144988],{"class":133},"\u002F* 1rem = 10px *\u002F\n",[127,144990,144991],{"class":129,"line":167},[127,144992,170],{"class":147},[127,144994,144995,144997],{"class":129,"line":415},[127,144996,130790],{"class":143},[127,144998,148],{"class":147},[127,145000,145001,145003,145005,145007,145010,145012],{"class":129,"line":421},[127,145002,71099],{"class":154},[127,145004,158],{"class":147},[127,145006,1121],{"class":154},[127,145008,145009],{"class":290},"rem",[127,145011,130805],{"class":147},[127,145013,145014],{"class":133},"\u002F* 100px *\u002F\n",[127,145016,145017],{"class":129,"line":1766},[127,145018,170],{"class":147},[19,145020,145021],{},"common.less",[117,145023,145025],{"className":119,"code":145024,"language":121,"meta":122,"style":122},"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",[124,145026,145027,145033,145048,145052,145058,145072,145076,145080,145084,145090,145104,145108,145114,145128],{"__ignoreMap":122},[127,145028,145029,145031],{"class":129,"line":130},[127,145030,51175],{"class":140},[127,145032,148],{"class":147},[127,145034,145035,145037,145039,145041,145043,145045],{"class":129,"line":137},[127,145036,282],{"class":154},[127,145038,158],{"class":147},[127,145040,144981],{"class":154},[127,145042,1003],{"class":290},[127,145044,26608],{"class":147},[127,145046,145047],{"class":133},"\u002F* 10px *\u002F\n",[127,145049,145050],{"class":129,"line":151},[127,145051,170],{"class":147},[127,145053,145054,145056],{"class":129,"line":167},[127,145055,52147],{"class":140},[127,145057,148],{"class":147},[127,145059,145060,145062,145064,145066,145068,145070],{"class":129,"line":415},[127,145061,71099],{"class":154},[127,145063,158],{"class":147},[127,145065,1121],{"class":154},[127,145067,145009],{"class":290},[127,145069,26608],{"class":147},[127,145071,145014],{"class":133},[127,145073,145074],{"class":129,"line":421},[127,145075,170],{"class":147},[127,145077,145078],{"class":129,"line":1766},[127,145079,136403],{"class":147},[127,145081,145082],{"class":129,"line":1856},[127,145083,144966],{"class":133},[127,145085,145086,145088],{"class":129,"line":1862},[127,145087,51175],{"class":140},[127,145089,148],{"class":147},[127,145091,145092,145094,145096,145098,145100,145102],{"class":129,"line":1874},[127,145093,282],{"class":154},[127,145095,158],{"class":147},[127,145097,144981],{"class":154},[127,145099,1003],{"class":290},[127,145101,130805],{"class":147},[127,145103,144988],{"class":133},[127,145105,145106],{"class":129,"line":2155},[127,145107,170],{"class":147},[127,145109,145110,145112],{"class":129,"line":2160},[127,145111,130790],{"class":143},[127,145113,148],{"class":147},[127,145115,145116,145118,145120,145122,145124,145126],{"class":129,"line":2166},[127,145117,71099],{"class":154},[127,145119,158],{"class":147},[127,145121,1121],{"class":154},[127,145123,145009],{"class":290},[127,145125,130805],{"class":147},[127,145127,145014],{"class":133},[127,145129,145130],{"class":129,"line":2171},[127,145131,170],{"class":147},[19,145133,145134,145135,145138],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[533,145136,145137],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[117,145140,145143],{"className":145141,"code":145142,"language":5729},[5727],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[124,145144,145142],{"__ignoreMap":122},[19,145146,145147],{},"less保存时会自动变成.css文件",[19,145149,145150],{},"好好搞懂上述代码写法",[62,145152,145154],{"id":145153},"_2132-样式导入样式","21.3.2 样式导入样式",[23,145156],{"style":25,"src":145157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[62,145159,145161],{"id":145160},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[632,145163,145164],{},[635,145165,145166],{},"准备工作",[23,145168],{"style":25,"src":145169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145171,145172,145173],{},"github地址：",[457,145174,145175],{"href":145175,"rel":145176},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24405],[19,145178,145179],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145181,145182,145183],{},"js文件引入到index.html中使用的是",[124,145184,145185],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[632,145187,145188],{"start":137},[635,145189,145190],{},"vscode插件",[23,145192],{"style":25,"src":145193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145195,145196],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145198,145199],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[23,145201],{"style":25,"src":145202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145204,145205],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[23,145207],{"style":25,"src":145208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145210,145211],{},"修改成75就可以，alt+z为快捷键",[19,145213,145214],{},"index.css：",[117,145216,145217],{"className":119,"code":144959,"language":121,"meta":122,"style":122},[124,145218,145219,145223,145229,145243,145247,145253,145267],{"__ignoreMap":122},[127,145220,145221],{"class":129,"line":130},[127,145222,144966],{"class":133},[127,145224,145225,145227],{"class":129,"line":137},[127,145226,51175],{"class":140},[127,145228,148],{"class":147},[127,145230,145231,145233,145235,145237,145239,145241],{"class":129,"line":151},[127,145232,282],{"class":154},[127,145234,158],{"class":147},[127,145236,144981],{"class":154},[127,145238,1003],{"class":290},[127,145240,130805],{"class":147},[127,145242,144988],{"class":133},[127,145244,145245],{"class":129,"line":167},[127,145246,170],{"class":147},[127,145248,145249,145251],{"class":129,"line":415},[127,145250,130790],{"class":143},[127,145252,148],{"class":147},[127,145254,145255,145257,145259,145261,145263,145265],{"class":129,"line":421},[127,145256,71099],{"class":154},[127,145258,158],{"class":147},[127,145260,1121],{"class":154},[127,145262,145009],{"class":290},[127,145264,130805],{"class":147},[127,145266,145014],{"class":133},[127,145268,145269],{"class":129,"line":1766},[127,145270,170],{"class":147},[19,145272,144956],{},[117,145274,145275],{"className":119,"code":268,"language":121,"meta":122,"style":122},[124,145276,145277,145283,145295],{"__ignoreMap":122},[127,145278,145279,145281],{"class":129,"line":130},[127,145280,275],{"class":140},[127,145282,148],{"class":147},[127,145284,145285,145287,145289,145291,145293],{"class":129,"line":137},[127,145286,282],{"class":154},[127,145288,158],{"class":147},[127,145290,287],{"class":154},[127,145292,291],{"class":290},[127,145294,164],{"class":147},[127,145296,145297],{"class":129,"line":151},[127,145298,170],{"class":147},[14,145300,145302],{"id":145301},"_214-响应式开发","21.4 响应式开发",[19,145304,145305],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[23,145307],{"style":25,"src":145308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145310,145311],{},"做法：",[1681,145313,145314,145317],{},[635,145315,145316],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[635,145318,145319],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[23,145321],{"style":25,"src":145322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145324,145325],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[62,145327,145329],{"id":145328},"_2141-简单代码示范","21.4.1 简单代码示范",[117,145331,145332],{"className":119,"code":144959,"language":121,"meta":122,"style":122},[124,145333,145334,145338,145344,145358,145362,145368,145382],{"__ignoreMap":122},[127,145335,145336],{"class":129,"line":130},[127,145337,144966],{"class":133},[127,145339,145340,145342],{"class":129,"line":137},[127,145341,51175],{"class":140},[127,145343,148],{"class":147},[127,145345,145346,145348,145350,145352,145354,145356],{"class":129,"line":151},[127,145347,282],{"class":154},[127,145349,158],{"class":147},[127,145351,144981],{"class":154},[127,145353,1003],{"class":290},[127,145355,130805],{"class":147},[127,145357,144988],{"class":133},[127,145359,145360],{"class":129,"line":167},[127,145361,170],{"class":147},[127,145363,145364,145366],{"class":129,"line":415},[127,145365,130790],{"class":143},[127,145367,148],{"class":147},[127,145369,145370,145372,145374,145376,145378,145380],{"class":129,"line":421},[127,145371,71099],{"class":154},[127,145373,158],{"class":147},[127,145375,1121],{"class":154},[127,145377,145009],{"class":290},[127,145379,130805],{"class":147},[127,145381,145014],{"class":133},[127,145383,145384],{"class":129,"line":1766},[127,145385,170],{"class":147},[19,145387,145388],{},"父盒子一般命名为container",[62,145390,145392],{"id":145391},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145394,145395,145396],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[30,145397,145398],{},"使得 Web 开发更加快捷",[1681,145400,145401],{},[635,145402,145403,145404],{},"官网：",[30,145405,145406],{},[457,145407,145408],{"href":145408,"rel":145409},"http:\u002F\u002Fgetbootstrap.com\u002F",[24405],[19,145411,145412],{},"可以直接去官网拿现成的东西",[632,145414,145415],{},[635,145416,145417],{},"Bootstrap的使用",[19,145419,145420],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145422,145423],{},"Bootstrap 使用四步曲：",[19,145425,145426,145429],{},[30,145427,145428],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[23,145431],{"style":25,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145434,145435],{},"打开Bootstrap官网，然后下载",[23,145437],{"style":25,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[23,145440],{"style":25,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145443,145444],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145446,145447],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145449,145450],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[23,145452],{"style":25,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[117,145455,145457],{"className":119,"code":145456,"language":121,"meta":122,"style":122},".center {\n  color: red;\n}\n",[124,145458,145459,145465,145475],{"__ignoreMap":122},[127,145460,145461,145463],{"class":129,"line":130},[127,145462,144],{"class":143},[127,145464,148],{"class":147},[127,145466,145467,145469,145471,145473],{"class":129,"line":137},[127,145468,400],{"class":154},[127,145470,158],{"class":147},[127,145472,405],{"class":154},[127,145474,164],{"class":147},[127,145476,145477],{"class":129,"line":151},[127,145478,170],{"class":147},[19,145480,145481,145484],{},[124,145482,145483],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[23,145486],{"style":25,"src":145487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[23,145489],{"style":25,"src":145490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[23,145492],{"style":25,"src":145493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145495,145496],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[23,145498],{"style":25,"src":145499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145501,145502],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[632,145504,145505],{"start":137},[635,145506,145507],{},"布局容器",[23,145509],{"style":25,"src":145510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145512,145513],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145515,145516],{},"container-fluid用于移动式布局比较方便",[632,145518,145519],{"start":151},[635,145520,145521,145522],{},"bootstrap ",[30,145523,145524],{},"栅格系统原理",[23,145526],{"style":25,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[632,145529,145530],{"start":167},[635,145531,145532],{},[30,145533,145534],{},"栅格选项参数",[23,145536],{"style":25,"src":145537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145539,145540],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145542,15175],{},[117,145544,145545],{"className":119,"code":145456,"language":121,"meta":122,"style":122},[124,145546,145547,145553,145563],{"__ignoreMap":122},[127,145548,145549,145551],{"class":129,"line":130},[127,145550,144],{"class":143},[127,145552,148],{"class":147},[127,145554,145555,145557,145559,145561],{"class":129,"line":137},[127,145556,400],{"class":154},[127,145558,158],{"class":147},[127,145560,405],{"class":154},[127,145562,164],{"class":147},[127,145564,145565],{"class":129,"line":151},[127,145566,170],{"class":147},[19,145568,135985],{},[23,145570],{"style":25,"src":145571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145573,145574],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145576,145577],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145579,145580],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145582,145583],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145585,145586],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145588,145589],{},"汇总展示说明：",[117,145591,145592],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,145593,145594,145598,145612,145616],{"__ignoreMap":122},[127,145595,145596],{"class":129,"line":130},[127,145597,131053],{"class":133},[127,145599,145600,145602,145604,145606,145608,145610],{"class":129,"line":137},[127,145601,1584],{"class":147},[127,145603,52147],{"class":140},[127,145605,54021],{"class":143},[127,145607,725],{"class":147},[127,145609,131066],{"class":781},[127,145611,51846],{"class":147},[127,145613,145614],{"class":129,"line":151},[127,145615,131073],{"class":147},[127,145617,145618,145620,145622],{"class":129,"line":167},[127,145619,52321],{"class":147},[127,145621,52147],{"class":140},[127,145623,51846],{"class":147},[23,145625],{"style":25,"src":145626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145628,145629],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[117,145631,145632],{"className":127689,"code":131046,"language":127691,"meta":122,"style":122},[124,145633,145634,145638,145652,145656],{"__ignoreMap":122},[127,145635,145636],{"class":129,"line":130},[127,145637,131053],{"class":133},[127,145639,145640,145642,145644,145646,145648,145650],{"class":129,"line":137},[127,145641,1584],{"class":147},[127,145643,52147],{"class":140},[127,145645,54021],{"class":143},[127,145647,725],{"class":147},[127,145649,131066],{"class":781},[127,145651,51846],{"class":147},[127,145653,145654],{"class":129,"line":151},[127,145655,131073],{"class":147},[127,145657,145658,145660,145662],{"class":129,"line":167},[127,145659,52321],{"class":147},[127,145661,52147],{"class":140},[127,145663,51846],{"class":147},[632,145665,145666],{"start":415},[635,145667,145668],{},[30,145669,145670],{},"列嵌套",[23,145672],{"style":25,"src":145673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145675,145676],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145678,145679],{},"没加row内部这样：",[23,145681],{"style":25,"src":145682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145684,145685],{},"加上row之后内部为：",[23,145687],{"style":25,"src":145688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[632,145690,145691],{"start":421},[635,145692,145693],{},[30,145694,145695],{},"列偏移",[23,145697],{"style":25,"src":145698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145700,145701],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145703,145704],{},"要加偏移量，即偏移份数",[19,145706,145707],{},"偏移的份数=12-两个盒子的份数",[632,145709,145710],{"start":1766},[635,145711,145712],{},[30,145713,145714],{},"列排序",[23,145716],{"style":25,"src":145717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145719,145720],{},"pull拉左；push推右",[632,145722,145723],{"start":1856},[635,145724,145725],{},[30,145726,145727],{},"响应式工具",[23,145729],{"style":25,"src":145730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145732,145733],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[62,145735,145737],{"id":145736},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145739,145740],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145742,145743],{},"ul {",[19,145745,145746],{},"list-style: none;",[19,145748,145749],{},"margin:0;",[19,145751,145752],{},"padding:0; }",[23,145754],{"style":25,"src":145755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[23,145757],{"style":25,"src":145758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145760,145761],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145763,69422],{},[117,145765,145766],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,145767,145768,145774,145784],{"__ignoreMap":122},[127,145769,145770,145772],{"class":129,"line":130},[127,145771,130790],{"class":143},[127,145773,148],{"class":147},[127,145775,145776,145778,145780,145782],{"class":129,"line":137},[127,145777,131422],{"class":154},[127,145779,158],{"class":147},[127,145781,24276],{"class":154},[127,145783,164],{"class":147},[127,145785,145786],{"class":129,"line":151},[127,145787,170],{"class":147},[19,145789,70986],{},[117,145791,145792],{"className":119,"code":139612,"language":121,"meta":122,"style":122},[124,145793,145794,145800,145810],{"__ignoreMap":122},[127,145795,145796,145798],{"class":129,"line":130},[127,145797,130790],{"class":143},[127,145799,148],{"class":147},[127,145801,145802,145804,145806,145808],{"class":129,"line":137},[127,145803,131422],{"class":154},[127,145805,158],{"class":147},[127,145807,24276],{"class":154},[127,145809,164],{"class":147},[127,145811,145812],{"class":129,"line":151},[127,145813,170],{"class":147},[14,145815,145817],{"id":145816},"_215-swiper-插件使用","21.5 swiper 插件使用",[1681,145819,145820,145823,145826],{},[635,145821,145822],{},"下载需要的css和js文件html页面中 引入相关文件",[635,145824,145825],{},"官网找到类似案例，复制html结构，css样式 js 语法",[635,145827,145828],{},"根据需求定制修改模块",[23,145830],{"style":25,"src":145831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145833,145834],{},"解压后将这两部分放到项目中",[23,145836],{"style":25,"src":145837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145839,145840],{},"这个插件可以帮助我们实现轮播图效果",[19,145842,145843],{},"用法：",[23,145845],{"style":25,"src":145846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145848,145849],{},"找到自己喜欢的",[23,145851],{"style":25,"src":145852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145854,145855],{},"右键，查看网页源代码",[23,145857],{"style":25,"src":145858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145860,145861],{},"复制人家的结构内容",[19,145863,145864],{},"然后去看API文档：",[23,145866],{"style":25,"src":145867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145869,145870],{},"可以看看如何修改样式",[19,145872,145873],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[575,145875,145876],{},"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":122,"searchDepth":137,"depth":137,"links":145878},[145879,145884,145888,145893,145898],{"id":144679,"depth":137,"text":144680,"children":145880},[145881,145882,145883],{"id":144683,"depth":151,"text":144684},{"id":144693,"depth":151,"text":144694},{"id":144788,"depth":151,"text":144789},{"id":144803,"depth":137,"text":144804,"children":145885},[145886,145887],{"id":144825,"depth":151,"text":144826},{"id":144841,"depth":151,"text":144842},{"id":144916,"depth":137,"text":144917,"children":145889},[145890,145891,145892],{"id":144929,"depth":151,"text":144930},{"id":145153,"depth":151,"text":145154},{"id":145160,"depth":151,"text":145161},{"id":145301,"depth":137,"text":145302,"children":145894},[145895,145896,145897],{"id":145328,"depth":151,"text":145329},{"id":145391,"depth":151,"text":145392},{"id":145736,"depth":151,"text":145737},{"id":145816,"depth":137,"text":145817},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144671,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145905,"title":145906,"body":145907,"description":603,"extension":604,"meta":146127,"navigation":606,"path":146128,"seo":146129,"stem":146130,"__hash__":146131},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145908,"toc":146123},[145909,145912,145916,145919,145934,145939,145942,145947,145982,145987,145999,146004,146017,146022,146039,146044,146064,146069,146087,146090,146093,146096,146099,146103,146106,146109,146112,146115,146118,146121],[10,145910,145906],{"id":145911},"_22-代码提交与新型相对单位",[14,145913,145915],{"id":145914},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145917,145918],{},"法1：",[632,145920,145921,145928,145931],{},[635,145922,145923,145924],{},"登录网站注册：",[457,145925,145926],{"href":145926,"rel":145927},"https:\u002F\u002Fgitee.com\u002F",[24405],[635,145929,145930],{},"码云创建新的仓库",[635,145932,145933],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1681,145935,145936],{},[635,145937,145938],{},"在网站根目录右键-- Git Bash Here",[23,145940],{"style":25,"src":145941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1681,145943,145944],{},[635,145945,145946],{},"如果是第一次利用git提交，请配置好全局选项",[117,145948,145950],{"className":117825,"code":145949,"language":117827,"meta":122,"style":122},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[124,145951,145952,145968],{"__ignoreMap":122},[127,145953,145954,145957,145959,145962,145965],{"class":129,"line":130},[127,145955,145956],{"class":143},"git",[127,145958,120248],{"class":781},[127,145960,145961],{"class":154}," --global",[127,145963,145964],{"class":781}," user.name",[127,145966,145967],{"class":781}," \"你的名字\"\n",[127,145969,145970,145972,145974,145976,145979],{"class":129,"line":137},[127,145971,145956],{"class":143},[127,145973,120248],{"class":781},[127,145975,145961],{"class":154},[127,145977,145978],{"class":781}," user.email",[127,145980,145981],{"class":781}," \"你的邮箱\"\n",[1681,145983,145984],{},[635,145985,145986],{},"初始化仓库",[117,145988,145990],{"className":117825,"code":145989,"language":117827,"meta":122,"style":122},"git init\n",[124,145991,145992],{"__ignoreMap":122},[127,145993,145994,145996],{"class":129,"line":130},[127,145995,145956],{"class":143},[127,145997,145998],{"class":781}," init\n",[1681,146000,146001],{},[635,146002,146003],{},"把本地文件放到暂存区",[117,146005,146007],{"className":117825,"code":146006,"language":117827,"meta":122,"style":122},"git add .\n",[124,146008,146009],{"__ignoreMap":122},[127,146010,146011,146013,146015],{"class":129,"line":130},[127,146012,145956],{"class":143},[127,146014,5751],{"class":781},[127,146016,29281],{"class":781},[1681,146018,146019],{},[635,146020,146021],{},"把本地文件放到本地仓库里面",[117,146023,146025],{"className":117825,"code":146024,"language":117827,"meta":122,"style":122},"git commit -m \"first commit\"\n",[124,146026,146027],{"__ignoreMap":122},[127,146028,146029,146031,146034,146036],{"class":129,"line":130},[127,146030,145956],{"class":143},[127,146032,146033],{"class":781}," commit",[127,146035,101411],{"class":154},[127,146037,146038],{"class":781}," \"first commit\"\n",[1681,146040,146041],{},[635,146042,146043],{},"链接远程仓库",[117,146045,146047],{"className":117825,"code":146046,"language":117827,"meta":122,"style":122},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[124,146048,146049],{"__ignoreMap":122},[127,146050,146051,146053,146056,146058,146061],{"class":129,"line":130},[127,146052,145956],{"class":143},[127,146054,146055],{"class":781}," remote",[127,146057,5751],{"class":781},[127,146059,146060],{"class":781}," origin",[127,146062,146063],{"class":781}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1681,146065,146066],{},[635,146067,146068],{},"把本地仓库的文件推送到远程仓库 push",[117,146070,146072],{"className":117825,"code":146071,"language":117827,"meta":122,"style":122},"git push -u origin master\n",[124,146073,146074],{"__ignoreMap":122},[127,146075,146076,146078,146080,146082,146084],{"class":129,"line":130},[127,146077,145956],{"class":143},[127,146079,29556],{"class":781},[127,146081,28830],{"class":154},[127,146083,146060],{"class":781},[127,146085,146086],{"class":781}," master\n",[23,146088],{"style":25,"src":146089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146091,146092],{},"上方方法暂未实现，后边学完git后在整",[19,146094,146095],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[23,146097],{"style":25,"src":146098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146100,146102],{"id":146101},"_222-新型相对单位","22.2 新型相对单位",[23,146104],{"style":25,"src":146105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[23,146107],{"style":25,"src":146108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146110,146111],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146113,146114],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[23,146116],{"style":25,"src":146117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146119,146120],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[575,146122,24498],{},{"title":122,"searchDepth":137,"depth":137,"links":146124},[146125,146126],{"id":145914,"depth":137,"text":145915},{"id":146101,"depth":137,"text":146102},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145906,"description":603},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146133,"title":146134,"body":146135,"description":146139,"extension":604,"meta":146140,"navigation":606,"path":146141,"seo":146142,"stem":146143,"__hash__":146144},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146136,"toc":146137},[],{"title":122,"searchDepth":137,"depth":137,"links":146138},[],"自己正经开始学编程的第一门语言！",{"category":93368},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146134,"description":146139},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146146,"title":146147,"body":146148,"description":603,"extension":604,"meta":147295,"navigation":606,"path":147296,"seo":147297,"stem":147298,"__hash__":147299},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146149,"toc":147271},[146150,146153,146157,146160,146163,146188,146191,146197,146201,146204,146231,146234,146274,146277,146289,146292,146298,146302,146306,146333,146350,146357,146361,146364,146390,146393,146397,146400,146440,146443,146460,146466,146470,146475,146519,146522,146540,146543,146611,146615,146622,146625,146640,146643,146652,146655,146666,146669,146678,146681,146698,146701,146716,146720,146724,146727,146729,146749,146753,146756,146759,146770,146773,146779,146783,146789,146816,146819,146831,146834,146845,146848,146854,146858,146864,146914,146917,146959,146962,146995,146998,147032,147036,147039,147059,147062,147098,147101,147114,147118,147122,147128,147131,147144,147148,147151,147157,147160,147164,147167,147170,147219,147223,147239,147245,147252,147258,147268],[10,146151,146147],{"id":146152},"_1-python环境与第一个程序",[14,146154,146156],{"id":146155},"_11-什么是python","1.1 什么是Python",[19,146158,146159],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146161,146162],{},"理解 Python 时抓住三个关键词：",[632,146164,146165,146168,146171],{},[635,146166,146167],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[635,146169,146170],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[635,146172,146173,146174,888,146177,888,146180,888,146183,888,146185,28925],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[124,146175,146176],{},"os",[124,146178,146179],{},"sys",[124,146181,146182],{},"json",[124,146184,58393],{},[124,146186,146187],{},"datetime",[19,146189,146190],{},"Python 程序的运行链路：",[117,146192,146195],{"className":146193,"code":146194,"language":5729,"meta":122},[5727],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[124,146196,146194],{"__ignoreMap":122},[14,146198,146200],{"id":146199},"_12-python解释器","1.2 Python解释器",[19,146202,146203],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[117,146205,146207],{"className":24362,"code":146206,"language":24364,"meta":122,"style":122},"python --version\npython3 --version\npython\npython3\n",[124,146208,146209,146215,146221,146226],{"__ignoreMap":122},[127,146210,146211,146213],{"class":129,"line":130},[127,146212,30920],{"class":143},[127,146214,26834],{"class":154},[127,146216,146217,146219],{"class":129,"line":137},[127,146218,101408],{"class":143},[127,146220,26834],{"class":154},[127,146222,146223],{"class":129,"line":151},[127,146224,146225],{"class":143},"python\n",[127,146227,146228],{"class":129,"line":167},[127,146229,146230],{"class":143},"python3\n",[19,146232,146233],{},"进入交互模式后，可以直接输入表达式：",[117,146235,146237],{"className":30918,"code":146236,"language":30920,"meta":122,"style":122},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[124,146238,146239,146250,146255,146269],{"__ignoreMap":122},[127,146240,146241,146244,146246,146248],{"class":129,"line":130},[127,146242,146243],{"class":290},">>>",[127,146245,25659],{"class":154},[127,146247,46106],{"class":290},[127,146249,48263],{"class":154},[127,146251,146252],{"class":129,"line":137},[127,146253,146254],{"class":154},"3\n",[127,146256,146257,146259,146262,146264,146267],{"class":129,"line":151},[127,146258,146243],{"class":290},[127,146260,146261],{"class":154}," print",[127,146263,681],{"class":147},[127,146265,146266],{"class":781},"\"hello python\"",[127,146268,687],{"class":147},[127,146270,146271],{"class":129,"line":167},[127,146272,146273],{"class":147},"hello python\n",[19,146275,146276],{},"退出交互模式：",[117,146278,146280],{"className":30918,"code":146279,"language":30920,"meta":122,"style":122},"exit()\n",[124,146281,146282],{"__ignoreMap":122},[127,146283,146284,146287],{"class":129,"line":130},[127,146285,146286],{"class":154},"exit",[127,146288,2518],{"class":147},[19,146290,146291],{},"或使用快捷键：",[117,146293,146296],{"className":146294,"code":146295,"language":5729,"meta":122},[5727],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[124,146297,146295],{"__ignoreMap":122},[14,146299,146301],{"id":146300},"_13-安装python","1.3 安装Python",[62,146303,146305],{"id":146304},"_131-windows安装","1.3.1 Windows安装",[632,146307,146308,146315,146318,146324,146330],{},[635,146309,146310,146311],{},"打开 Python 官网：",[457,146312,146313],{"href":146313,"rel":146314},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24405],[635,146316,146317],{},"下载 Windows Installer。",[635,146319,146320,146321,28925],{},"安装时勾选 ",[124,146322,146323],{},"Add Python to PATH",[635,146325,146326,146327,28925],{},"点击 ",[124,146328,146329],{},"Install Now",[635,146331,146332],{},"安装完成后打开命令提示符验证：",[117,146334,146336],{"className":24362,"code":146335,"language":24364,"meta":122,"style":122},"python --version\npip --version\n",[124,146337,146338,146344],{"__ignoreMap":122},[127,146339,146340,146342],{"class":129,"line":130},[127,146341,30920],{"class":143},[127,146343,26834],{"class":154},[127,146345,146346,146348],{"class":129,"line":137},[127,146347,24371],{"class":143},[127,146349,26834],{"class":154},[19,146351,146352,146353,146356],{},"如果提示 ",[124,146354,146355],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[62,146358,146360],{"id":146359},"_132-macos安装","1.3.2 macOS安装",[19,146362,146363],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[117,146365,146367],{"className":24362,"code":146366,"language":24364,"meta":122,"style":122},"brew install python\npython3 --version\npip3 --version\n",[124,146368,146369,146378,146384],{"__ignoreMap":122},[127,146370,146371,146374,146376],{"class":129,"line":130},[127,146372,146373],{"class":143},"brew",[127,146375,24374],{"class":781},[127,146377,124847],{"class":781},[127,146379,146380,146382],{"class":129,"line":137},[127,146381,101408],{"class":143},[127,146383,26834],{"class":154},[127,146385,146386,146388],{"class":129,"line":151},[127,146387,120229],{"class":143},[127,146389,26834],{"class":154},[19,146391,146392],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[62,146394,146396],{"id":146395},"_133-linux安装","1.3.3 Linux安装",[19,146398,146399],{},"Ubuntu\u002FDebian：",[117,146401,146403],{"className":24362,"code":146402,"language":24364,"meta":122,"style":122},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[124,146404,146405,146413,146428,146434],{"__ignoreMap":122},[127,146406,146407,146409,146411],{"class":129,"line":130},[127,146408,25117],{"class":143},[127,146410,117846],{"class":781},[127,146412,26783],{"class":781},[127,146414,146415,146417,146419,146421,146423,146425],{"class":129,"line":137},[127,146416,25117],{"class":143},[127,146418,117846],{"class":781},[127,146420,24374],{"class":781},[127,146422,104932],{"class":781},[127,146424,101327],{"class":781},[127,146426,146427],{"class":781}," python3-venv\n",[127,146429,146430,146432],{"class":129,"line":151},[127,146431,101408],{"class":143},[127,146433,26834],{"class":154},[127,146435,146436,146438],{"class":129,"line":167},[127,146437,120229],{"class":143},[127,146439,26834],{"class":154},[19,146441,146442],{},"Fedora：",[117,146444,146446],{"className":24362,"code":146445,"language":24364,"meta":122,"style":122},"sudo dnf install python3 python3-pip\n",[124,146447,146448],{"__ignoreMap":122},[127,146449,146450,146452,146454,146456,146458],{"class":129,"line":130},[127,146451,25117],{"class":143},[127,146453,26856],{"class":781},[127,146455,24374],{"class":781},[127,146457,104932],{"class":781},[127,146459,120294],{"class":781},[19,146461,146462,146463,146465],{},"Linux 上通常使用 ",[124,146464,101408],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146467,146469],{"id":146468},"_14-pip包管理器","1.4 pip包管理器",[19,146471,146472,146474],{},[124,146473,24371],{}," 用来安装第三方库。",[117,146476,146478],{"className":24362,"code":146477,"language":24364,"meta":122,"style":122},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[124,146479,146480,146489,146498,146506,146512],{"__ignoreMap":122},[127,146481,146482,146484,146486],{"class":129,"line":130},[127,146483,24371],{"class":143},[127,146485,24374],{"class":781},[127,146487,146488],{"class":781}," requests\n",[127,146490,146491,146493,146496],{"class":129,"line":137},[127,146492,24371],{"class":143},[127,146494,146495],{"class":781}," uninstall",[127,146497,146488],{"class":781},[127,146499,146500,146502,146504],{"class":129,"line":151},[127,146501,24371],{"class":143},[127,146503,118103],{"class":781},[127,146505,146488],{"class":781},[127,146507,146508,146510],{"class":129,"line":167},[127,146509,24371],{"class":143},[127,146511,119484],{"class":781},[127,146513,146514,146516],{"class":129,"line":415},[127,146515,24371],{"class":143},[127,146517,146518],{"class":781}," freeze\n",[19,146520,146521],{},"国内网络较慢时可以临时使用镜像：",[117,146523,146525],{"className":24362,"code":146524,"language":24364,"meta":122,"style":122},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[124,146526,146527],{"__ignoreMap":122},[127,146528,146529,146531,146533,146536,146538],{"class":129,"line":130},[127,146530,24371],{"class":143},[127,146532,24374],{"class":781},[127,146534,146535],{"class":781}," requests",[127,146537,26971],{"class":154},[127,146539,120257],{"class":781},[19,146541,146542],{},"常见第三方库：",[814,146544,146545,146554],{},[817,146546,146547],{},[820,146548,146549,146552],{},[823,146550,146551],{},"库",[823,146553,103225],{},[860,146555,146556,146564,146571,146579,146587,146595,146603],{},[820,146557,146558,146561],{},[865,146559,146560],{},"requests",[865,146562,146563],{},"网络请求",[820,146565,146566,146568],{},[865,146567,101155],{},[865,146569,146570],{},"数值计算",[820,146572,146573,146576],{},[865,146574,146575],{},"pandas",[865,146577,146578],{},"表格数据处理",[820,146580,146581,146584],{},[865,146582,146583],{},"matplotlib",[865,146585,146586],{},"绘图",[820,146588,146589,146592],{},[865,146590,146591],{},"pyecharts",[865,146593,146594],{},"ECharts 图表",[820,146596,146597,146600],{},[865,146598,146599],{},"flask",[865,146601,146602],{},"Web 后端",[820,146604,146605,146608],{},[865,146606,146607],{},"pytest",[865,146609,146610],{},"自动化测试",[14,146612,146614],{"id":146613},"_15-虚拟环境","1.5 虚拟环境",[19,146616,146617,146618,146621],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[124,146619,146620],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146623,146624],{},"创建虚拟环境：",[117,146626,146628],{"className":24362,"code":146627,"language":24364,"meta":122,"style":122},"python -m venv .venv\n",[124,146629,146630],{"__ignoreMap":122},[127,146631,146632,146634,146636,146638],{"class":129,"line":130},[127,146633,30920],{"class":143},[127,146635,101411],{"class":154},[127,146637,101414],{"class":781},[127,146639,101417],{"class":781},[19,146641,146642],{},"Windows 激活：",[117,146644,146646],{"className":24362,"code":146645,"language":24364,"meta":122,"style":122},".venv\\Scripts\\activate\n",[124,146647,146648],{"__ignoreMap":122},[127,146649,146650],{"class":129,"line":130},[127,146651,146645],{"class":143},[19,146653,146654],{},"macOS\u002FLinux 激活：",[117,146656,146658],{"className":24362,"code":146657,"language":24364,"meta":122,"style":122},"source .venv\u002Fbin\u002Factivate\n",[124,146659,146660],{"__ignoreMap":122},[127,146661,146662,146664],{"class":129,"line":130},[127,146663,101422],{"class":154},[127,146665,101425],{"class":781},[19,146667,146668],{},"退出虚拟环境：",[117,146670,146672],{"className":24362,"code":146671,"language":24364,"meta":122,"style":122},"deactivate\n",[124,146673,146674],{"__ignoreMap":122},[127,146675,146676],{"class":129,"line":130},[127,146677,146671],{"class":143},[19,146679,146680],{},"保存依赖：",[117,146682,146684],{"className":24362,"code":146683,"language":24364,"meta":122,"style":122},"pip freeze > requirements.txt\n",[124,146685,146686],{"__ignoreMap":122},[127,146687,146688,146690,146693,146695],{"class":129,"line":130},[127,146689,24371],{"class":143},[127,146691,146692],{"class":781}," freeze",[127,146694,26763],{"class":290},[127,146696,146697],{"class":781}," requirements.txt\n",[19,146699,146700],{},"安装依赖：",[117,146702,146704],{"className":24362,"code":146703,"language":24364,"meta":122,"style":122},"pip install -r requirements.txt\n",[124,146705,146706],{"__ignoreMap":122},[127,146707,146708,146710,146712,146714],{"class":129,"line":130},[127,146709,24371],{"class":143},[127,146711,24374],{"class":781},[127,146713,120168],{"class":154},[127,146715,146697],{"class":781},[14,146717,146719],{"id":146718},"_16-开发工具","1.6 开发工具",[62,146721,146723],{"id":146722},"_161-pycharm","1.6.1 PyCharm",[19,146725,146726],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146728,122591],{},[632,146730,146731,146734,146737,146743,146746],{},[635,146732,146733],{},"New Project：创建项目。",[635,146735,146736],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[635,146738,146739,146740,126512],{},"New Python File：创建 ",[124,146741,146742],{},".py",[635,146744,146745],{},"Run：运行当前文件。",[635,146747,146748],{},"Debug：断点调试。",[62,146750,146752],{"id":146751},"_162-vs-code","1.6.2 VS Code",[19,146754,146755],{},"VS Code 轻量，适合后续多语言开发。",[19,146757,146758],{},"建议安装插件：",[632,146760,146761,146764,146767],{},[635,146762,146763],{},"Python。",[635,146765,146766],{},"Pylance。",[635,146768,146769],{},"Jupyter。",[19,146771,146772],{},"选择解释器：",[117,146774,146777],{"className":146775,"code":146776,"language":5729,"meta":122},[5727],"Ctrl + Shift + P -> Python: Select Interpreter\n",[124,146778,146776],{"__ignoreMap":122},[14,146780,146782],{"id":146781},"_17-第一个python程序","1.7 第一个Python程序",[19,146784,146785,146786,25159],{},"创建文件 ",[124,146787,146788],{},"hello.py",[117,146790,146792],{"className":30918,"code":146791,"language":30920,"meta":122,"style":122},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[124,146793,146794,146805],{"__ignoreMap":122},[127,146795,146796,146798,146800,146803],{"class":129,"line":130},[127,146797,30955],{"class":154},[127,146799,681],{"class":147},[127,146801,146802],{"class":781},"\"Hello World\"",[127,146804,687],{"class":147},[127,146806,146807,146809,146811,146814],{"class":129,"line":137},[127,146808,30955],{"class":154},[127,146810,681],{"class":147},[127,146812,146813],{"class":781},"\"你好，Python\"",[127,146815,687],{"class":147},[19,146817,146818],{},"在终端运行：",[117,146820,146822],{"className":24362,"code":146821,"language":24364,"meta":122,"style":122},"python hello.py\n",[124,146823,146824],{"__ignoreMap":122},[127,146825,146826,146828],{"class":129,"line":130},[127,146827,30920],{"class":143},[127,146829,146830],{"class":781}," hello.py\n",[19,146832,146833],{},"或：",[117,146835,146837],{"className":24362,"code":146836,"language":24364,"meta":122,"style":122},"python3 hello.py\n",[124,146838,146839],{"__ignoreMap":122},[127,146840,146841,146843],{"class":129,"line":130},[127,146842,101408],{"class":143},[127,146844,146830],{"class":781},[19,146846,146847],{},"输出：",[117,146849,146852],{"className":146850,"code":146851,"language":5729,"meta":122},[5727],"Hello World\n你好，Python\n",[124,146853,146851],{"__ignoreMap":122},[14,146855,146857],{"id":146856},"_18-print函数","1.8 print函数",[19,146859,146860,146863],{},[124,146861,146862],{},"print()"," 用来输出内容。",[117,146865,146867],{"className":30918,"code":146866,"language":30920,"meta":122,"style":122},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[124,146868,146869,146879,146889,146899],{"__ignoreMap":122},[127,146870,146871,146873,146875,146877],{"class":129,"line":130},[127,146872,30955],{"class":154},[127,146874,681],{"class":147},[127,146876,6386],{"class":781},[127,146878,687],{"class":147},[127,146880,146881,146883,146885,146887],{"class":129,"line":137},[127,146882,30955],{"class":154},[127,146884,681],{"class":147},[127,146886,986],{"class":154},[127,146888,687],{"class":147},[127,146890,146891,146893,146895,146897],{"class":129,"line":151},[127,146892,30955],{"class":154},[127,146894,681],{"class":147},[127,146896,728],{"class":154},[127,146898,687],{"class":147},[127,146900,146901,146903,146905,146908,146910,146912],{"class":129,"line":167},[127,146902,30955],{"class":154},[127,146904,681],{"class":147},[127,146906,146907],{"class":781},"\"年龄:\"",[127,146909,12977],{"class":147},[127,146911,1324],{"class":154},[127,146913,687],{"class":147},[19,146915,146916],{},"多个内容用逗号隔开，默认中间加空格：",[117,146918,146920],{"className":30918,"code":146919,"language":30920,"meta":122,"style":122},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[124,146921,146922,146932,146942],{"__ignoreMap":122},[127,146923,146924,146927,146929],{"class":129,"line":130},[127,146925,146926],{"class":147},"name ",[127,146928,725],{"class":290},[127,146930,146931],{"class":781}," \"张三\"\n",[127,146933,146934,146937,146939],{"class":129,"line":137},[127,146935,146936],{"class":147},"age ",[127,146938,725],{"class":290},[127,146940,146941],{"class":154}," 18\n",[127,146943,146944,146946,146948,146951,146954,146956],{"class":129,"line":151},[127,146945,30955],{"class":154},[127,146947,681],{"class":147},[127,146949,146950],{"class":781},"\"姓名:\"",[127,146952,146953],{"class":147},", name, ",[127,146955,146907],{"class":781},[127,146957,146958],{"class":147},", age)\n",[19,146960,146961],{},"修改分隔符：",[117,146963,146965],{"className":30918,"code":146964,"language":30920,"meta":122,"style":122},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[124,146966,146967],{"__ignoreMap":122},[127,146968,146969,146971,146973,146976,146978,146980,146982,146984,146986,146989,146991,146993],{"class":129,"line":130},[127,146970,30955],{"class":154},[127,146972,681],{"class":147},[127,146974,146975],{"class":781},"\"2024\"",[127,146977,12977],{"class":147},[127,146979,54851],{"class":781},[127,146981,12977],{"class":147},[127,146983,54851],{"class":781},[127,146985,12977],{"class":147},[127,146987,146988],{"class":5758},"sep",[127,146990,725],{"class":290},[127,146992,33023],{"class":781},[127,146994,687],{"class":147},[19,146996,146997],{},"修改结尾符：",[117,146999,147001],{"className":30918,"code":147000,"language":30920,"meta":122,"style":122},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[124,147002,147003,147021],{"__ignoreMap":122},[127,147004,147005,147007,147009,147011,147013,147015,147017,147019],{"class":129,"line":130},[127,147006,30955],{"class":154},[127,147008,681],{"class":147},[127,147010,6386],{"class":781},[127,147012,12977],{"class":147},[127,147014,46341],{"class":5758},[127,147016,725],{"class":290},[127,147018,4901],{"class":781},[127,147020,687],{"class":147},[127,147022,147023,147025,147027,147030],{"class":129,"line":137},[127,147024,30955],{"class":154},[127,147026,681],{"class":147},[127,147028,147029],{"class":781},"\"python\"",[127,147031,687],{"class":147},[14,147033,147035],{"id":147034},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147037,147038],{},"交互运行适合临时验证：",[117,147040,147042],{"className":30918,"code":147041,"language":30920,"meta":122,"style":122},">>> 10 * 3\n30\n",[124,147043,147044,147054],{"__ignoreMap":122},[127,147045,147046,147048,147050,147052],{"class":129,"line":130},[127,147047,146243],{"class":290},[127,147049,2580],{"class":154},[127,147051,7060],{"class":290},[127,147053,120565],{"class":154},[127,147055,147056],{"class":129,"line":137},[127,147057,147058],{"class":154},"30\n",[19,147060,147061],{},"脚本运行适合保存程序：",[117,147063,147065],{"className":30918,"code":147064,"language":30920,"meta":122,"style":122},"price = 8\ncount = 5\nprint(price * count)\n",[124,147066,147067,147077,147086],{"__ignoreMap":122},[127,147068,147069,147072,147074],{"class":129,"line":130},[127,147070,147071],{"class":147},"price ",[127,147073,725],{"class":290},[127,147075,147076],{"class":154}," 8\n",[127,147078,147079,147082,147084],{"class":129,"line":137},[127,147080,147081],{"class":147},"count ",[127,147083,725],{"class":290},[127,147085,54962],{"class":154},[127,147087,147088,147090,147093,147095],{"class":129,"line":151},[127,147089,30955],{"class":154},[127,147091,147092],{"class":147},"(price ",[127,147094,1130],{"class":290},[127,147096,147097],{"class":147}," count)\n",[19,147099,147100],{},"实际学习中推荐：",[632,147102,147103,147106,147111],{},[635,147104,147105],{},"临时试一个语法，用交互模式。",[635,147107,147108,147109,126512],{},"写完整练习，用 ",[124,147110,146742],{},[635,147112,147113],{},"写项目，用独立目录和虚拟环境。",[14,147115,147117],{"id":147116},"_110-常见错误","1.10 常见错误",[62,147119,147121],{"id":147120},"_1101-命令找不到","1.10.1 命令找不到",[117,147123,147126],{"className":147124,"code":147125,"language":5729,"meta":122},[5727],"python: command not found\n",[124,147127,147125],{"__ignoreMap":122},[19,147129,147130],{},"原因：",[632,147132,147133,147136,147139],{},[635,147134,147135],{},"没安装 Python。",[635,147137,147138],{},"PATH 没配置。",[635,147140,147141,147142,28925],{},"Linux\u002FmacOS 应该使用 ",[124,147143,101408],{},[62,147145,147147],{"id":147146},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147149,147150],{},"不要把文件命名为：",[117,147152,147155],{"className":147153,"code":147154,"language":5729,"meta":122},[5727],"random.py\njson.py\ntime.py\nrequests.py\n",[124,147156,147154],{"__ignoreMap":122},[19,147158,147159],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[62,147161,147163],{"id":147162},"_1103-中文乱码","1.10.3 中文乱码",[19,147165,147166],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147168,147169],{},"如果读写文件出现乱码，要明确指定编码：",[117,147171,147173],{"className":30918,"code":147172,"language":30920,"meta":122,"style":122},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[124,147174,147175,147209],{"__ignoreMap":122},[127,147176,147177,147179,147182,147184,147187,147189,147192,147194,147197,147199,147202,147204,147206],{"class":129,"line":130},[127,147178,108362],{"class":290},[127,147180,147181],{"class":154}," open",[127,147183,681],{"class":147},[127,147185,147186],{"class":781},"\"data.txt\"",[127,147188,12977],{"class":147},[127,147190,147191],{"class":781},"\"r\"",[127,147193,12977],{"class":147},[127,147195,147196],{"class":5758},"encoding",[127,147198,725],{"class":290},[127,147200,147201],{"class":781},"\"utf-8\"",[127,147203,14256],{"class":147},[127,147205,31923],{"class":290},[127,147207,147208],{"class":147}," f:\n",[127,147210,147211,147214,147216],{"class":129,"line":137},[127,147212,147213],{"class":147},"    content ",[127,147215,725],{"class":290},[127,147217,147218],{"class":147}," f.read()\n",[14,147220,147222],{"id":147221},"_111-本章练习","1.11 本章练习",[632,147224,147225,147228,147234],{},[635,147226,147227],{},"安装 Python，并在终端输出版本号。",[635,147229,147230,147231,147233],{},"新建 ",[124,147232,146788],{},"，输出自己的姓名、年龄、学习目标。",[635,147235,104895,147236,147238],{},[124,147237,146862],{}," 输出下面格式：",[117,147240,147243],{"className":147241,"code":147242,"language":5729,"meta":122},[5727],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[124,147244,147242],{"__ignoreMap":122},[632,147246,147247],{"start":167},[635,147248,104895,147249,147251],{},[124,147250,146988],{}," 输出日期：",[117,147253,147256],{"className":147254,"code":147255,"language":5729,"meta":122},[5727],"2024-10-10\n",[124,147257,147255],{"__ignoreMap":122},[632,147259,147260],{"start":415},[635,147261,104895,147262,147264,147265,147267],{},[124,147263,46341],{}," 让两次 ",[124,147266,146862],{}," 输出在同一行。",[575,147269,147270],{},"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":122,"searchDepth":137,"depth":137,"links":147272},[147273,147274,147275,147280,147281,147282,147286,147287,147288,147289,147294],{"id":146155,"depth":137,"text":146156},{"id":146199,"depth":137,"text":146200},{"id":146300,"depth":137,"text":146301,"children":147276},[147277,147278,147279],{"id":146304,"depth":151,"text":146305},{"id":146359,"depth":151,"text":146360},{"id":146395,"depth":151,"text":146396},{"id":146468,"depth":137,"text":146469},{"id":146613,"depth":137,"text":146614},{"id":146718,"depth":137,"text":146719,"children":147283},[147284,147285],{"id":146722,"depth":151,"text":146723},{"id":146751,"depth":151,"text":146752},{"id":146781,"depth":137,"text":146782},{"id":146856,"depth":137,"text":146857},{"id":147034,"depth":137,"text":147035},{"id":147116,"depth":137,"text":147117,"children":147290},[147291,147292,147293],{"id":147120,"depth":151,"text":147121},{"id":147146,"depth":151,"text":147147},{"id":147162,"depth":151,"text":147163},{"id":147221,"depth":137,"text":147222},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146147,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147301,"title":147302,"body":147303,"description":603,"extension":604,"meta":149707,"navigation":606,"path":149708,"seo":149709,"stem":149710,"__hash__":149711},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147304,"toc":149692},[147305,147308,147312,147315,147318,147335,147338,147380,147383,147387,147390,147393,147430,147433,147467,147470,147562,147566,147580,147583,147610,147613,147617,147720,147727,147730,147747,147751,147758,147947,147950,148023,148027,148030,148114,148117,148149,148153,148357,148360,148364,148370,148472,148475,148731,148735,148738,148741,148755,148757,148943,148947,149309,149315,149319,149322,149446,149449,149628,149631,149635,149668,149672,149689],[10,147306,147302],{"id":147307},"_10-json与pyecharts折线图",[14,147309,147311],{"id":147310},"_101-数据可视化","10.1 数据可视化",[19,147313,147314],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147316,147317],{},"常见图表：",[632,147319,147320,147323,147326,147329,147332],{},[635,147321,147322],{},"折线图：看趋势。",[635,147324,147325],{},"柱状图：看分类对比。",[635,147327,147328],{},"饼图：看占比。",[635,147330,147331],{},"地图：看地域分布。",[635,147333,147334],{},"散点图：看两个变量之间的关系。",[19,147336,147337],{},"Python 可视化常用库：",[814,147339,147340,147348],{},[817,147341,147342],{},[820,147343,147344,147346],{},[823,147345,146551],{},[823,147347,24280],{},[860,147349,147350,147357,147365,147372],{},[820,147351,147352,147354],{},[865,147353,146583],{},[865,147355,147356],{},"基础、经典、可定制",[820,147358,147359,147362],{},[865,147360,147361],{},"seaborn",[865,147363,147364],{},"统计图表更美观",[820,147366,147367,147369],{},[865,147368,146591],{},[865,147370,147371],{},"生成交互式网页图表",[820,147373,147374,147377],{},[865,147375,147376],{},"plotly",[865,147378,147379],{},"交互图表能力强",[19,147381,147382],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147384,147386],{"id":147385},"_102-json回顾","10.2 JSON回顾",[19,147388,147389],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147391,147392],{},"Python 字典：",[117,147394,147396],{"className":30918,"code":147395,"language":30920,"meta":122,"style":122},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[124,147397,147398,147406,147417,147426],{"__ignoreMap":122},[127,147399,147400,147402,147404],{"class":129,"line":130},[127,147401,102187],{"class":147},[127,147403,725],{"class":290},[127,147405,148],{"class":147},[127,147407,147408,147411,147413,147415],{"class":129,"line":137},[127,147409,147410],{"class":781},"    \"name\"",[127,147412,158],{"class":147},[127,147414,69802],{"class":781},[127,147416,32006],{"class":147},[127,147418,147419,147422,147424],{"class":129,"line":151},[127,147420,147421],{"class":781},"    \"value\"",[127,147423,158],{"class":147},[127,147425,97987],{"class":154},[127,147427,147428],{"class":129,"line":167},[127,147429,170],{"class":147},[19,147431,147432],{},"JSON 字符串：",[117,147434,147437],{"className":147435,"code":147436,"language":146182,"meta":122,"style":122},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[124,147438,147439,147443,147454,147463],{"__ignoreMap":122},[127,147440,147441],{"class":129,"line":130},[127,147442,2090],{"class":147},[127,147444,147445,147448,147450,147452],{"class":129,"line":137},[127,147446,147447],{"class":154},"  \"name\"",[127,147449,158],{"class":147},[127,147451,69802],{"class":781},[127,147453,32006],{"class":147},[127,147455,147456,147459,147461],{"class":129,"line":151},[127,147457,147458],{"class":154},"  \"value\"",[127,147460,158],{"class":147},[127,147462,97987],{"class":154},[127,147464,147465],{"class":129,"line":167},[127,147466,170],{"class":147},[19,147468,147469],{},"Python 与 JSON 的转换：",[117,147471,147473],{"className":30918,"code":147472,"language":30920,"meta":122,"style":122},"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",[124,147474,147475,147482,147486,147511,147515,147534,147541,147545,147555],{"__ignoreMap":122},[127,147476,147477,147479],{"class":129,"line":130},[127,147478,30932],{"class":290},[127,147480,147481],{"class":147}," json\n",[127,147483,147484],{"class":129,"line":137},[127,147485,2942],{"emptyLinePlaceholder":606},[127,147487,147488,147490,147492,147494,147496,147498,147500,147502,147505,147507,147509],{"class":129,"line":151},[127,147489,102187],{"class":147},[127,147491,725],{"class":290},[127,147493,4990],{"class":147},[127,147495,63212],{"class":781},[127,147497,158],{"class":147},[127,147499,69802],{"class":781},[127,147501,12977],{"class":147},[127,147503,147504],{"class":781},"\"value\"",[127,147506,158],{"class":147},[127,147508,986],{"class":154},[127,147510,170],{"class":147},[127,147512,147513],{"class":129,"line":167},[127,147514,2942],{"emptyLinePlaceholder":606},[127,147516,147517,147520,147522,147525,147528,147530,147532],{"class":129,"line":415},[127,147518,147519],{"class":147},"json_text ",[127,147521,725],{"class":290},[127,147523,147524],{"class":147}," json.dumps(data, ",[127,147526,147527],{"class":5758},"ensure_ascii",[127,147529,725],{"class":290},[127,147531,34527],{"class":154},[127,147533,687],{"class":147},[127,147535,147536,147538],{"class":129,"line":421},[127,147537,30955],{"class":154},[127,147539,147540],{"class":147},"(json_text)\n",[127,147542,147543],{"class":129,"line":1766},[127,147544,2942],{"emptyLinePlaceholder":606},[127,147546,147547,147550,147552],{"class":129,"line":1856},[127,147548,147549],{"class":147},"new_data ",[127,147551,725],{"class":290},[127,147553,147554],{"class":147}," json.loads(json_text)\n",[127,147556,147557,147559],{"class":129,"line":1862},[127,147558,30955],{"class":154},[127,147560,147561],{"class":147},"(new_data)\n",[14,147563,147565],{"id":147564},"_103-安装pyecharts","10.3 安装pyecharts",[117,147567,147569],{"className":24362,"code":147568,"language":24364,"meta":122,"style":122},"pip install pyecharts\n",[124,147570,147571],{"__ignoreMap":122},[127,147572,147573,147575,147577],{"class":129,"line":130},[127,147574,24371],{"class":143},[127,147576,24374],{"class":781},[127,147578,147579],{"class":781}," pyecharts\n",[19,147581,147582],{},"验证：",[117,147584,147586],{"className":30918,"code":147585,"language":30920,"meta":122,"style":122},"import pyecharts\n\nprint(pyecharts.__version__)\n",[124,147587,147588,147594,147598],{"__ignoreMap":122},[127,147589,147590,147592],{"class":129,"line":130},[127,147591,30932],{"class":290},[127,147593,147579],{"class":147},[127,147595,147596],{"class":129,"line":137},[127,147597,2942],{"emptyLinePlaceholder":606},[127,147599,147600,147602,147605,147608],{"class":129,"line":151},[127,147601,30955],{"class":154},[127,147603,147604],{"class":147},"(pyecharts.",[127,147606,147607],{"class":154},"__version__",[127,147609,687],{"class":147},[19,147611,147612],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147614,147616],{"id":147615},"_104-第一个折线图","10.4 第一个折线图",[117,147618,147620],{"className":30918,"code":147619,"language":30920,"meta":122,"style":122},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[124,147621,147622,147634,147638,147648,147678,147710],{"__ignoreMap":122},[127,147623,147624,147626,147629,147631],{"class":129,"line":130},[127,147625,31277],{"class":290},[127,147627,147628],{"class":147}," pyecharts.charts ",[127,147630,30932],{"class":290},[127,147632,147633],{"class":147}," Line\n",[127,147635,147636],{"class":129,"line":137},[127,147637,2942],{"emptyLinePlaceholder":606},[127,147639,147640,147643,147645],{"class":129,"line":151},[127,147641,147642],{"class":147},"line ",[127,147644,725],{"class":290},[127,147646,147647],{"class":147}," Line()\n",[127,147649,147650,147653,147656,147658,147661,147663,147666,147668,147671,147673,147676],{"class":129,"line":167},[127,147651,147652],{"class":147},"line.add_xaxis([",[127,147654,147655],{"class":781},"\"周一\"",[127,147657,12977],{"class":147},[127,147659,147660],{"class":781},"\"周二\"",[127,147662,12977],{"class":147},[127,147664,147665],{"class":781},"\"周三\"",[127,147667,12977],{"class":147},[127,147669,147670],{"class":781},"\"周四\"",[127,147672,12977],{"class":147},[127,147674,147675],{"class":781},"\"周五\"",[127,147677,5199],{"class":147},[127,147679,147680,147683,147686,147688,147690,147692,147694,147696,147698,147700,147703,147705,147708],{"class":129,"line":415},[127,147681,147682],{"class":147},"line.add_yaxis(",[127,147684,147685],{"class":781},"\"销售额\"",[127,147687,78047],{"class":147},[127,147689,986],{"class":154},[127,147691,12977],{"class":147},[127,147693,1491],{"class":154},[127,147695,12977],{"class":147},[127,147697,1536],{"class":154},[127,147699,12977],{"class":147},[127,147701,147702],{"class":154},"150",[127,147704,12977],{"class":147},[127,147706,147707],{"class":154},"180",[127,147709,5199],{"class":147},[127,147711,147712,147715,147718],{"class":129,"line":421},[127,147713,147714],{"class":147},"line.render(",[127,147716,147717],{"class":781},"\"line.html\"",[127,147719,687],{"class":147},[19,147721,147722,147723,147726],{},"运行后会生成 ",[124,147724,147725],{},"line.html","，用浏览器打开即可看到图表。",[19,147728,147729],{},"核心步骤：",[632,147731,147732,147735,147738,147741,147744],{},[635,147733,147734],{},"导入图表类。",[635,147736,147737],{},"创建图表对象。",[635,147739,147740],{},"添加 x 轴数据。",[635,147742,147743],{},"添加 y 轴数据。",[635,147745,147746],{},"渲染为 HTML。",[14,147748,147750],{"id":147749},"_105-全局配置","10.5 全局配置",[19,147752,147753,147754,147757],{},"常用配置在 ",[124,147755,147756],{},"pyecharts.options"," 中。",[117,147759,147761],{"className":30918,"code":147760,"language":30920,"meta":122,"style":122},"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",[124,147762,147763,147780,147790,147794,147802,147826,147854,147859,147878,147897,147915,147935,147939],{"__ignoreMap":122},[127,147764,147765,147767,147770,147772,147775,147777],{"class":129,"line":130},[127,147766,31277],{"class":290},[127,147768,147769],{"class":147}," pyecharts ",[127,147771,30932],{"class":290},[127,147773,147774],{"class":147}," options ",[127,147776,31923],{"class":290},[127,147778,147779],{"class":147}," opts\n",[127,147781,147782,147784,147786,147788],{"class":129,"line":137},[127,147783,31277],{"class":290},[127,147785,147628],{"class":147},[127,147787,30932],{"class":290},[127,147789,147633],{"class":147},[127,147791,147792],{"class":129,"line":151},[127,147793,2942],{"emptyLinePlaceholder":606},[127,147795,147796,147798,147800],{"class":129,"line":167},[127,147797,147642],{"class":147},[127,147799,725],{"class":290},[127,147801,147647],{"class":147},[127,147803,147804,147806,147808,147810,147812,147814,147816,147818,147820,147822,147824],{"class":129,"line":415},[127,147805,147652],{"class":147},[127,147807,147655],{"class":781},[127,147809,12977],{"class":147},[127,147811,147660],{"class":781},[127,147813,12977],{"class":147},[127,147815,147665],{"class":781},[127,147817,12977],{"class":147},[127,147819,147670],{"class":781},[127,147821,12977],{"class":147},[127,147823,147675],{"class":781},[127,147825,5199],{"class":147},[127,147827,147828,147830,147832,147834,147836,147838,147840,147842,147844,147846,147848,147850,147852],{"class":129,"line":421},[127,147829,147682],{"class":147},[127,147831,147685],{"class":781},[127,147833,78047],{"class":147},[127,147835,986],{"class":154},[127,147837,12977],{"class":147},[127,147839,1491],{"class":154},[127,147841,12977],{"class":147},[127,147843,1536],{"class":154},[127,147845,12977],{"class":147},[127,147847,147702],{"class":154},[127,147849,12977],{"class":147},[127,147851,147707],{"class":154},[127,147853,5199],{"class":147},[127,147855,147856],{"class":129,"line":1766},[127,147857,147858],{"class":147},"line.set_global_opts(\n",[127,147860,147861,147864,147866,147869,147871,147873,147876],{"class":129,"line":1856},[127,147862,147863],{"class":5758},"    title_opts",[127,147865,725],{"class":290},[127,147867,147868],{"class":147},"opts.TitleOpts(",[127,147870,51946],{"class":5758},[127,147872,725],{"class":290},[127,147874,147875],{"class":781},"\"一周销售额\"",[127,147877,38587],{"class":147},[127,147879,147880,147883,147885,147888,147890,147892,147895],{"class":129,"line":1862},[127,147881,147882],{"class":5758},"    xaxis_opts",[127,147884,725],{"class":290},[127,147886,147887],{"class":147},"opts.AxisOpts(",[127,147889,80339],{"class":5758},[127,147891,725],{"class":290},[127,147893,147894],{"class":781},"\"日期\"",[127,147896,38587],{"class":147},[127,147898,147899,147902,147904,147906,147908,147910,147913],{"class":129,"line":1874},[127,147900,147901],{"class":5758},"    yaxis_opts",[127,147903,725],{"class":290},[127,147905,147887],{"class":147},[127,147907,80339],{"class":5758},[127,147909,725],{"class":290},[127,147911,147912],{"class":781},"\"金额\"",[127,147914,38587],{"class":147},[127,147916,147917,147920,147922,147925,147928,147930,147933],{"class":129,"line":2155},[127,147918,147919],{"class":5758},"    tooltip_opts",[127,147921,725],{"class":290},[127,147923,147924],{"class":147},"opts.TooltipOpts(",[127,147926,147927],{"class":5758},"trigger",[127,147929,725],{"class":290},[127,147931,147932],{"class":781},"\"axis\"",[127,147934,38587],{"class":147},[127,147936,147937],{"class":129,"line":2160},[127,147938,687],{"class":147},[127,147940,147941,147943,147945],{"class":129,"line":2166},[127,147942,147714],{"class":147},[127,147944,147717],{"class":781},[127,147946,687],{"class":147},[19,147948,147949],{},"常见全局配置：",[814,147951,147952,147961],{},[817,147953,147954],{},[820,147955,147956,147959],{},[823,147957,147958],{},"配置",[823,147960,103225],{},[860,147962,147963,147973,147983,147993,148003,148013],{},[820,147964,147965,147970],{},[865,147966,147967],{},[124,147968,147969],{},"TitleOpts",[865,147971,147972],{},"标题",[820,147974,147975,147980],{},[865,147976,147977],{},[124,147978,147979],{},"LegendOpts",[865,147981,147982],{},"图例",[820,147984,147985,147990],{},[865,147986,147987],{},[124,147988,147989],{},"TooltipOpts",[865,147991,147992],{},"提示框",[820,147994,147995,148000],{},[865,147996,147997],{},[124,147998,147999],{},"AxisOpts",[865,148001,148002],{},"坐标轴",[820,148004,148005,148010],{},[865,148006,148007],{},[124,148008,148009],{},"VisualMapOpts",[865,148011,148012],{},"视觉映射",[820,148014,148015,148020],{},[865,148016,148017],{},[124,148018,148019],{},"DataZoomOpts",[865,148021,148022],{},"区域缩放",[14,148024,148026],{"id":148025},"_106-系列配置","10.6 系列配置",[19,148028,148029],{},"系列配置作用于某一组数据。",[117,148031,148033],{"className":30918,"code":148032,"language":30920,"meta":122,"style":122},"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",[124,148034,148035,148040,148051,148080,148091,148110],{"__ignoreMap":122},[127,148036,148037],{"class":129,"line":130},[127,148038,148039],{"class":147},"line.add_yaxis(\n",[127,148041,148042,148045,148047,148049],{"class":129,"line":137},[127,148043,148044],{"class":5758},"    series_name",[127,148046,725],{"class":290},[127,148048,147685],{"class":781},[127,148050,32006],{"class":147},[127,148052,148053,148056,148058,148060,148062,148064,148066,148068,148070,148072,148074,148076,148078],{"class":129,"line":151},[127,148054,148055],{"class":5758},"    y_axis",[127,148057,725],{"class":290},[127,148059,1564],{"class":147},[127,148061,986],{"class":154},[127,148063,12977],{"class":147},[127,148065,1491],{"class":154},[127,148067,12977],{"class":147},[127,148069,1536],{"class":154},[127,148071,12977],{"class":147},[127,148073,147702],{"class":154},[127,148075,12977],{"class":147},[127,148077,147707],{"class":154},[127,148079,88365],{"class":147},[127,148081,148082,148085,148087,148089],{"class":129,"line":167},[127,148083,148084],{"class":5758},"    is_smooth",[127,148086,725],{"class":290},[127,148088,32016],{"class":154},[127,148090,32006],{"class":147},[127,148092,148093,148096,148098,148101,148104,148106,148108],{"class":129,"line":415},[127,148094,148095],{"class":5758},"    label_opts",[127,148097,725],{"class":290},[127,148099,148100],{"class":147},"opts.LabelOpts(",[127,148102,148103],{"class":5758},"is_show",[127,148105,725],{"class":290},[127,148107,32016],{"class":154},[127,148109,38587],{"class":147},[127,148111,148112],{"class":129,"line":421},[127,148113,687],{"class":147},[19,148115,148116],{},"常用参数：",[632,148118,148119,148125,148131,148137,148143],{},[635,148120,148121,148124],{},[124,148122,148123],{},"series_name","：系列名称。",[635,148126,148127,148130],{},[124,148128,148129],{},"y_axis","：y 轴数据。",[635,148132,148133,148136],{},[124,148134,148135],{},"is_smooth","：是否平滑曲线。",[635,148138,148139,148142],{},[124,148140,148141],{},"label_opts","：标签配置。",[635,148144,148145,148148],{},[124,148146,148147],{},"symbol_size","：标记点大小。",[14,148150,148152],{"id":148151},"_107-多条折线","10.7 多条折线",[117,148154,148156],{"className":30918,"code":148155,"language":30920,"meta":122,"style":122},"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",[124,148157,148158,148172,148182,148186,148215,148219,148227,148232,148270,148307,148311,148328,148344,148348],{"__ignoreMap":122},[127,148159,148160,148162,148164,148166,148168,148170],{"class":129,"line":130},[127,148161,31277],{"class":290},[127,148163,147769],{"class":147},[127,148165,30932],{"class":290},[127,148167,147774],{"class":147},[127,148169,31923],{"class":290},[127,148171,147779],{"class":147},[127,148173,148174,148176,148178,148180],{"class":129,"line":137},[127,148175,31277],{"class":290},[127,148177,147628],{"class":147},[127,148179,30932],{"class":290},[127,148181,147633],{"class":147},[127,148183,148184],{"class":129,"line":151},[127,148185,2942],{"emptyLinePlaceholder":606},[127,148187,148188,148191,148193,148195,148197,148199,148201,148203,148205,148207,148209,148211,148213],{"class":129,"line":167},[127,148189,148190],{"class":147},"dates ",[127,148192,725],{"class":290},[127,148194,52761],{"class":147},[127,148196,147655],{"class":781},[127,148198,12977],{"class":147},[127,148200,147660],{"class":781},[127,148202,12977],{"class":147},[127,148204,147665],{"class":781},[127,148206,12977],{"class":147},[127,148208,147670],{"class":781},[127,148210,12977],{"class":147},[127,148212,147675],{"class":781},[127,148214,33786],{"class":147},[127,148216,148217],{"class":129,"line":415},[127,148218,2942],{"emptyLinePlaceholder":606},[127,148220,148221,148223,148225],{"class":129,"line":421},[127,148222,147642],{"class":147},[127,148224,725],{"class":290},[127,148226,147647],{"class":147},[127,148228,148229],{"class":129,"line":1766},[127,148230,148231],{"class":147},"line.add_xaxis(dates)\n",[127,148233,148234,148236,148239,148241,148243,148245,148248,148250,148252,148254,148256,148258,148260,148262,148264,148266,148268],{"class":129,"line":1856},[127,148235,147682],{"class":147},[127,148237,148238],{"class":781},"\"线上销售\"",[127,148240,78047],{"class":147},[127,148242,986],{"class":154},[127,148244,12977],{"class":147},[127,148246,148247],{"class":154},"130",[127,148249,12977],{"class":147},[127,148251,1491],{"class":154},[127,148253,12977],{"class":147},[127,148255,21589],{"class":154},[127,148257,12977],{"class":147},[127,148259,2265],{"class":154},[127,148261,112731],{"class":147},[127,148263,148135],{"class":5758},[127,148265,725],{"class":290},[127,148267,32016],{"class":154},[127,148269,687],{"class":147},[127,148271,148272,148274,148277,148279,148281,148283,148285,148287,148289,148291,148293,148295,148297,148299,148301,148303,148305],{"class":129,"line":1862},[127,148273,147682],{"class":147},[127,148275,148276],{"class":781},"\"线下销售\"",[127,148278,78047],{"class":147},[127,148280,1286],{"class":154},[127,148282,12977],{"class":147},[127,148284,1536],{"class":154},[127,148286,12977],{"class":147},[127,148288,986],{"class":154},[127,148290,12977],{"class":147},[127,148292,1491],{"class":154},[127,148294,12977],{"class":147},[127,148296,147702],{"class":154},[127,148298,112731],{"class":147},[127,148300,148135],{"class":5758},[127,148302,725],{"class":290},[127,148304,32016],{"class":154},[127,148306,687],{"class":147},[127,148308,148309],{"class":129,"line":1874},[127,148310,147858],{"class":147},[127,148312,148313,148315,148317,148319,148321,148323,148326],{"class":129,"line":2155},[127,148314,147863],{"class":5758},[127,148316,725],{"class":290},[127,148318,147868],{"class":147},[127,148320,51946],{"class":5758},[127,148322,725],{"class":290},[127,148324,148325],{"class":781},"\"线上线下销售趋势\"",[127,148327,38587],{"class":147},[127,148329,148330,148332,148334,148336,148338,148340,148342],{"class":129,"line":2160},[127,148331,147919],{"class":5758},[127,148333,725],{"class":290},[127,148335,147924],{"class":147},[127,148337,147927],{"class":5758},[127,148339,725],{"class":290},[127,148341,147932],{"class":781},[127,148343,38587],{"class":147},[127,148345,148346],{"class":129,"line":2166},[127,148347,687],{"class":147},[127,148349,148350,148352,148355],{"class":129,"line":2171},[127,148351,147714],{"class":147},[127,148353,148354],{"class":781},"\"sales.html\"",[127,148356,687],{"class":147},[19,148358,148359],{},"多条折线适合比较不同指标或不同地区。",[14,148361,148363],{"id":148362},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148365,148366,148367,25159],{},"假设 ",[124,148368,148369],{},"sales.json",[117,148371,148373],{"className":147435,"code":148372,"language":146182,"meta":122,"style":122},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[124,148374,148375,148380,148412,148440,148468],{"__ignoreMap":122},[127,148376,148377],{"class":129,"line":130},[127,148378,148379],{"class":147},"[\n",[127,148381,148382,148385,148388,148390,148392,148394,148397,148399,148401,148403,148406,148408,148410],{"class":129,"line":137},[127,148383,148384],{"class":147},"  {",[127,148386,148387],{"class":154},"\"date\"",[127,148389,158],{"class":147},[127,148391,147655],{"class":781},[127,148393,12977],{"class":147},[127,148395,148396],{"class":154},"\"online\"",[127,148398,158],{"class":147},[127,148400,986],{"class":154},[127,148402,12977],{"class":147},[127,148404,148405],{"class":154},"\"offline\"",[127,148407,158],{"class":147},[127,148409,1286],{"class":154},[127,148411,5472],{"class":147},[127,148413,148414,148416,148418,148420,148422,148424,148426,148428,148430,148432,148434,148436,148438],{"class":129,"line":151},[127,148415,148384],{"class":147},[127,148417,148387],{"class":154},[127,148419,158],{"class":147},[127,148421,147660],{"class":781},[127,148423,12977],{"class":147},[127,148425,148396],{"class":154},[127,148427,158],{"class":147},[127,148429,148247],{"class":154},[127,148431,12977],{"class":147},[127,148433,148405],{"class":154},[127,148435,158],{"class":147},[127,148437,1536],{"class":154},[127,148439,5472],{"class":147},[127,148441,148442,148444,148446,148448,148450,148452,148454,148456,148458,148460,148462,148464,148466],{"class":129,"line":167},[127,148443,148384],{"class":147},[127,148445,148387],{"class":154},[127,148447,158],{"class":147},[127,148449,147665],{"class":781},[127,148451,12977],{"class":147},[127,148453,148396],{"class":154},[127,148455,158],{"class":147},[127,148457,1491],{"class":154},[127,148459,12977],{"class":147},[127,148461,148405],{"class":154},[127,148463,158],{"class":147},[127,148465,986],{"class":154},[127,148467,170],{"class":147},[127,148469,148470],{"class":129,"line":415},[127,148471,33786],{"class":147},[19,148473,148474],{},"读取并绘图：",[117,148476,148478],{"className":30918,"code":148477,"language":30920,"meta":122,"style":122},"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",[124,148479,148480,148486,148500,148510,148514,148546,148559,148563,148571,148580,148589,148593,148605,148614,148623,148632,148636,148644,148648,148665,148682,148686,148703,148719,148723],{"__ignoreMap":122},[127,148481,148482,148484],{"class":129,"line":130},[127,148483,30932],{"class":290},[127,148485,147481],{"class":147},[127,148487,148488,148490,148492,148494,148496,148498],{"class":129,"line":137},[127,148489,31277],{"class":290},[127,148491,147769],{"class":147},[127,148493,30932],{"class":290},[127,148495,147774],{"class":147},[127,148497,31923],{"class":290},[127,148499,147779],{"class":147},[127,148501,148502,148504,148506,148508],{"class":129,"line":151},[127,148503,31277],{"class":290},[127,148505,147628],{"class":147},[127,148507,30932],{"class":290},[127,148509,147633],{"class":147},[127,148511,148512],{"class":129,"line":167},[127,148513,2942],{"emptyLinePlaceholder":606},[127,148515,148516,148518,148520,148522,148525,148527,148529,148531,148533,148535,148537,148539,148541,148544],{"class":129,"line":415},[127,148517,108362],{"class":290},[127,148519,147181],{"class":154},[127,148521,681],{"class":147},[127,148523,148524],{"class":781},"\"sales.json\"",[127,148526,12977],{"class":147},[127,148528,147191],{"class":781},[127,148530,12977],{"class":147},[127,148532,147196],{"class":5758},[127,148534,725],{"class":290},[127,148536,147201],{"class":781},[127,148538,14256],{"class":147},[127,148540,31923],{"class":290},[127,148542,148543],{"class":5758}," file",[127,148545,4281],{"class":147},[127,148547,148548,148550,148552,148555,148557],{"class":129,"line":421},[127,148549,101950],{"class":147},[127,148551,725],{"class":290},[127,148553,148554],{"class":147}," json.load(",[127,148556,45894],{"class":5758},[127,148558,687],{"class":147},[127,148560,148561],{"class":129,"line":1766},[127,148562,2942],{"emptyLinePlaceholder":606},[127,148564,148565,148567,148569],{"class":129,"line":1856},[127,148566,148190],{"class":147},[127,148568,725],{"class":290},[127,148570,52373],{"class":147},[127,148572,148573,148576,148578],{"class":129,"line":1862},[127,148574,148575],{"class":147},"online_sales ",[127,148577,725],{"class":290},[127,148579,52373],{"class":147},[127,148581,148582,148585,148587],{"class":129,"line":1874},[127,148583,148584],{"class":147},"offline_sales ",[127,148586,725],{"class":290},[127,148588,52373],{"class":147},[127,148590,148591],{"class":129,"line":2155},[127,148592,2942],{"emptyLinePlaceholder":606},[127,148594,148595,148597,148600,148602],{"class":129,"line":2160},[127,148596,3567],{"class":290},[127,148598,148599],{"class":147}," item ",[127,148601,26584],{"class":290},[127,148603,148604],{"class":147}," data:\n",[127,148606,148607,148610,148612],{"class":129,"line":2166},[127,148608,148609],{"class":147},"    dates.append(item[",[127,148611,148387],{"class":781},[127,148613,5199],{"class":147},[127,148615,148616,148619,148621],{"class":129,"line":2171},[127,148617,148618],{"class":147},"    online_sales.append(item[",[127,148620,148396],{"class":781},[127,148622,5199],{"class":147},[127,148624,148625,148628,148630],{"class":129,"line":2185},[127,148626,148627],{"class":147},"    offline_sales.append(item[",[127,148629,148405],{"class":781},[127,148631,5199],{"class":147},[127,148633,148634],{"class":129,"line":2190},[127,148635,2942],{"emptyLinePlaceholder":606},[127,148637,148638,148640,148642],{"class":129,"line":2196},[127,148639,147642],{"class":147},[127,148641,725],{"class":290},[127,148643,147647],{"class":147},[127,148645,148646],{"class":129,"line":2217},[127,148647,148231],{"class":147},[127,148649,148650,148652,148654,148657,148659,148661,148663],{"class":129,"line":2222},[127,148651,147682],{"class":147},[127,148653,148238],{"class":781},[127,148655,148656],{"class":147},", online_sales, ",[127,148658,148135],{"class":5758},[127,148660,725],{"class":290},[127,148662,32016],{"class":154},[127,148664,687],{"class":147},[127,148666,148667,148669,148671,148674,148676,148678,148680],{"class":129,"line":2236},[127,148668,147682],{"class":147},[127,148670,148276],{"class":781},[127,148672,148673],{"class":147},", offline_sales, ",[127,148675,148135],{"class":5758},[127,148677,725],{"class":290},[127,148679,32016],{"class":154},[127,148681,687],{"class":147},[127,148683,148684],{"class":129,"line":2241},[127,148685,147858],{"class":147},[127,148687,148688,148690,148692,148694,148696,148698,148701],{"class":129,"line":2270},[127,148689,147863],{"class":5758},[127,148691,725],{"class":290},[127,148693,147868],{"class":147},[127,148695,51946],{"class":5758},[127,148697,725],{"class":290},[127,148699,148700],{"class":781},"\"销售趋势\"",[127,148702,38587],{"class":147},[127,148704,148705,148707,148709,148711,148713,148715,148717],{"class":129,"line":2275},[127,148706,147919],{"class":5758},[127,148708,725],{"class":290},[127,148710,147924],{"class":147},[127,148712,147927],{"class":5758},[127,148714,725],{"class":290},[127,148716,147932],{"class":781},[127,148718,38587],{"class":147},[127,148720,148721],{"class":129,"line":2292},[127,148722,687],{"class":147},[127,148724,148725,148727,148729],{"class":129,"line":2297},[127,148726,147714],{"class":147},[127,148728,148354],{"class":781},[127,148730,687],{"class":147},[14,148732,148734],{"id":148733},"_109-数据清洗","10.9 数据清洗",[19,148736,148737],{},"真实数据经常不整齐，需要清洗。",[19,148739,148740],{},"常见问题：",[632,148742,148743,148746,148749,148752],{},[635,148744,148745],{},"数字是字符串。",[635,148747,148748],{},"字段缺失。",[635,148750,148751],{},"空值。",[635,148753,148754],{},"日期格式不统一。",[19,148756,15677],{},[117,148758,148760],{"className":30918,"code":148759,"language":30920,"meta":122,"style":122},"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",[124,148761,148762,148771,148794,148814,148835,148839,148843,148851,148860,148864,148875,148889,148898,148903,148907,148915,148925,148929,148936],{"__ignoreMap":122},[127,148763,148764,148767,148769],{"class":129,"line":130},[127,148765,148766],{"class":147},"raw_data ",[127,148768,725],{"class":290},[127,148770,55981],{"class":147},[127,148772,148773,148776,148778,148780,148782,148784,148787,148789,148792],{"class":129,"line":137},[127,148774,148775],{"class":147},"    {",[127,148777,148387],{"class":781},[127,148779,158],{"class":147},[127,148781,147655],{"class":781},[127,148783,12977],{"class":147},[127,148785,148786],{"class":781},"\"sales\"",[127,148788,158],{"class":147},[127,148790,148791],{"class":781},"\"100\"",[127,148793,5472],{"class":147},[127,148795,148796,148798,148800,148802,148804,148806,148808,148810,148812],{"class":129,"line":151},[127,148797,148775],{"class":147},[127,148799,148387],{"class":781},[127,148801,158],{"class":147},[127,148803,147660],{"class":781},[127,148805,12977],{"class":147},[127,148807,148786],{"class":781},[127,148809,158],{"class":147},[127,148811,8194],{"class":781},[127,148813,5472],{"class":147},[127,148815,148816,148818,148820,148822,148824,148826,148828,148830,148833],{"class":129,"line":167},[127,148817,148775],{"class":147},[127,148819,148387],{"class":781},[127,148821,158],{"class":147},[127,148823,147665],{"class":781},[127,148825,12977],{"class":147},[127,148827,148786],{"class":781},[127,148829,158],{"class":147},[127,148831,148832],{"class":781},"\"120\"",[127,148834,5472],{"class":147},[127,148836,148837],{"class":129,"line":415},[127,148838,33786],{"class":147},[127,148840,148841],{"class":129,"line":421},[127,148842,2942],{"emptyLinePlaceholder":606},[127,148844,148845,148847,148849],{"class":129,"line":1766},[127,148846,148190],{"class":147},[127,148848,725],{"class":290},[127,148850,52373],{"class":147},[127,148852,148853,148856,148858],{"class":129,"line":1856},[127,148854,148855],{"class":147},"sales ",[127,148857,725],{"class":290},[127,148859,52373],{"class":147},[127,148861,148862],{"class":129,"line":1862},[127,148863,2942],{"emptyLinePlaceholder":606},[127,148865,148866,148868,148870,148872],{"class":129,"line":1874},[127,148867,3567],{"class":290},[127,148869,148599],{"class":147},[127,148871,26584],{"class":290},[127,148873,148874],{"class":147}," raw_data:\n",[127,148876,148877,148880,148882,148885,148887],{"class":129,"line":2155},[127,148878,148879],{"class":147},"    value ",[127,148881,725],{"class":290},[127,148883,148884],{"class":147}," item.get(",[127,148886,148786],{"class":781},[127,148888,687],{"class":147},[127,148890,148891,148893,148895],{"class":129,"line":2160},[127,148892,3643],{"class":290},[127,148894,39470],{"class":290},[127,148896,148897],{"class":147}," value:\n",[127,148899,148900],{"class":129,"line":2166},[127,148901,148902],{"class":290},"        continue\n",[127,148904,148905],{"class":129,"line":2171},[127,148906,2942],{"emptyLinePlaceholder":606},[127,148908,148909,148911,148913],{"class":129,"line":2185},[127,148910,148609],{"class":147},[127,148912,148387],{"class":781},[127,148914,5199],{"class":147},[127,148916,148917,148920,148922],{"class":129,"line":2190},[127,148918,148919],{"class":147},"    sales.append(",[127,148921,684],{"class":154},[127,148923,148924],{"class":147},"(value))\n",[127,148926,148927],{"class":129,"line":2196},[127,148928,2942],{"emptyLinePlaceholder":606},[127,148930,148931,148933],{"class":129,"line":2217},[127,148932,30955],{"class":154},[127,148934,148935],{"class":147},"(dates)\n",[127,148937,148938,148940],{"class":129,"line":2222},[127,148939,30955],{"class":154},[127,148941,148942],{"class":147},"(sales)\n",[14,148944,148946],{"id":148945},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[117,148948,148950],{"className":30918,"code":148949,"language":30920,"meta":122,"style":122},"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",[124,148951,148952,148966,148976,148980,148988,149009,149031,149053,149075,149097,149101,149105,149127,149148,149152,149160,149164,149168,149178,149187,149197,149213,149217,149221,149238,149254,149270,149286,149296,149300],{"__ignoreMap":122},[127,148953,148954,148956,148958,148960,148962,148964],{"class":129,"line":130},[127,148955,31277],{"class":290},[127,148957,147769],{"class":147},[127,148959,30932],{"class":290},[127,148961,147774],{"class":147},[127,148963,31923],{"class":290},[127,148965,147779],{"class":147},[127,148967,148968,148970,148972,148974],{"class":129,"line":137},[127,148969,31277],{"class":290},[127,148971,147628],{"class":147},[127,148973,30932],{"class":290},[127,148975,147633],{"class":147},[127,148977,148978],{"class":129,"line":151},[127,148979,2942],{"emptyLinePlaceholder":606},[127,148981,148982,148984,148986],{"class":129,"line":167},[127,148983,148855],{"class":147},[127,148985,725],{"class":290},[127,148987,55981],{"class":147},[127,148989,148990,148992,148994,148996,148999,149001,149003,149005,149007],{"class":129,"line":415},[127,148991,148775],{"class":147},[127,148993,148387],{"class":781},[127,148995,158],{"class":147},[127,148997,148998],{"class":781},"\"2024-10-01\"",[127,149000,12977],{"class":147},[127,149002,84613],{"class":781},[127,149004,158],{"class":147},[127,149006,92552],{"class":154},[127,149008,5472],{"class":147},[127,149010,149011,149013,149015,149017,149020,149022,149024,149026,149029],{"class":129,"line":421},[127,149012,148775],{"class":147},[127,149014,148387],{"class":781},[127,149016,158],{"class":147},[127,149018,149019],{"class":781},"\"2024-10-02\"",[127,149021,12977],{"class":147},[127,149023,84613],{"class":781},[127,149025,158],{"class":147},[127,149027,149028],{"class":154},"1800",[127,149030,5472],{"class":147},[127,149032,149033,149035,149037,149039,149042,149044,149046,149048,149051],{"class":129,"line":1766},[127,149034,148775],{"class":147},[127,149036,148387],{"class":781},[127,149038,158],{"class":147},[127,149040,149041],{"class":781},"\"2024-10-03\"",[127,149043,12977],{"class":147},[127,149045,84613],{"class":781},[127,149047,158],{"class":147},[127,149049,149050],{"class":154},"1500",[127,149052,5472],{"class":147},[127,149054,149055,149057,149059,149061,149064,149066,149068,149070,149073],{"class":129,"line":1856},[127,149056,148775],{"class":147},[127,149058,148387],{"class":781},[127,149060,158],{"class":147},[127,149062,149063],{"class":781},"\"2024-10-04\"",[127,149065,12977],{"class":147},[127,149067,84613],{"class":781},[127,149069,158],{"class":147},[127,149071,149072],{"class":154},"2100",[127,149074,5472],{"class":147},[127,149076,149077,149079,149081,149083,149086,149088,149090,149092,149095],{"class":129,"line":1862},[127,149078,148775],{"class":147},[127,149080,148387],{"class":781},[127,149082,158],{"class":147},[127,149084,149085],{"class":781},"\"2024-10-05\"",[127,149087,12977],{"class":147},[127,149089,84613],{"class":781},[127,149091,158],{"class":147},[127,149093,149094],{"class":154},"2600",[127,149096,5472],{"class":147},[127,149098,149099],{"class":129,"line":1874},[127,149100,33786],{"class":147},[127,149102,149103],{"class":129,"line":2155},[127,149104,2942],{"emptyLinePlaceholder":606},[127,149106,149107,149109,149111,149114,149116,149118,149120,149122,149124],{"class":129,"line":2160},[127,149108,148190],{"class":147},[127,149110,725],{"class":290},[127,149112,149113],{"class":147}," [item[",[127,149115,148387],{"class":781},[127,149117,4985],{"class":147},[127,149119,3567],{"class":290},[127,149121,148599],{"class":147},[127,149123,26584],{"class":290},[127,149125,149126],{"class":147}," sales]\n",[127,149128,149129,149132,149134,149136,149138,149140,149142,149144,149146],{"class":129,"line":2166},[127,149130,149131],{"class":147},"amounts ",[127,149133,725],{"class":290},[127,149135,149113],{"class":147},[127,149137,84613],{"class":781},[127,149139,4985],{"class":147},[127,149141,3567],{"class":290},[127,149143,148599],{"class":147},[127,149145,26584],{"class":290},[127,149147,149126],{"class":147},[127,149149,149150],{"class":129,"line":2171},[127,149151,2942],{"emptyLinePlaceholder":606},[127,149153,149154,149156,149158],{"class":129,"line":2185},[127,149155,147642],{"class":147},[127,149157,725],{"class":290},[127,149159,147647],{"class":147},[127,149161,149162],{"class":129,"line":2190},[127,149163,148231],{"class":147},[127,149165,149166],{"class":129,"line":2196},[127,149167,148039],{"class":147},[127,149169,149170,149172,149174,149176],{"class":129,"line":2217},[127,149171,148044],{"class":5758},[127,149173,725],{"class":290},[127,149175,147685],{"class":781},[127,149177,32006],{"class":147},[127,149179,149180,149182,149184],{"class":129,"line":2222},[127,149181,148055],{"class":5758},[127,149183,725],{"class":290},[127,149185,149186],{"class":147},"amounts,\n",[127,149188,149189,149191,149193,149195],{"class":129,"line":2236},[127,149190,148084],{"class":5758},[127,149192,725],{"class":290},[127,149194,32016],{"class":154},[127,149196,32006],{"class":147},[127,149198,149199,149201,149203,149205,149207,149209,149211],{"class":129,"line":2241},[127,149200,148095],{"class":5758},[127,149202,725],{"class":290},[127,149204,148100],{"class":147},[127,149206,148103],{"class":5758},[127,149208,725],{"class":290},[127,149210,32016],{"class":154},[127,149212,38587],{"class":147},[127,149214,149215],{"class":129,"line":2270},[127,149216,687],{"class":147},[127,149218,149219],{"class":129,"line":2275},[127,149220,147858],{"class":147},[127,149222,149223,149225,149227,149229,149231,149233,149236],{"class":129,"line":2292},[127,149224,147863],{"class":5758},[127,149226,725],{"class":290},[127,149228,147868],{"class":147},[127,149230,51946],{"class":5758},[127,149232,725],{"class":290},[127,149234,149235],{"class":781},"\"每日销售额\"",[127,149237,38587],{"class":147},[127,149239,149240,149242,149244,149246,149248,149250,149252],{"class":129,"line":2297},[127,149241,147882],{"class":5758},[127,149243,725],{"class":290},[127,149245,147887],{"class":147},[127,149247,80339],{"class":5758},[127,149249,725],{"class":290},[127,149251,147894],{"class":781},[127,149253,38587],{"class":147},[127,149255,149256,149258,149260,149262,149264,149266,149268],{"class":129,"line":2302},[127,149257,147901],{"class":5758},[127,149259,725],{"class":290},[127,149261,147887],{"class":147},[127,149263,80339],{"class":5758},[127,149265,725],{"class":290},[127,149267,147912],{"class":781},[127,149269,38587],{"class":147},[127,149271,149272,149274,149276,149278,149280,149282,149284],{"class":129,"line":2307},[127,149273,147919],{"class":5758},[127,149275,725],{"class":290},[127,149277,147924],{"class":147},[127,149279,147927],{"class":5758},[127,149281,725],{"class":290},[127,149283,147932],{"class":781},[127,149285,38587],{"class":147},[127,149287,149288,149291,149293],{"class":129,"line":2321},[127,149289,149290],{"class":5758},"    datazoom_opts",[127,149292,725],{"class":290},[127,149294,149295],{"class":147},"[opts.DataZoomOpts()],\n",[127,149297,149298],{"class":129,"line":2326},[127,149299,687],{"class":147},[127,149301,149302,149304,149307],{"class":129,"line":3119},[127,149303,147714],{"class":147},[127,149305,149306],{"class":781},"\"daily_sales.html\"",[127,149308,687],{"class":147},[19,149310,149311,149314],{},[124,149312,149313],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149316,149318],{"id":149317},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149320,149321],{},"如果数据结构如下：",[117,149323,149325],{"className":30918,"code":149324,"language":30920,"meta":122,"style":122},"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",[124,149326,149327,149335,149343,149365,149386,149391,149398,149418,149438,149442],{"__ignoreMap":122},[127,149328,149329,149331,149333],{"class":129,"line":130},[127,149330,102187],{"class":147},[127,149332,725],{"class":290},[127,149334,148],{"class":147},[127,149336,149337,149340],{"class":129,"line":137},[127,149338,149339],{"class":781},"    \"北京\"",[127,149341,149342],{"class":147},": [\n",[127,149344,149345,149347,149349,149351,149354,149356,149359,149361,149363],{"class":129,"line":151},[127,149346,5459],{"class":147},[127,149348,148387],{"class":781},[127,149350,158],{"class":147},[127,149352,149353],{"class":781},"\"2024-01-01\"",[127,149355,12977],{"class":147},[127,149357,149358],{"class":781},"\"confirm\"",[127,149360,158],{"class":147},[127,149362,1121],{"class":154},[127,149364,5472],{"class":147},[127,149366,149367,149369,149371,149373,149376,149378,149380,149382,149384],{"class":129,"line":167},[127,149368,5459],{"class":147},[127,149370,148387],{"class":781},[127,149372,158],{"class":147},[127,149374,149375],{"class":781},"\"2024-01-02\"",[127,149377,12977],{"class":147},[127,149379,149358],{"class":781},[127,149381,158],{"class":147},[127,149383,1173],{"class":154},[127,149385,5472],{"class":147},[127,149387,149388],{"class":129,"line":415},[127,149389,149390],{"class":147},"    ],\n",[127,149392,149393,149396],{"class":129,"line":421},[127,149394,149395],{"class":781},"    \"上海\"",[127,149397,149342],{"class":147},[127,149399,149400,149402,149404,149406,149408,149410,149412,149414,149416],{"class":129,"line":1766},[127,149401,5459],{"class":147},[127,149403,148387],{"class":781},[127,149405,158],{"class":147},[127,149407,149353],{"class":781},[127,149409,12977],{"class":147},[127,149411,149358],{"class":781},[127,149413,158],{"class":147},[127,149415,1070],{"class":154},[127,149417,5472],{"class":147},[127,149419,149420,149422,149424,149426,149428,149430,149432,149434,149436],{"class":129,"line":1856},[127,149421,5459],{"class":147},[127,149423,148387],{"class":781},[127,149425,158],{"class":147},[127,149427,149375],{"class":781},[127,149429,12977],{"class":147},[127,149431,149358],{"class":781},[127,149433,158],{"class":147},[127,149435,1198],{"class":154},[127,149437,5472],{"class":147},[127,149439,149440],{"class":129,"line":1862},[127,149441,149390],{"class":147},[127,149443,149444],{"class":129,"line":1874},[127,149445,170],{"class":147},[19,149447,149448],{},"绘制多地区趋势：",[117,149450,149452],{"className":30918,"code":149451,"language":30920,"meta":122,"style":122},"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",[124,149453,149454,149468,149478,149482,149507,149511,149519,149523,149527,149539,149561,149574,149578,149582,149599,149615,149619],{"__ignoreMap":122},[127,149455,149456,149458,149460,149462,149464,149466],{"class":129,"line":130},[127,149457,31277],{"class":290},[127,149459,147769],{"class":147},[127,149461,30932],{"class":290},[127,149463,147774],{"class":147},[127,149465,31923],{"class":290},[127,149467,147779],{"class":147},[127,149469,149470,149472,149474,149476],{"class":129,"line":137},[127,149471,31277],{"class":290},[127,149473,147628],{"class":147},[127,149475,30932],{"class":290},[127,149477,147633],{"class":147},[127,149479,149480],{"class":129,"line":151},[127,149481,2942],{"emptyLinePlaceholder":606},[127,149483,149484,149486,149488,149490,149492,149494,149496,149498,149500,149503,149505],{"class":129,"line":167},[127,149485,148190],{"class":147},[127,149487,725],{"class":290},[127,149489,149113],{"class":147},[127,149491,148387],{"class":781},[127,149493,4985],{"class":147},[127,149495,3567],{"class":290},[127,149497,148599],{"class":147},[127,149499,26584],{"class":290},[127,149501,149502],{"class":147}," data[",[127,149504,69802],{"class":781},[127,149506,78056],{"class":147},[127,149508,149509],{"class":129,"line":415},[127,149510,2942],{"emptyLinePlaceholder":606},[127,149512,149513,149515,149517],{"class":129,"line":421},[127,149514,147642],{"class":147},[127,149516,725],{"class":290},[127,149518,147647],{"class":147},[127,149520,149521],{"class":129,"line":1766},[127,149522,148231],{"class":147},[127,149524,149525],{"class":129,"line":1856},[127,149526,2942],{"emptyLinePlaceholder":606},[127,149528,149529,149531,149534,149536],{"class":129,"line":1862},[127,149530,3567],{"class":290},[127,149532,149533],{"class":147}," city, records ",[127,149535,26584],{"class":290},[127,149537,149538],{"class":147}," data.items():\n",[127,149540,149541,149544,149546,149548,149550,149552,149554,149556,149558],{"class":129,"line":1874},[127,149542,149543],{"class":147},"    values ",[127,149545,725],{"class":290},[127,149547,149113],{"class":147},[127,149549,149358],{"class":781},[127,149551,4985],{"class":147},[127,149553,3567],{"class":290},[127,149555,148599],{"class":147},[127,149557,26584],{"class":290},[127,149559,149560],{"class":147}," records]\n",[127,149562,149563,149566,149568,149570,149572],{"class":129,"line":2155},[127,149564,149565],{"class":147},"    line.add_yaxis(city, values, ",[127,149567,148135],{"class":5758},[127,149569,725],{"class":290},[127,149571,32016],{"class":154},[127,149573,687],{"class":147},[127,149575,149576],{"class":129,"line":2160},[127,149577,2942],{"emptyLinePlaceholder":606},[127,149579,149580],{"class":129,"line":2166},[127,149581,147858],{"class":147},[127,149583,149584,149586,149588,149590,149592,149594,149597],{"class":129,"line":2171},[127,149585,147863],{"class":5758},[127,149587,725],{"class":290},[127,149589,147868],{"class":147},[127,149591,51946],{"class":5758},[127,149593,725],{"class":290},[127,149595,149596],{"class":781},"\"多地区趋势图\"",[127,149598,38587],{"class":147},[127,149600,149601,149603,149605,149607,149609,149611,149613],{"class":129,"line":2185},[127,149602,147919],{"class":5758},[127,149604,725],{"class":290},[127,149606,147924],{"class":147},[127,149608,147927],{"class":5758},[127,149610,725],{"class":290},[127,149612,147932],{"class":781},[127,149614,38587],{"class":147},[127,149616,149617],{"class":129,"line":2190},[127,149618,687],{"class":147},[127,149620,149621,149623,149626],{"class":129,"line":2196},[127,149622,147714],{"class":147},[127,149624,149625],{"class":781},"\"trend.html\"",[127,149627,687],{"class":147},[19,149629,149630],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149632,149634],{"id":149633},"_1012-易错点","10.12 易错点",[632,149636,149637,149643,149649,149659,149665],{},[635,149638,149639,149642],{},[124,149640,149641],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[635,149644,149645,149648],{},[124,149646,149647],{},"render()"," 生成的是 HTML，不是图片。",[635,149650,149651,149652,149655,149656,28925],{},"JSON 字符串用 ",[124,149653,149654],{},"json.loads()","，JSON 文件用 ",[124,149657,149658],{},"json.load()",[635,149660,149661,149662,28925],{},"中文 JSON 保存时加 ",[124,149663,149664],{},"ensure_ascii=False",[635,149666,149667],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149669,149671],{"id":149670},"_1013-本章练习","10.13 本章练习",[632,149673,149674,149677,149680,149683,149686],{},[635,149675,149676],{},"安装 pyecharts 并生成第一个折线图。",[635,149678,149679],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[635,149681,149682],{},"绘制两条折线，对比线上和线下销售额。",[635,149684,149685],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[635,149687,149688],{},"对含有空值的销售数据进行清洗后再绘图。",[575,149690,149691],{},"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":122,"searchDepth":137,"depth":137,"links":149693},[149694,149695,149696,149697,149698,149699,149700,149701,149702,149703,149704,149705,149706],{"id":147310,"depth":137,"text":147311},{"id":147385,"depth":137,"text":147386},{"id":147564,"depth":137,"text":147565},{"id":147615,"depth":137,"text":147616},{"id":147749,"depth":137,"text":147750},{"id":148025,"depth":137,"text":148026},{"id":148151,"depth":137,"text":148152},{"id":148362,"depth":137,"text":148363},{"id":148733,"depth":137,"text":148734},{"id":148945,"depth":137,"text":148946},{"id":149317,"depth":137,"text":149318},{"id":149633,"depth":137,"text":149634},{"id":149670,"depth":137,"text":149671},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147302,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149713,"title":149714,"body":149715,"description":603,"extension":604,"meta":152075,"navigation":606,"path":152076,"seo":152077,"stem":152078,"__hash__":152079},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149716,"toc":152052},[149717,149720,149724,149727,149730,149806,149809,149900,149903,149907,149910,149954,149967,149971,149974,150041,150044,150048,150051,150135,150143,150147,150152,150293,150296,150307,150313,150319,150433,150437,150440,150443,150696,150699,150703,150706,150810,150813,150817,150968,150972,150979,151092,151096,151099,151205,151208,151212,151215,151246,151249,151354,151357,151361,151365,151375,151443,151447,151454,151518,151521,151525,151531,151627,151636,151640,151964,151973,151977,152005,152009,152049],[10,149718,149714],{"id":149719},"_11-面向对象基础",[14,149721,149723],{"id":149722},"_111-什么是面向对象","11.1 什么是面向对象",[19,149725,149726],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149728,149729],{},"面向过程：",[117,149731,149733],{"className":30918,"code":149732,"language":30920,"meta":122,"style":122},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[124,149734,149735,149744,149752,149756,149766,149797,149801],{"__ignoreMap":122},[127,149736,149737,149739,149741],{"class":129,"line":130},[127,149738,146926],{"class":147},[127,149740,725],{"class":290},[127,149742,149743],{"class":781}," \"小明\"\n",[127,149745,149746,149748,149750],{"class":129,"line":137},[127,149747,146936],{"class":147},[127,149749,725],{"class":290},[127,149751,146941],{"class":154},[127,149753,149754],{"class":129,"line":151},[127,149755,2942],{"emptyLinePlaceholder":606},[127,149757,149758,149760,149763],{"class":129,"line":167},[127,149759,32487],{"class":290},[127,149761,149762],{"class":143}," introduce",[127,149764,149765],{"class":147},"(name, age):\n",[127,149767,149768,149770,149772,149774,149777,149779,149781,149783,149786,149788,149790,149792,149795],{"class":129,"line":415},[127,149769,31839],{"class":154},[127,149771,681],{"class":147},[127,149773,731],{"class":290},[127,149775,149776],{"class":781},"\"我叫",[127,149778,1570],{"class":154},[127,149780,80339],{"class":147},[127,149782,1620],{"class":154},[127,149784,149785],{"class":781},"，今年",[127,149787,1570],{"class":154},[127,149789,70754],{"class":147},[127,149791,1620],{"class":154},[127,149793,149794],{"class":781},"岁\"",[127,149796,687],{"class":147},[127,149798,149799],{"class":129,"line":421},[127,149800,2942],{"emptyLinePlaceholder":606},[127,149802,149803],{"class":129,"line":1766},[127,149804,149805],{"class":147},"introduce(name, age)\n",[19,149807,149808],{},"面向对象：",[117,149810,149812],{"className":30918,"code":149811,"language":30920,"meta":122,"style":122},"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",[124,149813,149814,149822,149830,149859,149863,149867,149877,149886,149895],{"__ignoreMap":122},[127,149815,149816,149818,149820],{"class":129,"line":130},[127,149817,15236],{"class":290},[127,149819,8440],{"class":143},[127,149821,4281],{"class":147},[127,149823,149824,149826,149828],{"class":129,"line":137},[127,149825,31341],{"class":290},[127,149827,149762],{"class":143},[127,149829,31347],{"class":147},[127,149831,149832,149834,149836,149838,149840,149843,149845,149847,149849,149851,149853,149855,149857],{"class":129,"line":151},[127,149833,32991],{"class":154},[127,149835,681],{"class":147},[127,149837,731],{"class":290},[127,149839,149776],{"class":781},[127,149841,149842],{"class":154},"{self",[127,149844,80830],{"class":147},[127,149846,1620],{"class":154},[127,149848,149785],{"class":781},[127,149850,149842],{"class":154},[127,149852,80842],{"class":147},[127,149854,1620],{"class":154},[127,149856,149794],{"class":781},[127,149858,687],{"class":147},[127,149860,149861],{"class":129,"line":167},[127,149862,2942],{"emptyLinePlaceholder":606},[127,149864,149865],{"class":129,"line":415},[127,149866,2942],{"emptyLinePlaceholder":606},[127,149868,149869,149872,149874],{"class":129,"line":421},[127,149870,149871],{"class":147},"student ",[127,149873,725],{"class":290},[127,149875,149876],{"class":147}," Student()\n",[127,149878,149879,149882,149884],{"class":129,"line":1766},[127,149880,149881],{"class":147},"student.name ",[127,149883,725],{"class":290},[127,149885,149743],{"class":781},[127,149887,149888,149891,149893],{"class":129,"line":1856},[127,149889,149890],{"class":147},"student.age ",[127,149892,725],{"class":290},[127,149894,146941],{"class":154},[127,149896,149897],{"class":129,"line":1862},[127,149898,149899],{"class":147},"student.introduce()\n",[19,149901,149902],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149904,149906],{"id":149905},"_112-类和对象","11.2 类和对象",[19,149908,149909],{},"类是模板，对象是根据模板创建出来的具体实例。",[117,149911,149913],{"className":30918,"code":149912,"language":30920,"meta":122,"style":122},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[124,149914,149915,149923,149928,149932,149936,149945],{"__ignoreMap":122},[127,149916,149917,149919,149921],{"class":129,"line":130},[127,149918,15236],{"class":290},[127,149920,8440],{"class":143},[127,149922,4281],{"class":147},[127,149924,149925],{"class":129,"line":137},[127,149926,149927],{"class":290},"    pass\n",[127,149929,149930],{"class":129,"line":151},[127,149931,2942],{"emptyLinePlaceholder":606},[127,149933,149934],{"class":129,"line":167},[127,149935,2942],{"emptyLinePlaceholder":606},[127,149937,149938,149941,149943],{"class":129,"line":415},[127,149939,149940],{"class":147},"student1 ",[127,149942,725],{"class":290},[127,149944,149876],{"class":147},[127,149946,149947,149950,149952],{"class":129,"line":421},[127,149948,149949],{"class":147},"student2 ",[127,149951,725],{"class":290},[127,149953,149876],{"class":147},[19,149955,149956,149959,149960,101547,149963,149966],{},[124,149957,149958],{},"Student"," 是类，",[124,149961,149962],{},"student1",[124,149964,149965],{},"student2"," 是对象。",[14,149968,149970],{"id":149969},"_113-属性","11.3 属性",[19,149972,149973],{},"属性是对象保存的数据。",[117,149975,149977],{"className":30918,"code":149976,"language":30920,"meta":122,"style":122},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[124,149978,149979,149987,149991,149995,149999,150007,150015,150023,150027,150034],{"__ignoreMap":122},[127,149980,149981,149983,149985],{"class":129,"line":130},[127,149982,15236],{"class":290},[127,149984,8440],{"class":143},[127,149986,4281],{"class":147},[127,149988,149989],{"class":129,"line":137},[127,149990,149927],{"class":290},[127,149992,149993],{"class":129,"line":151},[127,149994,2942],{"emptyLinePlaceholder":606},[127,149996,149997],{"class":129,"line":167},[127,149998,2942],{"emptyLinePlaceholder":606},[127,150000,150001,150003,150005],{"class":129,"line":415},[127,150002,149871],{"class":147},[127,150004,725],{"class":290},[127,150006,149876],{"class":147},[127,150008,150009,150011,150013],{"class":129,"line":421},[127,150010,149881],{"class":147},[127,150012,725],{"class":290},[127,150014,149743],{"class":781},[127,150016,150017,150019,150021],{"class":129,"line":1766},[127,150018,149890],{"class":147},[127,150020,725],{"class":290},[127,150022,146941],{"class":154},[127,150024,150025],{"class":129,"line":1856},[127,150026,2942],{"emptyLinePlaceholder":606},[127,150028,150029,150031],{"class":129,"line":1862},[127,150030,30955],{"class":154},[127,150032,150033],{"class":147},"(student.name)\n",[127,150035,150036,150038],{"class":129,"line":1874},[127,150037,30955],{"class":154},[127,150039,150040],{"class":147},"(student.age)\n",[19,150042,150043],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150045,150047],{"id":150046},"_114-方法","11.4 方法",[19,150049,150050],{},"类中的函数叫方法。",[117,150052,150053],{"className":30918,"code":149811,"language":30920,"meta":122,"style":122},[124,150054,150055,150063,150071,150099,150103,150107,150115,150123,150131],{"__ignoreMap":122},[127,150056,150057,150059,150061],{"class":129,"line":130},[127,150058,15236],{"class":290},[127,150060,8440],{"class":143},[127,150062,4281],{"class":147},[127,150064,150065,150067,150069],{"class":129,"line":137},[127,150066,31341],{"class":290},[127,150068,149762],{"class":143},[127,150070,31347],{"class":147},[127,150072,150073,150075,150077,150079,150081,150083,150085,150087,150089,150091,150093,150095,150097],{"class":129,"line":151},[127,150074,32991],{"class":154},[127,150076,681],{"class":147},[127,150078,731],{"class":290},[127,150080,149776],{"class":781},[127,150082,149842],{"class":154},[127,150084,80830],{"class":147},[127,150086,1620],{"class":154},[127,150088,149785],{"class":781},[127,150090,149842],{"class":154},[127,150092,80842],{"class":147},[127,150094,1620],{"class":154},[127,150096,149794],{"class":781},[127,150098,687],{"class":147},[127,150100,150101],{"class":129,"line":167},[127,150102,2942],{"emptyLinePlaceholder":606},[127,150104,150105],{"class":129,"line":415},[127,150106,2942],{"emptyLinePlaceholder":606},[127,150108,150109,150111,150113],{"class":129,"line":421},[127,150110,149871],{"class":147},[127,150112,725],{"class":290},[127,150114,149876],{"class":147},[127,150116,150117,150119,150121],{"class":129,"line":1766},[127,150118,149881],{"class":147},[127,150120,725],{"class":290},[127,150122,149743],{"class":781},[127,150124,150125,150127,150129],{"class":129,"line":1856},[127,150126,149890],{"class":147},[127,150128,725],{"class":290},[127,150130,146941],{"class":154},[127,150132,150133],{"class":129,"line":1862},[127,150134,149899],{"class":147},[19,150136,150137,150139,150140,150142],{},[124,150138,31363],{}," 表示当前对象。调用方法时不需要手动传入 ",[124,150141,31363],{},"，Python 会自动传。",[14,150144,150146],{"id":150145},"_115-构造方法__init__","11.5 构造方法__init__",[19,150148,150149,150151],{},[124,150150,31369],{}," 在对象创建时自动执行，用于初始化属性。",[117,150153,150155],{"className":30918,"code":150154,"language":30920,"meta":122,"style":122},"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",[124,150156,150157,150165,150174,150186,150198,150209,150213,150221,150259,150263,150267,150289],{"__ignoreMap":122},[127,150158,150159,150161,150163],{"class":129,"line":130},[127,150160,15236],{"class":290},[127,150162,8440],{"class":143},[127,150164,4281],{"class":147},[127,150166,150167,150169,150171],{"class":129,"line":137},[127,150168,31341],{"class":290},[127,150170,31344],{"class":154},[127,150172,150173],{"class":147},"(self, name, age, score):\n",[127,150175,150176,150178,150181,150183],{"class":129,"line":151},[127,150177,31385],{"class":154},[127,150179,150180],{"class":147},".name ",[127,150182,725],{"class":290},[127,150184,150185],{"class":147}," name\n",[127,150187,150188,150190,150193,150195],{"class":129,"line":167},[127,150189,31385],{"class":154},[127,150191,150192],{"class":147},".age ",[127,150194,725],{"class":290},[127,150196,150197],{"class":147}," age\n",[127,150199,150200,150202,150205,150207],{"class":129,"line":415},[127,150201,31385],{"class":154},[127,150203,150204],{"class":147},".score ",[127,150206,725],{"class":290},[127,150208,2122],{"class":147},[127,150210,150211],{"class":129,"line":421},[127,150212,2942],{"emptyLinePlaceholder":606},[127,150214,150215,150217,150219],{"class":129,"line":1766},[127,150216,31341],{"class":290},[127,150218,149762],{"class":143},[127,150220,31347],{"class":147},[127,150222,150223,150225,150227,150229,150231,150233,150235,150237,150239,150241,150243,150245,150248,150250,150253,150255,150257],{"class":129,"line":1856},[127,150224,32991],{"class":154},[127,150226,681],{"class":147},[127,150228,731],{"class":290},[127,150230,149776],{"class":781},[127,150232,149842],{"class":154},[127,150234,80830],{"class":147},[127,150236,1620],{"class":154},[127,150238,149785],{"class":781},[127,150240,149842],{"class":154},[127,150242,80842],{"class":147},[127,150244,1620],{"class":154},[127,150246,150247],{"class":781},"岁，成绩",[127,150249,149842],{"class":154},[127,150251,150252],{"class":147},".score",[127,150254,1620],{"class":154},[127,150256,926],{"class":781},[127,150258,687],{"class":147},[127,150260,150261],{"class":129,"line":1862},[127,150262,2942],{"emptyLinePlaceholder":606},[127,150264,150265],{"class":129,"line":1874},[127,150266,2942],{"emptyLinePlaceholder":606},[127,150268,150269,150271,150273,150276,150279,150281,150283,150285,150287],{"class":129,"line":2155},[127,150270,149871],{"class":147},[127,150272,725],{"class":290},[127,150274,150275],{"class":147}," Student(",[127,150277,150278],{"class":781},"\"小明\"",[127,150280,12977],{"class":147},[127,150282,1324],{"class":154},[127,150284,12977],{"class":147},[127,150286,1663],{"class":154},[127,150288,687],{"class":147},[127,150290,150291],{"class":129,"line":2160},[127,150292,149899],{"class":147},[19,150294,150295],{},"构造方法的好处：",[632,150297,150298,150301,150304],{},[635,150299,150300],{},"创建对象时必须提供必要数据。",[635,150302,150303],{},"属性初始化集中，不容易漏。",[635,150305,150306],{},"对象状态更完整。",[14,150308,150310,150311],{"id":150309},"_116-str","11.6 ",[30,150312,1844],{},[19,150314,150315,150316,28925],{},"直接打印对象时，默认输出不直观。可以定义 ",[124,150317,150318],{},"__str__",[117,150320,150322],{"className":30918,"code":150321,"language":30920,"meta":122,"style":122},"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",[124,150323,150324,150332,150341,150351,150361,150365,150374,150402,150406,150410,150426],{"__ignoreMap":122},[127,150325,150326,150328,150330],{"class":129,"line":130},[127,150327,15236],{"class":290},[127,150329,8440],{"class":143},[127,150331,4281],{"class":147},[127,150333,150334,150336,150338],{"class":129,"line":137},[127,150335,31341],{"class":290},[127,150337,31344],{"class":154},[127,150339,150340],{"class":147},"(self, name, age):\n",[127,150342,150343,150345,150347,150349],{"class":129,"line":151},[127,150344,31385],{"class":154},[127,150346,150180],{"class":147},[127,150348,725],{"class":290},[127,150350,150185],{"class":147},[127,150352,150353,150355,150357,150359],{"class":129,"line":167},[127,150354,31385],{"class":154},[127,150356,150192],{"class":147},[127,150358,725],{"class":290},[127,150360,150197],{"class":147},[127,150362,150363],{"class":129,"line":415},[127,150364,2942],{"emptyLinePlaceholder":606},[127,150366,150367,150369,150372],{"class":129,"line":421},[127,150368,31341],{"class":290},[127,150370,150371],{"class":154}," __str__",[127,150373,31347],{"class":147},[127,150375,150376,150378,150381,150384,150386,150388,150390,150393,150395,150397,150399],{"class":129,"line":1766},[127,150377,15294],{"class":290},[127,150379,150380],{"class":290}," f",[127,150382,150383],{"class":781},"\"Student(name=",[127,150385,149842],{"class":154},[127,150387,80830],{"class":147},[127,150389,1620],{"class":154},[127,150391,150392],{"class":781},", age=",[127,150394,149842],{"class":154},[127,150396,80842],{"class":147},[127,150398,1620],{"class":154},[127,150400,150401],{"class":781},")\"\n",[127,150403,150404],{"class":129,"line":1856},[127,150405,2942],{"emptyLinePlaceholder":606},[127,150407,150408],{"class":129,"line":1862},[127,150409,2942],{"emptyLinePlaceholder":606},[127,150411,150412,150414,150416,150418,150420,150422,150424],{"class":129,"line":1874},[127,150413,149871],{"class":147},[127,150415,725],{"class":290},[127,150417,150275],{"class":147},[127,150419,150278],{"class":781},[127,150421,12977],{"class":147},[127,150423,1324],{"class":154},[127,150425,687],{"class":147},[127,150427,150428,150430],{"class":129,"line":2155},[127,150429,30955],{"class":154},[127,150431,150432],{"class":147},"(student)\n",[14,150434,150436],{"id":150435},"_117-封装","11.7 封装",[19,150438,150439],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150441,150442],{},"Python 中以双下划线开头的属性通常视为私有属性。",[117,150444,150446],{"className":30918,"code":150445,"language":30920,"meta":122,"style":122},"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",[124,150447,150448,150457,150466,150478,150490,150494,150503,150512,150516,150526,150539,150550,150555,150566,150570,150579,150591,150602,150606,150619,150630,150634,150645,150649,150653,150671,150680,150689],{"__ignoreMap":122},[127,150449,150450,150452,150455],{"class":129,"line":130},[127,150451,15236],{"class":290},[127,150453,150454],{"class":143}," Account",[127,150456,4281],{"class":147},[127,150458,150459,150461,150463],{"class":129,"line":137},[127,150460,31341],{"class":290},[127,150462,31344],{"class":154},[127,150464,150465],{"class":147},"(self, owner, balance):\n",[127,150467,150468,150470,150473,150475],{"class":129,"line":151},[127,150469,31385],{"class":154},[127,150471,150472],{"class":147},".owner ",[127,150474,725],{"class":290},[127,150476,150477],{"class":147}," owner\n",[127,150479,150480,150482,150485,150487],{"class":129,"line":167},[127,150481,31385],{"class":154},[127,150483,150484],{"class":147},".__balance ",[127,150486,725],{"class":290},[127,150488,150489],{"class":147}," balance\n",[127,150491,150492],{"class":129,"line":415},[127,150493,2942],{"emptyLinePlaceholder":606},[127,150495,150496,150498,150501],{"class":129,"line":421},[127,150497,31341],{"class":290},[127,150499,150500],{"class":143}," get_balance",[127,150502,31347],{"class":147},[127,150504,150505,150507,150509],{"class":129,"line":1766},[127,150506,15294],{"class":290},[127,150508,39413],{"class":154},[127,150510,150511],{"class":147},".__balance\n",[127,150513,150514],{"class":129,"line":1856},[127,150515,2942],{"emptyLinePlaceholder":606},[127,150517,150518,150520,150523],{"class":129,"line":1862},[127,150519,31341],{"class":290},[127,150521,150522],{"class":143}," deposit",[127,150524,150525],{"class":147},"(self, money):\n",[127,150527,150528,150530,150533,150535,150537],{"class":129,"line":1874},[127,150529,3039],{"class":290},[127,150531,150532],{"class":147}," money ",[127,150534,2131],{"class":290},[127,150536,4635],{"class":154},[127,150538,4281],{"class":147},[127,150540,150541,150543,150545,150548],{"class":129,"line":2155},[127,150542,35190],{"class":154},[127,150544,681],{"class":147},[127,150546,150547],{"class":781},"\"存款金额必须大于0\"",[127,150549,687],{"class":147},[127,150551,150552],{"class":129,"line":2160},[127,150553,150554],{"class":290},"            return\n",[127,150556,150557,150559,150561,150563],{"class":129,"line":2166},[127,150558,31385],{"class":154},[127,150560,150484],{"class":147},[127,150562,10019],{"class":290},[127,150564,150565],{"class":147}," money\n",[127,150567,150568],{"class":129,"line":2171},[127,150569,2942],{"emptyLinePlaceholder":606},[127,150571,150572,150574,150577],{"class":129,"line":2185},[127,150573,31341],{"class":290},[127,150575,150576],{"class":143}," withdraw",[127,150578,150525],{"class":147},[127,150580,150581,150583,150585,150587,150589],{"class":129,"line":2190},[127,150582,3039],{"class":290},[127,150584,150532],{"class":147},[127,150586,2131],{"class":290},[127,150588,4635],{"class":154},[127,150590,4281],{"class":147},[127,150592,150593,150595,150597,150600],{"class":129,"line":2196},[127,150594,35190],{"class":154},[127,150596,681],{"class":147},[127,150598,150599],{"class":781},"\"取款金额必须大于0\"",[127,150601,687],{"class":147},[127,150603,150604],{"class":129,"line":2217},[127,150605,150554],{"class":290},[127,150607,150608,150610,150612,150614,150616],{"class":129,"line":2222},[127,150609,3039],{"class":290},[127,150611,150532],{"class":147},[127,150613,1634],{"class":290},[127,150615,39413],{"class":154},[127,150617,150618],{"class":147},".__balance:\n",[127,150620,150621,150623,150625,150628],{"class":129,"line":2236},[127,150622,35190],{"class":154},[127,150624,681],{"class":147},[127,150626,150627],{"class":781},"\"余额不足\"",[127,150629,687],{"class":147},[127,150631,150632],{"class":129,"line":2241},[127,150633,150554],{"class":290},[127,150635,150636,150638,150640,150643],{"class":129,"line":2270},[127,150637,31385],{"class":154},[127,150639,150484],{"class":147},[127,150641,150642],{"class":290},"-=",[127,150644,150565],{"class":147},[127,150646,150647],{"class":129,"line":2275},[127,150648,2942],{"emptyLinePlaceholder":606},[127,150650,150651],{"class":129,"line":2292},[127,150652,2942],{"emptyLinePlaceholder":606},[127,150654,150655,150658,150660,150663,150665,150667,150669],{"class":129,"line":2297},[127,150656,150657],{"class":147},"account ",[127,150659,725],{"class":290},[127,150661,150662],{"class":147}," Account(",[127,150664,150278],{"class":781},[127,150666,12977],{"class":147},[127,150668,6952],{"class":154},[127,150670,687],{"class":147},[127,150672,150673,150676,150678],{"class":129,"line":2302},[127,150674,150675],{"class":147},"account.deposit(",[127,150677,2265],{"class":154},[127,150679,687],{"class":147},[127,150681,150682,150685,150687],{"class":129,"line":2307},[127,150683,150684],{"class":147},"account.withdraw(",[127,150686,986],{"class":154},[127,150688,687],{"class":147},[127,150690,150691,150693],{"class":129,"line":2321},[127,150692,30955],{"class":154},[127,150694,150695],{"class":147},"(account.get_balance())\n",[19,150697,150698],{},"封装的意义是避免外部随意修改内部状态。",[14,150700,150702],{"id":150701},"_118-继承","11.8 继承",[19,150704,150705],{},"继承可以让子类复用父类的属性和方法。",[117,150707,150709],{"className":30918,"code":150708,"language":30920,"meta":122,"style":122},"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",[124,150710,150711,150720,150729,150740,150744,150748,150762,150771,150782,150786,150790,150800,150805],{"__ignoreMap":122},[127,150712,150713,150715,150718],{"class":129,"line":130},[127,150714,15236],{"class":290},[127,150716,150717],{"class":143}," Animal",[127,150719,4281],{"class":147},[127,150721,150722,150724,150727],{"class":129,"line":137},[127,150723,31341],{"class":290},[127,150725,150726],{"class":143}," eat",[127,150728,31347],{"class":147},[127,150730,150731,150733,150735,150738],{"class":129,"line":151},[127,150732,32991],{"class":154},[127,150734,681],{"class":147},[127,150736,150737],{"class":781},"\"吃东西\"",[127,150739,687],{"class":147},[127,150741,150742],{"class":129,"line":167},[127,150743,2942],{"emptyLinePlaceholder":606},[127,150745,150746],{"class":129,"line":415},[127,150747,2942],{"emptyLinePlaceholder":606},[127,150749,150750,150752,150755,150757,150760],{"class":129,"line":421},[127,150751,15236],{"class":290},[127,150753,150754],{"class":143}," Dog",[127,150756,681],{"class":147},[127,150758,150759],{"class":143},"Animal",[127,150761,31326],{"class":147},[127,150763,150764,150766,150769],{"class":129,"line":1766},[127,150765,31341],{"class":290},[127,150767,150768],{"class":143}," bark",[127,150770,31347],{"class":147},[127,150772,150773,150775,150777,150780],{"class":129,"line":1856},[127,150774,32991],{"class":154},[127,150776,681],{"class":147},[127,150778,150779],{"class":781},"\"汪汪\"",[127,150781,687],{"class":147},[127,150783,150784],{"class":129,"line":1862},[127,150785,2942],{"emptyLinePlaceholder":606},[127,150787,150788],{"class":129,"line":1874},[127,150789,2942],{"emptyLinePlaceholder":606},[127,150791,150792,150795,150797],{"class":129,"line":2155},[127,150793,150794],{"class":147},"dog ",[127,150796,725],{"class":290},[127,150798,150799],{"class":147}," Dog()\n",[127,150801,150802],{"class":129,"line":2160},[127,150803,150804],{"class":147},"dog.eat()\n",[127,150806,150807],{"class":129,"line":2166},[127,150808,150809],{"class":147},"dog.bark()\n",[19,150811,150812],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150814,150816],{"id":150815},"_119-方法重写","11.9 方法重写",[117,150818,150820],{"className":30918,"code":150819,"language":30920,"meta":122,"style":122},"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",[124,150821,150822,150830,150839,150850,150854,150858,150870,150878,150888,150892,150896,150909,150917,150928,150932,150936,150944,150954,150958,150963],{"__ignoreMap":122},[127,150823,150824,150826,150828],{"class":129,"line":130},[127,150825,15236],{"class":290},[127,150827,150717],{"class":143},[127,150829,4281],{"class":147},[127,150831,150832,150834,150837],{"class":129,"line":137},[127,150833,31341],{"class":290},[127,150835,150836],{"class":143}," speak",[127,150838,31347],{"class":147},[127,150840,150841,150843,150845,150848],{"class":129,"line":151},[127,150842,32991],{"class":154},[127,150844,681],{"class":147},[127,150846,150847],{"class":781},"\"动物叫\"",[127,150849,687],{"class":147},[127,150851,150852],{"class":129,"line":167},[127,150853,2942],{"emptyLinePlaceholder":606},[127,150855,150856],{"class":129,"line":415},[127,150857,2942],{"emptyLinePlaceholder":606},[127,150859,150860,150862,150864,150866,150868],{"class":129,"line":421},[127,150861,15236],{"class":290},[127,150863,150754],{"class":143},[127,150865,681],{"class":147},[127,150867,150759],{"class":143},[127,150869,31326],{"class":147},[127,150871,150872,150874,150876],{"class":129,"line":1766},[127,150873,31341],{"class":290},[127,150875,150836],{"class":143},[127,150877,31347],{"class":147},[127,150879,150880,150882,150884,150886],{"class":129,"line":1856},[127,150881,32991],{"class":154},[127,150883,681],{"class":147},[127,150885,150779],{"class":781},[127,150887,687],{"class":147},[127,150889,150890],{"class":129,"line":1862},[127,150891,2942],{"emptyLinePlaceholder":606},[127,150893,150894],{"class":129,"line":1874},[127,150895,2942],{"emptyLinePlaceholder":606},[127,150897,150898,150900,150903,150905,150907],{"class":129,"line":2155},[127,150899,15236],{"class":290},[127,150901,150902],{"class":143}," Cat",[127,150904,681],{"class":147},[127,150906,150759],{"class":143},[127,150908,31326],{"class":147},[127,150910,150911,150913,150915],{"class":129,"line":2160},[127,150912,31341],{"class":290},[127,150914,150836],{"class":143},[127,150916,31347],{"class":147},[127,150918,150919,150921,150923,150926],{"class":129,"line":2166},[127,150920,32991],{"class":154},[127,150922,681],{"class":147},[127,150924,150925],{"class":781},"\"喵喵\"",[127,150927,687],{"class":147},[127,150929,150930],{"class":129,"line":2171},[127,150931,2942],{"emptyLinePlaceholder":606},[127,150933,150934],{"class":129,"line":2185},[127,150935,2942],{"emptyLinePlaceholder":606},[127,150937,150938,150940,150942],{"class":129,"line":2190},[127,150939,150794],{"class":147},[127,150941,725],{"class":290},[127,150943,150799],{"class":147},[127,150945,150946,150949,150951],{"class":129,"line":2196},[127,150947,150948],{"class":147},"cat ",[127,150950,725],{"class":290},[127,150952,150953],{"class":147}," Cat()\n",[127,150955,150956],{"class":129,"line":2217},[127,150957,2942],{"emptyLinePlaceholder":606},[127,150959,150960],{"class":129,"line":2222},[127,150961,150962],{"class":147},"dog.speak()\n",[127,150964,150965],{"class":129,"line":2236},[127,150966,150967],{"class":147},"cat.speak()\n",[14,150969,150971],{"id":150970},"_1110-super","11.10 super",[19,150973,150974,150975,150978],{},"子类可以通过 ",[124,150976,150977],{},"super()"," 调用父类方法。",[117,150980,150982],{"className":30918,"code":150981,"language":30920,"meta":122,"style":122},"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",[124,150983,150984,150992,151001,151011,151015,151019,151031,151040,151051,151061,151065,151069,151085],{"__ignoreMap":122},[127,150985,150986,150988,150990],{"class":129,"line":130},[127,150987,15236],{"class":290},[127,150989,16111],{"class":143},[127,150991,4281],{"class":147},[127,150993,150994,150996,150998],{"class":129,"line":137},[127,150995,31341],{"class":290},[127,150997,31344],{"class":154},[127,150999,151000],{"class":147},"(self, name):\n",[127,151002,151003,151005,151007,151009],{"class":129,"line":151},[127,151004,31385],{"class":154},[127,151006,150180],{"class":147},[127,151008,725],{"class":290},[127,151010,150185],{"class":147},[127,151012,151013],{"class":129,"line":167},[127,151014,2942],{"emptyLinePlaceholder":606},[127,151016,151017],{"class":129,"line":415},[127,151018,2942],{"emptyLinePlaceholder":606},[127,151020,151021,151023,151025,151027,151029],{"class":129,"line":421},[127,151022,15236],{"class":290},[127,151024,8440],{"class":143},[127,151026,681],{"class":147},[127,151028,19587],{"class":143},[127,151030,31326],{"class":147},[127,151032,151033,151035,151037],{"class":129,"line":1766},[127,151034,31341],{"class":290},[127,151036,31344],{"class":154},[127,151038,151039],{"class":147},"(self, name, score):\n",[127,151041,151042,151044,151046,151048],{"class":129,"line":1856},[127,151043,31357],{"class":154},[127,151045,17802],{"class":147},[127,151047,31369],{"class":154},[127,151049,151050],{"class":147},"(name)\n",[127,151052,151053,151055,151057,151059],{"class":129,"line":1862},[127,151054,31385],{"class":154},[127,151056,150204],{"class":147},[127,151058,725],{"class":290},[127,151060,2122],{"class":147},[127,151062,151063],{"class":129,"line":1874},[127,151064,2942],{"emptyLinePlaceholder":606},[127,151066,151067],{"class":129,"line":2155},[127,151068,2942],{"emptyLinePlaceholder":606},[127,151070,151071,151073,151075,151077,151079,151081,151083],{"class":129,"line":2160},[127,151072,149871],{"class":147},[127,151074,725],{"class":290},[127,151076,150275],{"class":147},[127,151078,150278],{"class":781},[127,151080,12977],{"class":147},[127,151082,1663],{"class":154},[127,151084,687],{"class":147},[127,151086,151087,151089],{"class":129,"line":2166},[127,151088,30955],{"class":154},[127,151090,151091],{"class":147},"(student.name, student.score)\n",[14,151093,151095],{"id":151094},"_1111-多态","11.11 多态",[19,151097,151098],{},"多态指不同对象响应同一个方法，表现出不同结果。",[117,151100,151102],{"className":30918,"code":151101,"language":30920,"meta":122,"style":122},"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",[124,151103,151104,151112,151120,151130,151134,151138,151146,151154,151164,151168,151172,151182,151187,151191,151195,151200],{"__ignoreMap":122},[127,151105,151106,151108,151110],{"class":129,"line":130},[127,151107,15236],{"class":290},[127,151109,150754],{"class":143},[127,151111,4281],{"class":147},[127,151113,151114,151116,151118],{"class":129,"line":137},[127,151115,31341],{"class":290},[127,151117,150836],{"class":143},[127,151119,31347],{"class":147},[127,151121,151122,151124,151126,151128],{"class":129,"line":151},[127,151123,32991],{"class":154},[127,151125,681],{"class":147},[127,151127,150779],{"class":781},[127,151129,687],{"class":147},[127,151131,151132],{"class":129,"line":167},[127,151133,2942],{"emptyLinePlaceholder":606},[127,151135,151136],{"class":129,"line":415},[127,151137,2942],{"emptyLinePlaceholder":606},[127,151139,151140,151142,151144],{"class":129,"line":421},[127,151141,15236],{"class":290},[127,151143,150902],{"class":143},[127,151145,4281],{"class":147},[127,151147,151148,151150,151152],{"class":129,"line":1766},[127,151149,31341],{"class":290},[127,151151,150836],{"class":143},[127,151153,31347],{"class":147},[127,151155,151156,151158,151160,151162],{"class":129,"line":1856},[127,151157,32991],{"class":154},[127,151159,681],{"class":147},[127,151161,150925],{"class":781},[127,151163,687],{"class":147},[127,151165,151166],{"class":129,"line":1862},[127,151167,2942],{"emptyLinePlaceholder":606},[127,151169,151170],{"class":129,"line":1874},[127,151171,2942],{"emptyLinePlaceholder":606},[127,151173,151174,151176,151179],{"class":129,"line":2155},[127,151175,32487],{"class":290},[127,151177,151178],{"class":143}," make_sound",[127,151180,151181],{"class":147},"(animal):\n",[127,151183,151184],{"class":129,"line":2160},[127,151185,151186],{"class":147},"    animal.speak()\n",[127,151188,151189],{"class":129,"line":2166},[127,151190,2942],{"emptyLinePlaceholder":606},[127,151192,151193],{"class":129,"line":2171},[127,151194,2942],{"emptyLinePlaceholder":606},[127,151196,151197],{"class":129,"line":2185},[127,151198,151199],{"class":147},"make_sound(Dog())\n",[127,151201,151202],{"class":129,"line":2190},[127,151203,151204],{"class":147},"make_sound(Cat())\n",[19,151206,151207],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151209,151211],{"id":151210},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151213,151214],{},"实例属性属于对象：",[117,151216,151218],{"className":30918,"code":151217,"language":30920,"meta":122,"style":122},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[124,151219,151220,151228,151236],{"__ignoreMap":122},[127,151221,151222,151224,151226],{"class":129,"line":130},[127,151223,15236],{"class":290},[127,151225,8440],{"class":143},[127,151227,4281],{"class":147},[127,151229,151230,151232,151234],{"class":129,"line":137},[127,151231,31341],{"class":290},[127,151233,31344],{"class":154},[127,151235,151000],{"class":147},[127,151237,151238,151240,151242,151244],{"class":129,"line":151},[127,151239,31385],{"class":154},[127,151241,150180],{"class":147},[127,151243,725],{"class":290},[127,151245,150185],{"class":147},[19,151247,151248],{},"类属性属于类，所有对象共享：",[117,151250,151252],{"className":30918,"code":151251,"language":30920,"meta":122,"style":122},"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",[124,151253,151254,151262,151272,151276,151284,151294,151298,151302,151315,151329,151333,151340,151347],{"__ignoreMap":122},[127,151255,151256,151258,151260],{"class":129,"line":130},[127,151257,15236],{"class":290},[127,151259,8440],{"class":143},[127,151261,4281],{"class":147},[127,151263,151264,151267,151269],{"class":129,"line":137},[127,151265,151266],{"class":147},"    school ",[127,151268,725],{"class":290},[127,151270,151271],{"class":781}," \"黑马学校\"\n",[127,151273,151274],{"class":129,"line":151},[127,151275,2942],{"emptyLinePlaceholder":606},[127,151277,151278,151280,151282],{"class":129,"line":167},[127,151279,31341],{"class":290},[127,151281,31344],{"class":154},[127,151283,151000],{"class":147},[127,151285,151286,151288,151290,151292],{"class":129,"line":415},[127,151287,31385],{"class":154},[127,151289,150180],{"class":147},[127,151291,725],{"class":290},[127,151293,150185],{"class":147},[127,151295,151296],{"class":129,"line":421},[127,151297,2942],{"emptyLinePlaceholder":606},[127,151299,151300],{"class":129,"line":1766},[127,151301,2942],{"emptyLinePlaceholder":606},[127,151303,151304,151307,151309,151311,151313],{"class":129,"line":1856},[127,151305,151306],{"class":147},"s1 ",[127,151308,725],{"class":290},[127,151310,150275],{"class":147},[127,151312,150278],{"class":781},[127,151314,687],{"class":147},[127,151316,151317,151320,151322,151324,151327],{"class":129,"line":1862},[127,151318,151319],{"class":147},"s2 ",[127,151321,725],{"class":290},[127,151323,150275],{"class":147},[127,151325,151326],{"class":781},"\"小红\"",[127,151328,687],{"class":147},[127,151330,151331],{"class":129,"line":1874},[127,151332,2942],{"emptyLinePlaceholder":606},[127,151334,151335,151337],{"class":129,"line":2155},[127,151336,30955],{"class":154},[127,151338,151339],{"class":147},"(s1.school)\n",[127,151341,151342,151344],{"class":129,"line":2160},[127,151343,30955],{"class":154},[127,151345,151346],{"class":147},"(s2.school)\n",[127,151348,151349,151351],{"class":129,"line":2166},[127,151350,30955],{"class":154},[127,151352,151353],{"class":147},"(Student.school)\n",[19,151355,151356],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151358,151360],{"id":151359},"_1113-类方法和静态方法","11.13 类方法和静态方法",[62,151362,151364],{"id":151363},"_11131-类方法","11.13.1 类方法",[19,151366,151367,151368,151371,151372,28925],{},"类方法使用 ",[124,151369,151370],{},"@classmethod","，第一个参数通常是 ",[124,151373,151374],{},"cls",[117,151376,151378],{"className":30918,"code":151377,"language":30920,"meta":122,"style":122},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[124,151379,151380,151388,151396,151400,151408,151418,151428,151432,151436],{"__ignoreMap":122},[127,151381,151382,151384,151386],{"class":129,"line":130},[127,151383,15236],{"class":290},[127,151385,8440],{"class":143},[127,151387,4281],{"class":147},[127,151389,151390,151392,151394],{"class":129,"line":137},[127,151391,151266],{"class":147},[127,151393,725],{"class":290},[127,151395,151271],{"class":781},[127,151397,151398],{"class":129,"line":151},[127,151399,2942],{"emptyLinePlaceholder":606},[127,151401,151402,151405],{"class":129,"line":167},[127,151403,151404],{"class":143},"    @",[127,151406,151407],{"class":154},"classmethod\n",[127,151409,151410,151412,151415],{"class":129,"line":415},[127,151411,31341],{"class":290},[127,151413,151414],{"class":143}," get_school",[127,151416,151417],{"class":147},"(cls):\n",[127,151419,151420,151422,151425],{"class":129,"line":421},[127,151421,15294],{"class":290},[127,151423,151424],{"class":154}," cls",[127,151426,151427],{"class":147},".school\n",[127,151429,151430],{"class":129,"line":1766},[127,151431,2942],{"emptyLinePlaceholder":606},[127,151433,151434],{"class":129,"line":1856},[127,151435,2942],{"emptyLinePlaceholder":606},[127,151437,151438,151440],{"class":129,"line":1862},[127,151439,30955],{"class":154},[127,151441,151442],{"class":147},"(Student.get_school())\n",[62,151444,151446],{"id":151445},"_11132-静态方法","11.13.2 静态方法",[19,151448,151449,151450,151453],{},"静态方法使用 ",[124,151451,151452],{},"@staticmethod","，不需要访问实例和类。",[117,151455,151457],{"className":30918,"code":151456,"language":30920,"meta":122,"style":122},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[124,151458,151459,151468,151475,151484,151495,151499,151503],{"__ignoreMap":122},[127,151460,151461,151463,151466],{"class":129,"line":130},[127,151462,15236],{"class":290},[127,151464,151465],{"class":143}," MathUtils",[127,151467,4281],{"class":147},[127,151469,151470,151472],{"class":129,"line":137},[127,151471,151404],{"class":143},[127,151473,151474],{"class":154},"staticmethod\n",[127,151476,151477,151479,151481],{"class":129,"line":151},[127,151478,31341],{"class":290},[127,151480,5751],{"class":143},[127,151482,151483],{"class":147},"(a, b):\n",[127,151485,151486,151488,151490,151492],{"class":129,"line":167},[127,151487,15294],{"class":290},[127,151489,11411],{"class":147},[127,151491,1156],{"class":290},[127,151493,151494],{"class":147}," b\n",[127,151496,151497],{"class":129,"line":415},[127,151498,2942],{"emptyLinePlaceholder":606},[127,151500,151501],{"class":129,"line":421},[127,151502,2942],{"emptyLinePlaceholder":606},[127,151504,151505,151507,151510,151512,151514,151516],{"class":129,"line":1766},[127,151506,30955],{"class":154},[127,151508,151509],{"class":147},"(MathUtils.add(",[127,151511,893],{"class":154},[127,151513,12977],{"class":147},[127,151515,530],{"class":154},[127,151517,31037],{"class":147},[19,151519,151520],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151522,151524],{"id":151523},"_1114-dataclass","11.14 dataclass",[19,151526,151527,151530],{},[124,151528,151529],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[117,151532,151534],{"className":30918,"code":151533,"language":30920,"meta":122,"style":122},"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",[124,151535,151536,151548,151552,151556,151561,151569,151577,151585,151593,151597,151601,151621],{"__ignoreMap":122},[127,151537,151538,151540,151543,151545],{"class":129,"line":130},[127,151539,31277],{"class":290},[127,151541,151542],{"class":147}," dataclasses ",[127,151544,30932],{"class":290},[127,151546,151547],{"class":147}," dataclass\n",[127,151549,151550],{"class":129,"line":137},[127,151551,2942],{"emptyLinePlaceholder":606},[127,151553,151554],{"class":129,"line":151},[127,151555,2942],{"emptyLinePlaceholder":606},[127,151557,151558],{"class":129,"line":167},[127,151559,151560],{"class":143},"@dataclass\n",[127,151562,151563,151565,151567],{"class":129,"line":415},[127,151564,15236],{"class":290},[127,151566,8440],{"class":143},[127,151568,4281],{"class":147},[127,151570,151571,151574],{"class":129,"line":421},[127,151572,151573],{"class":147},"    name: ",[127,151575,151576],{"class":154},"str\n",[127,151578,151579,151582],{"class":129,"line":1766},[127,151580,151581],{"class":147},"    age: ",[127,151583,151584],{"class":154},"int\n",[127,151586,151587,151590],{"class":129,"line":1856},[127,151588,151589],{"class":147},"    score: ",[127,151591,151592],{"class":154},"float\n",[127,151594,151595],{"class":129,"line":1862},[127,151596,2942],{"emptyLinePlaceholder":606},[127,151598,151599],{"class":129,"line":1874},[127,151600,2942],{"emptyLinePlaceholder":606},[127,151602,151603,151605,151607,151609,151611,151613,151615,151617,151619],{"class":129,"line":2155},[127,151604,149871],{"class":147},[127,151606,725],{"class":290},[127,151608,150275],{"class":147},[127,151610,150278],{"class":781},[127,151612,12977],{"class":147},[127,151614,1324],{"class":154},[127,151616,12977],{"class":147},[127,151618,1663],{"class":154},[127,151620,687],{"class":147},[127,151622,151623,151625],{"class":129,"line":2160},[127,151624,30955],{"class":154},[127,151626,150432],{"class":147},[19,151628,151629,151630,888,151632,151635],{},"它会自动生成 ",[124,151631,31369],{},[124,151633,151634],{},"__repr__"," 等方法。适合数据模型类。",[14,151637,151639],{"id":151638},"_1115-小案例学生类","11.15 小案例：学生类",[117,151641,151643],{"className":30918,"code":151642,"language":30920,"meta":122,"style":122},"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",[124,151644,151645,151653,151662,151674,151684,151694,151704,151708,151717,151730,151734,151743,151749,151761,151773,151785,151797,151801,151805,151811,151821,151830,151840,151848,151856,151865,151869,151873,151881,151917,151921,151925,151950,151957],{"__ignoreMap":122},[127,151646,151647,151649,151651],{"class":129,"line":130},[127,151648,15236],{"class":290},[127,151650,8440],{"class":143},[127,151652,4281],{"class":147},[127,151654,151655,151657,151659],{"class":129,"line":137},[127,151656,31341],{"class":290},[127,151658,31344],{"class":154},[127,151660,151661],{"class":147},"(self, student_id, name, age, score):\n",[127,151663,151664,151666,151669,151671],{"class":129,"line":151},[127,151665,31385],{"class":154},[127,151667,151668],{"class":147},".student_id ",[127,151670,725],{"class":290},[127,151672,151673],{"class":147}," student_id\n",[127,151675,151676,151678,151680,151682],{"class":129,"line":167},[127,151677,31385],{"class":154},[127,151679,150180],{"class":147},[127,151681,725],{"class":290},[127,151683,150185],{"class":147},[127,151685,151686,151688,151690,151692],{"class":129,"line":415},[127,151687,31385],{"class":154},[127,151689,150192],{"class":147},[127,151691,725],{"class":290},[127,151693,150197],{"class":147},[127,151695,151696,151698,151700,151702],{"class":129,"line":421},[127,151697,31385],{"class":154},[127,151699,150204],{"class":147},[127,151701,725],{"class":290},[127,151703,2122],{"class":147},[127,151705,151706],{"class":129,"line":1766},[127,151707,2942],{"emptyLinePlaceholder":606},[127,151709,151710,151712,151715],{"class":129,"line":1856},[127,151711,31341],{"class":290},[127,151713,151714],{"class":143}," is_passed",[127,151716,31347],{"class":147},[127,151718,151719,151721,151723,151725,151727],{"class":129,"line":1862},[127,151720,15294],{"class":290},[127,151722,39413],{"class":154},[127,151724,150204],{"class":147},[127,151726,2253],{"class":290},[127,151728,151729],{"class":154}," 60\n",[127,151731,151732],{"class":129,"line":1874},[127,151733,2942],{"emptyLinePlaceholder":606},[127,151735,151736,151738,151741],{"class":129,"line":2155},[127,151737,31341],{"class":290},[127,151739,151740],{"class":143}," to_dict",[127,151742,31347],{"class":147},[127,151744,151745,151747],{"class":129,"line":2160},[127,151746,15294],{"class":290},[127,151748,148],{"class":147},[127,151750,151751,151754,151756,151758],{"class":129,"line":2166},[127,151752,151753],{"class":781},"            \"student_id\"",[127,151755,158],{"class":147},[127,151757,31363],{"class":154},[127,151759,151760],{"class":147},".student_id,\n",[127,151762,151763,151766,151768,151770],{"class":129,"line":2171},[127,151764,151765],{"class":781},"            \"name\"",[127,151767,158],{"class":147},[127,151769,31363],{"class":154},[127,151771,151772],{"class":147},".name,\n",[127,151774,151775,151778,151780,151782],{"class":129,"line":2185},[127,151776,151777],{"class":781},"            \"age\"",[127,151779,158],{"class":147},[127,151781,31363],{"class":154},[127,151783,151784],{"class":147},".age,\n",[127,151786,151787,151790,151792,151794],{"class":129,"line":2190},[127,151788,151789],{"class":781},"            \"score\"",[127,151791,158],{"class":147},[127,151793,31363],{"class":154},[127,151795,151796],{"class":147},".score,\n",[127,151798,151799],{"class":129,"line":2196},[127,151800,3071],{"class":147},[127,151802,151803],{"class":129,"line":2217},[127,151804,2942],{"emptyLinePlaceholder":606},[127,151806,151807,151809],{"class":129,"line":2222},[127,151808,151404],{"class":143},[127,151810,151407],{"class":154},[127,151812,151813,151815,151818],{"class":129,"line":2236},[127,151814,31341],{"class":290},[127,151816,151817],{"class":143}," from_dict",[127,151819,151820],{"class":147},"(cls, data):\n",[127,151822,151823,151825,151827],{"class":129,"line":2241},[127,151824,15294],{"class":290},[127,151826,151424],{"class":154},[127,151828,151829],{"class":147},"(\n",[127,151831,151832,151835,151838],{"class":129,"line":2270},[127,151833,151834],{"class":147},"            data[",[127,151836,151837],{"class":781},"\"student_id\"",[127,151839,88365],{"class":147},[127,151841,151842,151844,151846],{"class":129,"line":2275},[127,151843,151834],{"class":147},[127,151845,63212],{"class":781},[127,151847,88365],{"class":147},[127,151849,151850,151852,151854],{"class":129,"line":2292},[127,151851,151834],{"class":147},[127,151853,69657],{"class":781},[127,151855,88365],{"class":147},[127,151857,151858,151860,151863],{"class":129,"line":2297},[127,151859,151834],{"class":147},[127,151861,151862],{"class":781},"\"score\"",[127,151864,88365],{"class":147},[127,151866,151867],{"class":129,"line":2302},[127,151868,38666],{"class":147},[127,151870,151871],{"class":129,"line":2307},[127,151872,2942],{"emptyLinePlaceholder":606},[127,151874,151875,151877,151879],{"class":129,"line":2321},[127,151876,31341],{"class":290},[127,151878,150371],{"class":154},[127,151880,31347],{"class":147},[127,151882,151883,151885,151887,151889,151891,151894,151896,151899,151901,151903,151905,151907,151909,151911,151913,151915],{"class":129,"line":2326},[127,151884,15294],{"class":290},[127,151886,150380],{"class":290},[127,151888,926],{"class":781},[127,151890,149842],{"class":154},[127,151892,151893],{"class":147},".student_id",[127,151895,1620],{"class":154},[127,151897,151898],{"class":154}," {self",[127,151900,80830],{"class":147},[127,151902,1620],{"class":154},[127,151904,151898],{"class":154},[127,151906,80842],{"class":147},[127,151908,1620],{"class":154},[127,151910,151898],{"class":154},[127,151912,150252],{"class":147},[127,151914,1620],{"class":154},[127,151916,25674],{"class":781},[127,151918,151919],{"class":129,"line":3119},[127,151920,2942],{"emptyLinePlaceholder":606},[127,151922,151923],{"class":129,"line":3133},[127,151924,2942],{"emptyLinePlaceholder":606},[127,151926,151927,151929,151931,151933,151936,151938,151940,151942,151944,151946,151948],{"class":129,"line":3141},[127,151928,149871],{"class":147},[127,151930,725],{"class":290},[127,151932,150275],{"class":147},[127,151934,151935],{"class":781},"\"001\"",[127,151937,12977],{"class":147},[127,151939,150278],{"class":781},[127,151941,12977],{"class":147},[127,151943,1324],{"class":154},[127,151945,12977],{"class":147},[127,151947,1663],{"class":154},[127,151949,687],{"class":147},[127,151951,151952,151954],{"class":129,"line":3146},[127,151953,30955],{"class":154},[127,151955,151956],{"class":147},"(student.is_passed())\n",[127,151958,151959,151961],{"class":129,"line":3152},[127,151960,30955],{"class":154},[127,151962,151963],{"class":147},"(student.to_dict())\n",[19,151965,151966,101547,151969,151972],{},[124,151967,151968],{},"to_dict()",[124,151970,151971],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151974,151976],{"id":151975},"_1116-易错点","11.16 易错点",[632,151978,151979,151985,151991,151996,151999,152002],{},[635,151980,151981,151982,28925],{},"类名推荐使用大驼峰，如 ",[124,151983,151984],{},"StudentManager",[635,151986,151987,151988,151990],{},"方法第一个参数必须写 ",[124,151989,31363],{},"，调用时不用传。",[635,151992,151993,151995],{},[124,151994,31369],{}," 不是普通方法，它在创建对象时自动执行。",[635,151997,151998],{},"私有属性不是绝对安全，只是约定和名称改写。",[635,152000,152001],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[635,152003,152004],{},"类中方法太多时，说明职责可能过重。",[14,152006,152008],{"id":152007},"_1117-本章练习","11.17 本章练习",[632,152010,152011,152017,152023,152028,152041],{},[635,152012,152013,152014,152016],{},"定义 ",[124,152015,149958],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[635,152018,152013,152019,152022],{},[124,152020,152021],{},"Account"," 类，实现存款、取款、查询余额。",[635,152024,152013,152025,152027],{},[124,152026,17767],{}," 类，计算圆的周长和面积。",[635,152029,152013,152030,888,152033,152036,152037,152040],{},[124,152031,152032],{},"Dog",[124,152034,152035],{},"Cat"," 类，并用同一个函数调用它们的 ",[124,152038,152039],{},"speak()"," 方法。",[635,152042,104895,152043,152045,152046,28925],{},[124,152044,151529],{}," 定义一个商品类 ",[124,152047,152048],{},"Product",[575,152050,152051],{},"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":122,"searchDepth":137,"depth":137,"links":152053},[152054,152055,152056,152057,152058,152059,152061,152062,152063,152064,152065,152066,152067,152071,152072,152073,152074],{"id":149722,"depth":137,"text":149723},{"id":149905,"depth":137,"text":149906},{"id":149969,"depth":137,"text":149970},{"id":150046,"depth":137,"text":150047},{"id":150145,"depth":137,"text":150146},{"id":150309,"depth":137,"text":152060},"11.6 str",{"id":150435,"depth":137,"text":150436},{"id":150701,"depth":137,"text":150702},{"id":150815,"depth":137,"text":150816},{"id":150970,"depth":137,"text":150971},{"id":151094,"depth":137,"text":151095},{"id":151210,"depth":137,"text":151211},{"id":151359,"depth":137,"text":151360,"children":152068},[152069,152070],{"id":151363,"depth":151,"text":151364},{"id":151445,"depth":151,"text":151446},{"id":151523,"depth":137,"text":151524},{"id":151638,"depth":137,"text":151639},{"id":151975,"depth":137,"text":151976},{"id":152007,"depth":137,"text":152008},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149714,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152081,"title":152082,"body":152083,"description":603,"extension":604,"meta":155396,"navigation":606,"path":155397,"seo":155398,"stem":155399,"__hash__":155400},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152084,"toc":155372},[152085,152088,152092,152095,152098,152127,152130,152138,152142,152146,152149,152172,152175,152181,152185,153631,153634,153655,153659,153662,153674,153677,153861,153864,153990,153993,153997,154001,154137,154141,154227,154231,154313,154317,154354,154358,154547,154551,154554,154784,154788,154791,154972,154975,154979,154982,154988,154991,155017,155021,155024,155038,155041,155066,155069,155083,155086,155103,155106,155123,155126,155143,155147,155173,155177,155200,155204,155207,155209,155215,155217,155238,155241,155247,155253,155257,155260,155336,155339,155343,155369],[10,152086,152082],{"id":152087},"_12-综合案例与复习路线",[14,152089,152091],{"id":152090},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152093,152094],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152096,152097],{},"一个合格的入门综合项目最好覆盖：",[632,152099,152100,152103,152106,152109,152112,152115,152118,152121,152124],{},[635,152101,152102],{},"输入输出。",[635,152104,152105],{},"判断和循环。",[635,152107,152108],{},"函数拆分。",[635,152110,152111],{},"列表、字典等容器。",[635,152113,152114],{},"文件持久化。",[635,152116,152117],{},"异常处理。",[635,152119,152120],{},"模块拆分。",[635,152122,152123],{},"可选：面向对象。",[635,152125,152126],{},"可选：数据可视化。",[19,152128,152129],{},"本章整理两个方向：",[632,152131,152132,152135],{},[635,152133,152134],{},"学生管理系统。",[635,152136,152137],{},"销售数据统计和可视化。",[14,152139,152141],{"id":152140},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[62,152143,152145],{"id":152144},"_1221-需求","12.2.1 需求",[19,152147,152148],{},"实现一个命令行学生管理系统：",[632,152150,152151,152154,152157,152160,152163,152166,152169],{},[635,152152,152153],{},"添加学生。",[635,152155,152156],{},"删除学生。",[635,152158,152159],{},"修改学生。",[635,152161,152162],{},"查询学生。",[635,152164,152165],{},"显示所有学生。",[635,152167,152168],{},"保存到 JSON 文件。",[635,152170,152171],{},"程序启动时自动读取 JSON 文件。",[19,152173,152174],{},"学生字段：",[117,152176,152179],{"className":152177,"code":152178,"language":5729,"meta":122},[5727],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[124,152180,152178],{"__ignoreMap":122},[14,152182,152184],{"id":152183},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[117,152186,152188],{"className":30918,"code":152187,"language":30920,"meta":122,"style":122},"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",[124,152189,152190,152196,152206,152210,152224,152228,152232,152241,152253,152259,152263,152269,152300,152310,152317,152328,152334,152338,152342,152352,152383,152409,152413,152417,152426,152437,152448,152459,152470,152481,152492,152503,152507,152511,152521,152533,152549,152556,152563,152567,152571,152581,152589,152596,152609,152619,152630,152634,152638,152647,152655,152661,152673,152681,152692,152696,152700,152709,152725,152729,152736,152747,152752,152756,152772,152787,152802,152806,152811,152819,152827,152835,152843,152847,152852,152863,152867,152871,152880,152895,152905,152909,152921,152932,152936,152940,152945,152949,152960,152964,152968,152977,152992,153000,153004,153016,153026,153030,153034,153049,153062,153075,153079,153092,153104,153116,153120,153124,153135,153139,153143,153152,153167,153175,153179,153191,153201,153205,153209,153214,153218,153222,153232,153238,153260,153279,153298,153317,153322,153326,153330,153339,153347,153358,153362,153366,153392,153402,153407,153411,153415,153423,153433,153437,153445,153450,153466,153470,153484,153489,153503,153508,153521,153526,153539,153544,153557,153562,153575,153586,153590,153596,153607,153611,153615,153627],{"__ignoreMap":122},[127,152191,152192,152194],{"class":129,"line":130},[127,152193,30932],{"class":290},[127,152195,147481],{"class":147},[127,152197,152198,152200,152202,152204],{"class":129,"line":137},[127,152199,31277],{"class":290},[127,152201,108840],{"class":147},[127,152203,30932],{"class":290},[127,152205,108845],{"class":147},[127,152207,152208],{"class":129,"line":151},[127,152209,2942],{"emptyLinePlaceholder":606},[127,152211,152212,152215,152217,152219,152222],{"class":129,"line":167},[127,152213,152214],{"class":154},"DATA_FILE",[127,152216,14106],{"class":290},[127,152218,109074],{"class":147},[127,152220,152221],{"class":781},"\"students.json\"",[127,152223,687],{"class":147},[127,152225,152226],{"class":129,"line":415},[127,152227,2942],{"emptyLinePlaceholder":606},[127,152229,152230],{"class":129,"line":421},[127,152231,2942],{"emptyLinePlaceholder":606},[127,152233,152234,152236,152239],{"class":129,"line":1766},[127,152235,32487],{"class":290},[127,152237,152238],{"class":143}," load_students",[127,152240,32493],{"class":147},[127,152242,152243,152245,152247,152250],{"class":129,"line":1856},[127,152244,3643],{"class":290},[127,152246,39470],{"class":290},[127,152248,152249],{"class":154}," DATA_FILE",[127,152251,152252],{"class":147},".exists():\n",[127,152254,152255,152257],{"class":129,"line":1862},[127,152256,15294],{"class":290},[127,152258,52373],{"class":147},[127,152260,152261],{"class":129,"line":1874},[127,152262,2942],{"emptyLinePlaceholder":606},[127,152264,152265,152267],{"class":129,"line":2155},[127,152266,126313],{"class":290},[127,152268,4281],{"class":147},[127,152270,152271,152274,152276,152278,152280,152282,152284,152286,152288,152290,152292,152294,152296,152298],{"class":129,"line":2160},[127,152272,152273],{"class":290},"        with",[127,152275,147181],{"class":154},[127,152277,681],{"class":147},[127,152279,152214],{"class":154},[127,152281,12977],{"class":147},[127,152283,147191],{"class":781},[127,152285,12977],{"class":147},[127,152287,147196],{"class":5758},[127,152289,725],{"class":290},[127,152291,147201],{"class":781},[127,152293,14256],{"class":147},[127,152295,31923],{"class":290},[127,152297,148543],{"class":5758},[127,152299,4281],{"class":147},[127,152301,152302,152304,152306,152308],{"class":129,"line":2166},[127,152303,16273],{"class":290},[127,152305,148554],{"class":147},[127,152307,45894],{"class":5758},[127,152309,687],{"class":147},[127,152311,152312,152314],{"class":129,"line":2171},[127,152313,126341],{"class":290},[127,152315,152316],{"class":147}," json.JSONDecodeError:\n",[127,152318,152319,152321,152323,152326],{"class":129,"line":2185},[127,152320,32991],{"class":154},[127,152322,681],{"class":147},[127,152324,152325],{"class":781},"\"数据文件格式错误，已使用空数据启动\"",[127,152327,687],{"class":147},[127,152329,152330,152332],{"class":129,"line":2190},[127,152331,15294],{"class":290},[127,152333,52373],{"class":147},[127,152335,152336],{"class":129,"line":2196},[127,152337,2942],{"emptyLinePlaceholder":606},[127,152339,152340],{"class":129,"line":2217},[127,152341,2942],{"emptyLinePlaceholder":606},[127,152343,152344,152346,152349],{"class":129,"line":2222},[127,152345,32487],{"class":290},[127,152347,152348],{"class":143}," save_students",[127,152350,152351],{"class":147},"(students):\n",[127,152353,152354,152356,152358,152360,152362,152364,152367,152369,152371,152373,152375,152377,152379,152381],{"class":129,"line":2236},[127,152355,34718],{"class":290},[127,152357,147181],{"class":154},[127,152359,681],{"class":147},[127,152361,152214],{"class":154},[127,152363,12977],{"class":147},[127,152365,152366],{"class":781},"\"w\"",[127,152368,12977],{"class":147},[127,152370,147196],{"class":5758},[127,152372,725],{"class":290},[127,152374,147201],{"class":781},[127,152376,14256],{"class":147},[127,152378,31923],{"class":290},[127,152380,148543],{"class":5758},[127,152382,4281],{"class":147},[127,152384,152385,152388,152390,152392,152394,152396,152398,152400,152403,152405,152407],{"class":129,"line":2241},[127,152386,152387],{"class":147},"        json.dump(students, ",[127,152389,45894],{"class":5758},[127,152391,12977],{"class":147},[127,152393,147527],{"class":5758},[127,152395,725],{"class":290},[127,152397,34527],{"class":154},[127,152399,12977],{"class":147},[127,152401,152402],{"class":5758},"indent",[127,152404,725],{"class":290},[127,152406,530],{"class":154},[127,152408,687],{"class":147},[127,152410,152411],{"class":129,"line":2270},[127,152412,2942],{"emptyLinePlaceholder":606},[127,152414,152415],{"class":129,"line":2275},[127,152416,2942],{"emptyLinePlaceholder":606},[127,152418,152419,152421,152424],{"class":129,"line":2292},[127,152420,32487],{"class":290},[127,152422,152423],{"class":143}," show_menu",[127,152425,32493],{"class":147},[127,152427,152428,152430,152432,152435],{"class":129,"line":2297},[127,152429,31839],{"class":154},[127,152431,681],{"class":147},[127,152433,152434],{"class":781},"\"====== 学生管理系统 ======\"",[127,152436,687],{"class":147},[127,152438,152439,152441,152443,152446],{"class":129,"line":2302},[127,152440,31839],{"class":154},[127,152442,681],{"class":147},[127,152444,152445],{"class":781},"\"1. 添加学生\"",[127,152447,687],{"class":147},[127,152449,152450,152452,152454,152457],{"class":129,"line":2307},[127,152451,31839],{"class":154},[127,152453,681],{"class":147},[127,152455,152456],{"class":781},"\"2. 删除学生\"",[127,152458,687],{"class":147},[127,152460,152461,152463,152465,152468],{"class":129,"line":2321},[127,152462,31839],{"class":154},[127,152464,681],{"class":147},[127,152466,152467],{"class":781},"\"3. 修改学生\"",[127,152469,687],{"class":147},[127,152471,152472,152474,152476,152479],{"class":129,"line":2326},[127,152473,31839],{"class":154},[127,152475,681],{"class":147},[127,152477,152478],{"class":781},"\"4. 查询学生\"",[127,152480,687],{"class":147},[127,152482,152483,152485,152487,152490],{"class":129,"line":3119},[127,152484,31839],{"class":154},[127,152486,681],{"class":147},[127,152488,152489],{"class":781},"\"5. 显示所有学生\"",[127,152491,687],{"class":147},[127,152493,152494,152496,152498,152501],{"class":129,"line":3133},[127,152495,31839],{"class":154},[127,152497,681],{"class":147},[127,152499,152500],{"class":781},"\"0. 退出系统\"",[127,152502,687],{"class":147},[127,152504,152505],{"class":129,"line":3141},[127,152506,2942],{"emptyLinePlaceholder":606},[127,152508,152509],{"class":129,"line":3146},[127,152510,2942],{"emptyLinePlaceholder":606},[127,152512,152513,152515,152518],{"class":129,"line":3152},[127,152514,32487],{"class":290},[127,152516,152517],{"class":143}," find_student",[127,152519,152520],{"class":147},"(students, student_id):\n",[127,152522,152523,152525,152528,152530],{"class":129,"line":3158},[127,152524,3743],{"class":290},[127,152526,152527],{"class":147}," student ",[127,152529,26584],{"class":290},[127,152531,152532],{"class":147}," students:\n",[127,152534,152535,152537,152540,152542,152544,152546],{"class":129,"line":3163},[127,152536,3039],{"class":290},[127,152538,152539],{"class":147}," student[",[127,152541,151837],{"class":781},[127,152543,4985],{"class":147},[127,152545,3491],{"class":290},[127,152547,152548],{"class":147}," student_id:\n",[127,152550,152551,152553],{"class":129,"line":8490},[127,152552,16273],{"class":290},[127,152554,152555],{"class":147}," student\n",[127,152557,152558,152560],{"class":129,"line":8514},[127,152559,4632],{"class":290},[127,152561,152562],{"class":154}," None\n",[127,152564,152565],{"class":129,"line":8519},[127,152566,2942],{"emptyLinePlaceholder":606},[127,152568,152569],{"class":129,"line":8525},[127,152570,2942],{"emptyLinePlaceholder":606},[127,152572,152573,152575,152578],{"class":129,"line":8552},[127,152574,32487],{"class":290},[127,152576,152577],{"class":143}," input_int",[127,152579,152580],{"class":147},"(prompt):\n",[127,152582,152583,152585,152587],{"class":129,"line":8557},[127,152584,2793],{"class":290},[127,152586,95821],{"class":154},[127,152588,4281],{"class":147},[127,152590,152591,152594],{"class":129,"line":8563},[127,152592,152593],{"class":290},"        try",[127,152595,4281],{"class":147},[127,152597,152598,152600,152602,152604,152606],{"class":129,"line":8575},[127,152599,16273],{"class":290},[127,152601,2924],{"class":154},[127,152603,681],{"class":147},[127,152605,54356],{"class":154},[127,152607,152608],{"class":147},"(prompt))\n",[127,152610,152611,152614,152617],{"class":129,"line":8587},[127,152612,152613],{"class":290},"        except",[127,152615,152616],{"class":154}," ValueError",[127,152618,4281],{"class":147},[127,152620,152621,152623,152625,152628],{"class":129,"line":8599},[127,152622,35190],{"class":154},[127,152624,681],{"class":147},[127,152626,152627],{"class":781},"\"请输入整数\"",[127,152629,687],{"class":147},[127,152631,152632],{"class":129,"line":10258},[127,152633,2942],{"emptyLinePlaceholder":606},[127,152635,152636],{"class":129,"line":10283},[127,152637,2942],{"emptyLinePlaceholder":606},[127,152639,152640,152642,152645],{"class":129,"line":10306},[127,152641,32487],{"class":290},[127,152643,152644],{"class":143}," input_float",[127,152646,152580],{"class":147},[127,152648,152649,152651,152653],{"class":129,"line":10330},[127,152650,2793],{"class":290},[127,152652,95821],{"class":154},[127,152654,4281],{"class":147},[127,152656,152657,152659],{"class":129,"line":10335},[127,152658,152593],{"class":290},[127,152660,4281],{"class":147},[127,152662,152663,152665,152667,152669,152671],{"class":129,"line":10340},[127,152664,16273],{"class":290},[127,152666,110326],{"class":154},[127,152668,681],{"class":147},[127,152670,54356],{"class":154},[127,152672,152608],{"class":147},[127,152674,152675,152677,152679],{"class":129,"line":10345},[127,152676,152613],{"class":290},[127,152678,152616],{"class":154},[127,152680,4281],{"class":147},[127,152682,152683,152685,152687,152690],{"class":129,"line":10354},[127,152684,35190],{"class":154},[127,152686,681],{"class":147},[127,152688,152689],{"class":781},"\"请输入数字\"",[127,152691,687],{"class":147},[127,152693,152694],{"class":129,"line":10359},[127,152695,2942],{"emptyLinePlaceholder":606},[127,152697,152698],{"class":129,"line":10365},[127,152699,2942],{"emptyLinePlaceholder":606},[127,152701,152702,152704,152707],{"class":129,"line":10386},[127,152703,32487],{"class":290},[127,152705,152706],{"class":143}," add_student",[127,152708,152351],{"class":147},[127,152710,152711,152714,152716,152718,152720,152723],{"class":129,"line":10392},[127,152712,152713],{"class":147},"    student_id ",[127,152715,725],{"class":290},[127,152717,61138],{"class":154},[127,152719,681],{"class":147},[127,152721,152722],{"class":781},"\"请输入学号:\"",[127,152724,687],{"class":147},[127,152726,152727],{"class":129,"line":10406},[127,152728,2942],{"emptyLinePlaceholder":606},[127,152730,152731,152733],{"class":129,"line":10412},[127,152732,3643],{"class":290},[127,152734,152735],{"class":147}," find_student(students, student_id):\n",[127,152737,152738,152740,152742,152745],{"class":129,"line":10439},[127,152739,32991],{"class":154},[127,152741,681],{"class":147},[127,152743,152744],{"class":781},"\"学号已存在\"",[127,152746,687],{"class":147},[127,152748,152749],{"class":129,"line":10448},[127,152750,152751],{"class":290},"        return\n",[127,152753,152754],{"class":129,"line":10454},[127,152755,2942],{"emptyLinePlaceholder":606},[127,152757,152758,152761,152763,152765,152767,152770],{"class":129,"line":10462},[127,152759,152760],{"class":147},"    name ",[127,152762,725],{"class":290},[127,152764,61138],{"class":154},[127,152766,681],{"class":147},[127,152768,152769],{"class":781},"\"请输入姓名:\"",[127,152771,687],{"class":147},[127,152773,152774,152777,152779,152782,152785],{"class":129,"line":10467},[127,152775,152776],{"class":147},"    age ",[127,152778,725],{"class":290},[127,152780,152781],{"class":147}," input_int(",[127,152783,152784],{"class":781},"\"请输入年龄:\"",[127,152786,687],{"class":147},[127,152788,152789,152792,152794,152797,152800],{"class":129,"line":17145},[127,152790,152791],{"class":147},"    score ",[127,152793,725],{"class":290},[127,152795,152796],{"class":147}," input_float(",[127,152798,152799],{"class":781},"\"请输入成绩:\"",[127,152801,687],{"class":147},[127,152803,152804],{"class":129,"line":17151},[127,152805,2942],{"emptyLinePlaceholder":606},[127,152807,152808],{"class":129,"line":17174},[127,152809,152810],{"class":147},"    students.append({\n",[127,152812,152813,152816],{"class":129,"line":17180},[127,152814,152815],{"class":781},"        \"student_id\"",[127,152817,152818],{"class":147},": student_id,\n",[127,152820,152821,152824],{"class":129,"line":17203},[127,152822,152823],{"class":781},"        \"name\"",[127,152825,152826],{"class":147},": name,\n",[127,152828,152829,152832],{"class":129,"line":17217},[127,152830,152831],{"class":781},"        \"age\"",[127,152833,152834],{"class":147},": age,\n",[127,152836,152837,152840],{"class":129,"line":17237},[127,152838,152839],{"class":781},"        \"score\"",[127,152841,152842],{"class":147},": score,\n",[127,152844,152845],{"class":129,"line":17243},[127,152846,34001],{"class":147},[127,152848,152849],{"class":129,"line":17254},[127,152850,152851],{"class":147},"    save_students(students)\n",[127,152853,152854,152856,152858,152861],{"class":129,"line":17277},[127,152855,31839],{"class":154},[127,152857,681],{"class":147},[127,152859,152860],{"class":781},"\"添加成功\"",[127,152862,687],{"class":147},[127,152864,152865],{"class":129,"line":17299},[127,152866,2942],{"emptyLinePlaceholder":606},[127,152868,152869],{"class":129,"line":17304},[127,152870,2942],{"emptyLinePlaceholder":606},[127,152872,152873,152875,152878],{"class":129,"line":17310},[127,152874,32487],{"class":290},[127,152876,152877],{"class":143}," delete_student",[127,152879,152351],{"class":147},[127,152881,152882,152884,152886,152888,152890,152893],{"class":129,"line":17324},[127,152883,152713],{"class":147},[127,152885,725],{"class":290},[127,152887,61138],{"class":154},[127,152889,681],{"class":147},[127,152891,152892],{"class":781},"\"请输入要删除的学号:\"",[127,152894,687],{"class":147},[127,152896,152897,152900,152902],{"class":129,"line":17337},[127,152898,152899],{"class":147},"    student ",[127,152901,725],{"class":290},[127,152903,152904],{"class":147}," find_student(students, student_id)\n",[127,152906,152907],{"class":129,"line":17342},[127,152908,2942],{"emptyLinePlaceholder":606},[127,152910,152911,152913,152915,152917,152919],{"class":129,"line":17356},[127,152912,3643],{"class":290},[127,152914,152527],{"class":147},[127,152916,39467],{"class":290},[127,152918,39473],{"class":154},[127,152920,4281],{"class":147},[127,152922,152923,152925,152927,152930],{"class":129,"line":17361},[127,152924,32991],{"class":154},[127,152926,681],{"class":147},[127,152928,152929],{"class":781},"\"学生不存在\"",[127,152931,687],{"class":147},[127,152933,152934],{"class":129,"line":17367},[127,152935,152751],{"class":290},[127,152937,152938],{"class":129,"line":17372},[127,152939,2942],{"emptyLinePlaceholder":606},[127,152941,152942],{"class":129,"line":17386},[127,152943,152944],{"class":147},"    students.remove(student)\n",[127,152946,152947],{"class":129,"line":17391},[127,152948,152851],{"class":147},[127,152950,152951,152953,152955,152958],{"class":129,"line":17396},[127,152952,31839],{"class":154},[127,152954,681],{"class":147},[127,152956,152957],{"class":781},"\"删除成功\"",[127,152959,687],{"class":147},[127,152961,152962],{"class":129,"line":17410},[127,152963,2942],{"emptyLinePlaceholder":606},[127,152965,152966],{"class":129,"line":17422},[127,152967,2942],{"emptyLinePlaceholder":606},[127,152969,152970,152972,152975],{"class":129,"line":17427},[127,152971,32487],{"class":290},[127,152973,152974],{"class":143}," update_student",[127,152976,152351],{"class":147},[127,152978,152979,152981,152983,152985,152987,152990],{"class":129,"line":17440},[127,152980,152713],{"class":147},[127,152982,725],{"class":290},[127,152984,61138],{"class":154},[127,152986,681],{"class":147},[127,152988,152989],{"class":781},"\"请输入要修改的学号:\"",[127,152991,687],{"class":147},[127,152993,152994,152996,152998],{"class":129,"line":17445},[127,152995,152899],{"class":147},[127,152997,725],{"class":290},[127,152999,152904],{"class":147},[127,153001,153002],{"class":129,"line":17450},[127,153003,2942],{"emptyLinePlaceholder":606},[127,153005,153006,153008,153010,153012,153014],{"class":129,"line":17455},[127,153007,3643],{"class":290},[127,153009,152527],{"class":147},[127,153011,39467],{"class":290},[127,153013,39473],{"class":154},[127,153015,4281],{"class":147},[127,153017,153018,153020,153022,153024],{"class":129,"line":17468},[127,153019,32991],{"class":154},[127,153021,681],{"class":147},[127,153023,152929],{"class":781},[127,153025,687],{"class":147},[127,153027,153028],{"class":129,"line":17473},[127,153029,152751],{"class":290},[127,153031,153032],{"class":129,"line":33173},[127,153033,2942],{"emptyLinePlaceholder":606},[127,153035,153036,153038,153040,153042,153044,153047],{"class":129,"line":33179},[127,153037,152760],{"class":147},[127,153039,725],{"class":290},[127,153041,61138],{"class":154},[127,153043,681],{"class":147},[127,153045,153046],{"class":781},"\"请输入新姓名:\"",[127,153048,687],{"class":147},[127,153050,153051,153053,153055,153057,153060],{"class":129,"line":33185},[127,153052,152776],{"class":147},[127,153054,725],{"class":290},[127,153056,152781],{"class":147},[127,153058,153059],{"class":781},"\"请输入新年龄:\"",[127,153061,687],{"class":147},[127,153063,153064,153066,153068,153070,153073],{"class":129,"line":33191},[127,153065,152791],{"class":147},[127,153067,725],{"class":290},[127,153069,152796],{"class":147},[127,153071,153072],{"class":781},"\"请输入新成绩:\"",[127,153074,687],{"class":147},[127,153076,153077],{"class":129,"line":33197},[127,153078,2942],{"emptyLinePlaceholder":606},[127,153080,153081,153084,153086,153088,153090],{"class":129,"line":33208},[127,153082,153083],{"class":147},"    student[",[127,153085,63212],{"class":781},[127,153087,4985],{"class":147},[127,153089,725],{"class":290},[127,153091,150185],{"class":147},[127,153093,153094,153096,153098,153100,153102],{"class":129,"line":33214},[127,153095,153083],{"class":147},[127,153097,69657],{"class":781},[127,153099,4985],{"class":147},[127,153101,725],{"class":290},[127,153103,150197],{"class":147},[127,153105,153106,153108,153110,153112,153114],{"class":129,"line":33234},[127,153107,153083],{"class":147},[127,153109,151862],{"class":781},[127,153111,4985],{"class":147},[127,153113,725],{"class":290},[127,153115,2122],{"class":147},[127,153117,153118],{"class":129,"line":33240},[127,153119,2942],{"emptyLinePlaceholder":606},[127,153121,153122],{"class":129,"line":33251},[127,153123,152851],{"class":147},[127,153125,153126,153128,153130,153133],{"class":129,"line":33257},[127,153127,31839],{"class":154},[127,153129,681],{"class":147},[127,153131,153132],{"class":781},"\"修改成功\"",[127,153134,687],{"class":147},[127,153136,153137],{"class":129,"line":33263},[127,153138,2942],{"emptyLinePlaceholder":606},[127,153140,153141],{"class":129,"line":33269},[127,153142,2942],{"emptyLinePlaceholder":606},[127,153144,153145,153147,153150],{"class":129,"line":33275},[127,153146,32487],{"class":290},[127,153148,153149],{"class":143}," query_student",[127,153151,152351],{"class":147},[127,153153,153154,153156,153158,153160,153162,153165],{"class":129,"line":33281},[127,153155,152713],{"class":147},[127,153157,725],{"class":290},[127,153159,61138],{"class":154},[127,153161,681],{"class":147},[127,153163,153164],{"class":781},"\"请输入要查询的学号:\"",[127,153166,687],{"class":147},[127,153168,153169,153171,153173],{"class":129,"line":33287},[127,153170,152899],{"class":147},[127,153172,725],{"class":290},[127,153174,152904],{"class":147},[127,153176,153177],{"class":129,"line":33293},[127,153178,2942],{"emptyLinePlaceholder":606},[127,153180,153181,153183,153185,153187,153189],{"class":129,"line":33313},[127,153182,3643],{"class":290},[127,153184,152527],{"class":147},[127,153186,39467],{"class":290},[127,153188,39473],{"class":154},[127,153190,4281],{"class":147},[127,153192,153193,153195,153197,153199],{"class":129,"line":33319},[127,153194,32991],{"class":154},[127,153196,681],{"class":147},[127,153198,152929],{"class":781},[127,153200,687],{"class":147},[127,153202,153203],{"class":129,"line":33335},[127,153204,152751],{"class":290},[127,153206,153207],{"class":129,"line":33341},[127,153208,2942],{"emptyLinePlaceholder":606},[127,153210,153211],{"class":129,"line":33355},[127,153212,153213],{"class":147},"    print_student(student)\n",[127,153215,153216],{"class":129,"line":33361},[127,153217,2942],{"emptyLinePlaceholder":606},[127,153219,153220],{"class":129,"line":33376},[127,153221,2942],{"emptyLinePlaceholder":606},[127,153223,153224,153226,153229],{"class":129,"line":33382},[127,153225,32487],{"class":290},[127,153227,153228],{"class":143}," print_student",[127,153230,153231],{"class":147},"(student):\n",[127,153233,153234,153236],{"class":129,"line":33391},[127,153235,31839],{"class":154},[127,153237,151829],{"class":147},[127,153239,153240,153243,153245,153247,153250,153253,153255,153258],{"class":129,"line":33397},[127,153241,153242],{"class":290},"        f",[127,153244,926],{"class":781},[127,153246,1570],{"class":154},[127,153248,153249],{"class":147},"student[",[127,153251,153252],{"class":781},"'student_id'",[127,153254,1614],{"class":147},[127,153256,153257],{"class":154},"}\\t",[127,153259,25674],{"class":781},[127,153261,153262,153264,153266,153268,153270,153273,153275,153277],{"class":129,"line":33406},[127,153263,153242],{"class":290},[127,153265,926],{"class":781},[127,153267,1570],{"class":154},[127,153269,153249],{"class":147},[127,153271,153272],{"class":781},"'name'",[127,153274,1614],{"class":147},[127,153276,153257],{"class":154},[127,153278,25674],{"class":781},[127,153280,153281,153283,153285,153287,153289,153292,153294,153296],{"class":129,"line":33412},[127,153282,153242],{"class":290},[127,153284,926],{"class":781},[127,153286,1570],{"class":154},[127,153288,153249],{"class":147},[127,153290,153291],{"class":781},"'age'",[127,153293,1614],{"class":147},[127,153295,153257],{"class":154},[127,153297,25674],{"class":781},[127,153299,153300,153302,153304,153306,153308,153311,153313,153315],{"class":129,"line":33418},[127,153301,153242],{"class":290},[127,153303,926],{"class":781},[127,153305,1570],{"class":154},[127,153307,153249],{"class":147},[127,153309,153310],{"class":781},"'score'",[127,153312,1614],{"class":147},[127,153314,1620],{"class":154},[127,153316,25674],{"class":781},[127,153318,153319],{"class":129,"line":33427},[127,153320,153321],{"class":147},"    )\n",[127,153323,153324],{"class":129,"line":33433},[127,153325,2942],{"emptyLinePlaceholder":606},[127,153327,153328],{"class":129,"line":33444},[127,153329,2942],{"emptyLinePlaceholder":606},[127,153331,153332,153334,153337],{"class":129,"line":33450},[127,153333,32487],{"class":290},[127,153335,153336],{"class":143}," show_all_students",[127,153338,152351],{"class":147},[127,153340,153341,153343,153345],{"class":129,"line":33469},[127,153342,3643],{"class":290},[127,153344,39470],{"class":290},[127,153346,152532],{"class":147},[127,153348,153349,153351,153353,153356],{"class":129,"line":33475},[127,153350,32991],{"class":154},[127,153352,681],{"class":147},[127,153354,153355],{"class":781},"\"暂无学生\"",[127,153357,687],{"class":147},[127,153359,153360],{"class":129,"line":33486},[127,153361,152751],{"class":290},[127,153363,153364],{"class":129,"line":33492},[127,153365,2942],{"emptyLinePlaceholder":606},[127,153367,153368,153370,153372,153375,153377,153380,153382,153385,153387,153390],{"class":129,"line":33512},[127,153369,31839],{"class":154},[127,153371,681],{"class":147},[127,153373,153374],{"class":781},"\"学号",[127,153376,1776],{"class":154},[127,153378,153379],{"class":781},"姓名",[127,153381,1776],{"class":154},[127,153383,153384],{"class":781},"年龄",[127,153386,1776],{"class":154},[127,153388,153389],{"class":781},"成绩\"",[127,153391,687],{"class":147},[127,153393,153394,153396,153398,153400],{"class":129,"line":33528},[127,153395,3743],{"class":290},[127,153397,152527],{"class":147},[127,153399,26584],{"class":290},[127,153401,152532],{"class":147},[127,153403,153404],{"class":129,"line":33534},[127,153405,153406],{"class":147},"        print_student(student)\n",[127,153408,153409],{"class":129,"line":33548},[127,153410,2942],{"emptyLinePlaceholder":606},[127,153412,153413],{"class":129,"line":33554},[127,153414,2942],{"emptyLinePlaceholder":606},[127,153416,153417,153419,153421],{"class":129,"line":33560},[127,153418,32487],{"class":290},[127,153420,2515],{"class":143},[127,153422,32493],{"class":147},[127,153424,153425,153428,153430],{"class":129,"line":33571},[127,153426,153427],{"class":147},"    students ",[127,153429,725],{"class":290},[127,153431,153432],{"class":147}," load_students()\n",[127,153434,153435],{"class":129,"line":33577},[127,153436,2942],{"emptyLinePlaceholder":606},[127,153438,153439,153441,153443],{"class":129,"line":33583},[127,153440,2793],{"class":290},[127,153442,95821],{"class":154},[127,153444,4281],{"class":147},[127,153446,153447],{"class":129,"line":33593},[127,153448,153449],{"class":147},"        show_menu()\n",[127,153451,153452,153455,153457,153459,153461,153464],{"class":129,"line":33599},[127,153453,153454],{"class":147},"        choice ",[127,153456,725],{"class":290},[127,153458,61138],{"class":154},[127,153460,681],{"class":147},[127,153462,153463],{"class":781},"\"请输入操作:\"",[127,153465,687],{"class":147},[127,153467,153468],{"class":129,"line":33610},[127,153469,2942],{"emptyLinePlaceholder":606},[127,153471,153472,153474,153477,153479,153482],{"class":129,"line":33616},[127,153473,3039],{"class":290},[127,153475,153476],{"class":147}," choice ",[127,153478,3491],{"class":290},[127,153480,153481],{"class":781}," \"1\"",[127,153483,4281],{"class":147},[127,153485,153486],{"class":129,"line":33626},[127,153487,153488],{"class":147},"            add_student(students)\n",[127,153490,153491,153494,153496,153498,153501],{"class":129,"line":33631},[127,153492,153493],{"class":290},"        elif",[127,153495,153476],{"class":147},[127,153497,3491],{"class":290},[127,153499,153500],{"class":781}," \"2\"",[127,153502,4281],{"class":147},[127,153504,153505],{"class":129,"line":33637},[127,153506,153507],{"class":147},"            delete_student(students)\n",[127,153509,153510,153512,153514,153516,153519],{"class":129,"line":33686},[127,153511,153493],{"class":290},[127,153513,153476],{"class":147},[127,153515,3491],{"class":290},[127,153517,153518],{"class":781}," \"3\"",[127,153520,4281],{"class":147},[127,153522,153523],{"class":129,"line":33733},[127,153524,153525],{"class":147},"            update_student(students)\n",[127,153527,153528,153530,153532,153534,153537],{"class":129,"line":33738},[127,153529,153493],{"class":290},[127,153531,153476],{"class":147},[127,153533,3491],{"class":290},[127,153535,153536],{"class":781}," \"4\"",[127,153538,4281],{"class":147},[127,153540,153541],{"class":129,"line":33744},[127,153542,153543],{"class":147},"            query_student(students)\n",[127,153545,153546,153548,153550,153552,153555],{"class":129,"line":33763},[127,153547,153493],{"class":290},[127,153549,153476],{"class":147},[127,153551,3491],{"class":290},[127,153553,153554],{"class":781}," \"5\"",[127,153556,4281],{"class":147},[127,153558,153559],{"class":129,"line":33769},[127,153560,153561],{"class":147},"            show_all_students(students)\n",[127,153563,153564,153566,153568,153570,153573],{"class":129,"line":33789},[127,153565,153493],{"class":290},[127,153567,153476],{"class":147},[127,153569,3491],{"class":290},[127,153571,153572],{"class":781}," \"0\"",[127,153574,4281],{"class":147},[127,153576,153577,153579,153581,153584],{"class":129,"line":33795},[127,153578,35190],{"class":154},[127,153580,681],{"class":147},[127,153582,153583],{"class":781},"\"退出系统\"",[127,153585,687],{"class":147},[127,153587,153588],{"class":129,"line":33801},[127,153589,115627],{"class":290},[127,153591,153592,153594],{"class":129,"line":33811},[127,153593,3076],{"class":290},[127,153595,4281],{"class":147},[127,153597,153598,153600,153602,153605],{"class":129,"line":33816},[127,153599,35190],{"class":154},[127,153601,681],{"class":147},[127,153603,153604],{"class":781},"\"输入错误\"",[127,153606,687],{"class":147},[127,153608,153609],{"class":129,"line":33822},[127,153610,2942],{"emptyLinePlaceholder":606},[127,153612,153613],{"class":129,"line":33838},[127,153614,2942],{"emptyLinePlaceholder":606},[127,153616,153617,153619,153621,153623,153625],{"class":129,"line":33883},[127,153618,2075],{"class":290},[127,153620,31760],{"class":154},[127,153622,102088],{"class":290},[127,153624,102091],{"class":781},[127,153626,4281],{"class":147},[127,153628,153629],{"class":129,"line":33889},[127,153630,102098],{"class":147},[19,153632,153633],{},"这个项目串联了：",[632,153635,153636,153639,153642,153645,153648,153650],{},[635,153637,153638],{},"菜单循环。",[635,153640,153641],{},"函数封装。",[635,153643,153644],{},"列表字典。",[635,153646,153647],{},"JSON 读写。",[635,153649,152117],{},[635,153651,153652,28925],{},[124,153653,153654],{},"if __name__ == \"__main__\"",[14,153656,153658],{"id":153657},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153660,153661],{},"可以进一步拆成两个类：",[632,153663,153664,153669],{},[635,153665,153666,153668],{},[124,153667,149958],{},"：表示单个学生。",[635,153670,153671,153673],{},[124,153672,151984],{},"：负责学生增删改查和文件保存。",[19,153675,153676],{},"示意代码：",[117,153678,153680],{"className":30918,"code":153679,"language":30920,"meta":122,"style":122},"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",[124,153681,153682,153692,153696,153700,153704,153712,153719,153725,153731,153737,153741,153749,153755,153765,153775,153785,153795,153799,153803,153809,153817,153825,153833,153841,153849,153857],{"__ignoreMap":122},[127,153683,153684,153686,153688,153690],{"class":129,"line":130},[127,153685,31277],{"class":290},[127,153687,151542],{"class":147},[127,153689,30932],{"class":290},[127,153691,151547],{"class":147},[127,153693,153694],{"class":129,"line":137},[127,153695,2942],{"emptyLinePlaceholder":606},[127,153697,153698],{"class":129,"line":151},[127,153699,2942],{"emptyLinePlaceholder":606},[127,153701,153702],{"class":129,"line":167},[127,153703,151560],{"class":143},[127,153705,153706,153708,153710],{"class":129,"line":415},[127,153707,15236],{"class":290},[127,153709,8440],{"class":143},[127,153711,4281],{"class":147},[127,153713,153714,153717],{"class":129,"line":421},[127,153715,153716],{"class":147},"    student_id: ",[127,153718,151576],{"class":154},[127,153720,153721,153723],{"class":129,"line":1766},[127,153722,151573],{"class":147},[127,153724,151576],{"class":154},[127,153726,153727,153729],{"class":129,"line":1856},[127,153728,151581],{"class":147},[127,153730,151584],{"class":154},[127,153732,153733,153735],{"class":129,"line":1862},[127,153734,151589],{"class":147},[127,153736,151592],{"class":154},[127,153738,153739],{"class":129,"line":1874},[127,153740,2942],{"emptyLinePlaceholder":606},[127,153742,153743,153745,153747],{"class":129,"line":2155},[127,153744,31341],{"class":290},[127,153746,151740],{"class":143},[127,153748,31347],{"class":147},[127,153750,153751,153753],{"class":129,"line":2160},[127,153752,15294],{"class":290},[127,153754,148],{"class":147},[127,153756,153757,153759,153761,153763],{"class":129,"line":2166},[127,153758,151753],{"class":781},[127,153760,158],{"class":147},[127,153762,31363],{"class":154},[127,153764,151760],{"class":147},[127,153766,153767,153769,153771,153773],{"class":129,"line":2171},[127,153768,151765],{"class":781},[127,153770,158],{"class":147},[127,153772,31363],{"class":154},[127,153774,151772],{"class":147},[127,153776,153777,153779,153781,153783],{"class":129,"line":2185},[127,153778,151777],{"class":781},[127,153780,158],{"class":147},[127,153782,31363],{"class":154},[127,153784,151784],{"class":147},[127,153786,153787,153789,153791,153793],{"class":129,"line":2190},[127,153788,151789],{"class":781},[127,153790,158],{"class":147},[127,153792,31363],{"class":154},[127,153794,151796],{"class":147},[127,153796,153797],{"class":129,"line":2196},[127,153798,3071],{"class":147},[127,153800,153801],{"class":129,"line":2217},[127,153802,2942],{"emptyLinePlaceholder":606},[127,153804,153805,153807],{"class":129,"line":2222},[127,153806,151404],{"class":143},[127,153808,151407],{"class":154},[127,153810,153811,153813,153815],{"class":129,"line":2236},[127,153812,31341],{"class":290},[127,153814,151817],{"class":143},[127,153816,151820],{"class":147},[127,153818,153819,153821,153823],{"class":129,"line":2241},[127,153820,15294],{"class":290},[127,153822,151424],{"class":154},[127,153824,151829],{"class":147},[127,153826,153827,153829,153831],{"class":129,"line":2270},[127,153828,151834],{"class":147},[127,153830,151837],{"class":781},[127,153832,88365],{"class":147},[127,153834,153835,153837,153839],{"class":129,"line":2275},[127,153836,151834],{"class":147},[127,153838,63212],{"class":781},[127,153840,88365],{"class":147},[127,153842,153843,153845,153847],{"class":129,"line":2292},[127,153844,151834],{"class":147},[127,153846,69657],{"class":781},[127,153848,88365],{"class":147},[127,153850,153851,153853,153855],{"class":129,"line":2297},[127,153852,151834],{"class":147},[127,153854,151862],{"class":781},[127,153856,88365],{"class":147},[127,153858,153859],{"class":129,"line":2302},[127,153860,38666],{"class":147},[19,153862,153863],{},"管理器示意：",[117,153865,153867],{"className":30918,"code":153866,"language":30920,"meta":122,"style":122},"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",[124,153868,153869,153878,153886,153897,153901,153911,153924,153935,153942,153948,153952,153961,153970,153976,153983],{"__ignoreMap":122},[127,153870,153871,153873,153876],{"class":129,"line":130},[127,153872,15236],{"class":290},[127,153874,153875],{"class":143}," StudentManager",[127,153877,4281],{"class":147},[127,153879,153880,153882,153884],{"class":129,"line":137},[127,153881,31341],{"class":290},[127,153883,31344],{"class":154},[127,153885,31347],{"class":147},[127,153887,153888,153890,153893,153895],{"class":129,"line":151},[127,153889,31385],{"class":154},[127,153891,153892],{"class":147},".students ",[127,153894,725],{"class":290},[127,153896,52373],{"class":147},[127,153898,153899],{"class":129,"line":167},[127,153900,2942],{"emptyLinePlaceholder":606},[127,153902,153903,153905,153908],{"class":129,"line":415},[127,153904,31341],{"class":290},[127,153906,153907],{"class":143}," find_by_id",[127,153909,153910],{"class":147},"(self, student_id):\n",[127,153912,153913,153915,153917,153919,153921],{"class":129,"line":421},[127,153914,3945],{"class":290},[127,153916,152527],{"class":147},[127,153918,26584],{"class":290},[127,153920,39413],{"class":154},[127,153922,153923],{"class":147},".students:\n",[127,153925,153926,153928,153931,153933],{"class":129,"line":1766},[127,153927,5184],{"class":290},[127,153929,153930],{"class":147}," student.student_id ",[127,153932,3491],{"class":290},[127,153934,152548],{"class":147},[127,153936,153937,153940],{"class":129,"line":1856},[127,153938,153939],{"class":290},"                return",[127,153941,152555],{"class":147},[127,153943,153944,153946],{"class":129,"line":1862},[127,153945,15294],{"class":290},[127,153947,152562],{"class":154},[127,153949,153950],{"class":129,"line":1874},[127,153951,2942],{"emptyLinePlaceholder":606},[127,153953,153954,153956,153958],{"class":129,"line":2155},[127,153955,31341],{"class":290},[127,153957,5751],{"class":143},[127,153959,153960],{"class":147},"(self, student):\n",[127,153962,153963,153965,153967],{"class":129,"line":2160},[127,153964,3039],{"class":290},[127,153966,39413],{"class":154},[127,153968,153969],{"class":147},".find_by_id(student.student_id):\n",[127,153971,153972,153974],{"class":129,"line":2166},[127,153973,16273],{"class":290},[127,153975,126336],{"class":154},[127,153977,153978,153980],{"class":129,"line":2171},[127,153979,31385],{"class":154},[127,153981,153982],{"class":147},".students.append(student)\n",[127,153984,153985,153987],{"class":129,"line":2185},[127,153986,15294],{"class":290},[127,153988,153989],{"class":154}," True\n",[19,153991,153992],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153994,153996],{"id":153995},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[62,153998,154000],{"id":153999},"_1251-数据结构","12.5.1 数据结构",[117,154002,154004],{"className":30918,"code":154003,"language":30920,"meta":122,"style":122},"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",[124,154005,154006,154014,154045,154075,154104,154133],{"__ignoreMap":122},[127,154007,154008,154010,154012],{"class":129,"line":130},[127,154009,148855],{"class":147},[127,154011,725],{"class":290},[127,154013,55981],{"class":147},[127,154015,154016,154018,154020,154022,154024,154026,154029,154031,154034,154036,154038,154040,154043],{"class":129,"line":137},[127,154017,148775],{"class":147},[127,154019,148387],{"class":781},[127,154021,158],{"class":147},[127,154023,148998],{"class":781},[127,154025,12977],{"class":147},[127,154027,154028],{"class":781},"\"category\"",[127,154030,158],{"class":147},[127,154032,154033],{"class":781},"\"手机\"",[127,154035,12977],{"class":147},[127,154037,84613],{"class":781},[127,154039,158],{"class":147},[127,154041,154042],{"class":154},"12000",[127,154044,5472],{"class":147},[127,154046,154047,154049,154051,154053,154055,154057,154059,154061,154064,154066,154068,154070,154073],{"class":129,"line":151},[127,154048,148775],{"class":147},[127,154050,148387],{"class":781},[127,154052,158],{"class":147},[127,154054,148998],{"class":781},[127,154056,12977],{"class":147},[127,154058,154028],{"class":781},[127,154060,158],{"class":147},[127,154062,154063],{"class":781},"\"电脑\"",[127,154065,12977],{"class":147},[127,154067,84613],{"class":781},[127,154069,158],{"class":147},[127,154071,154072],{"class":154},"18000",[127,154074,5472],{"class":147},[127,154076,154077,154079,154081,154083,154085,154087,154089,154091,154093,154095,154097,154099,154102],{"class":129,"line":167},[127,154078,148775],{"class":147},[127,154080,148387],{"class":781},[127,154082,158],{"class":147},[127,154084,149019],{"class":781},[127,154086,12977],{"class":147},[127,154088,154028],{"class":781},[127,154090,158],{"class":147},[127,154092,154033],{"class":781},[127,154094,12977],{"class":147},[127,154096,84613],{"class":781},[127,154098,158],{"class":147},[127,154100,154101],{"class":154},"15000",[127,154103,5472],{"class":147},[127,154105,154106,154108,154110,154112,154114,154116,154118,154120,154122,154124,154126,154128,154131],{"class":129,"line":415},[127,154107,148775],{"class":147},[127,154109,148387],{"class":781},[127,154111,158],{"class":147},[127,154113,149019],{"class":781},[127,154115,12977],{"class":147},[127,154117,154028],{"class":781},[127,154119,158],{"class":147},[127,154121,154063],{"class":781},[127,154123,12977],{"class":147},[127,154125,84613],{"class":781},[127,154127,158],{"class":147},[127,154129,154130],{"class":154},"16000",[127,154132,5472],{"class":147},[127,154134,154135],{"class":129,"line":421},[127,154136,33786],{"class":147},[62,154138,154140],{"id":154139},"_1252-按日期统计","12.5.2 按日期统计",[117,154142,154144],{"className":30918,"code":154143,"language":30920,"meta":122,"style":122},"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",[124,154145,154146,154155,154159,154170,154184,154197,154216,154220],{"__ignoreMap":122},[127,154147,154148,154151,154153],{"class":129,"line":130},[127,154149,154150],{"class":147},"daily_total ",[127,154152,725],{"class":290},[127,154154,88397],{"class":147},[127,154156,154157],{"class":129,"line":137},[127,154158,2942],{"emptyLinePlaceholder":606},[127,154160,154161,154163,154165,154167],{"class":129,"line":151},[127,154162,3567],{"class":290},[127,154164,148599],{"class":147},[127,154166,26584],{"class":290},[127,154168,154169],{"class":147}," sales:\n",[127,154171,154172,154175,154177,154180,154182],{"class":129,"line":167},[127,154173,154174],{"class":147},"    date ",[127,154176,725],{"class":290},[127,154178,154179],{"class":147}," item[",[127,154181,148387],{"class":781},[127,154183,33786],{"class":147},[127,154185,154186,154189,154191,154193,154195],{"class":129,"line":415},[127,154187,154188],{"class":147},"    amount ",[127,154190,725],{"class":290},[127,154192,154179],{"class":147},[127,154194,84613],{"class":781},[127,154196,33786],{"class":147},[127,154198,154199,154202,154204,154207,154209,154211,154213],{"class":129,"line":421},[127,154200,154201],{"class":147},"    daily_total[date] ",[127,154203,725],{"class":290},[127,154205,154206],{"class":147}," daily_total.get(date, ",[127,154208,867],{"class":154},[127,154210,14256],{"class":147},[127,154212,1156],{"class":290},[127,154214,154215],{"class":147}," amount\n",[127,154217,154218],{"class":129,"line":1766},[127,154219,2942],{"emptyLinePlaceholder":606},[127,154221,154222,154224],{"class":129,"line":1856},[127,154223,30955],{"class":154},[127,154225,154226],{"class":147},"(daily_total)\n",[62,154228,154230],{"id":154229},"_1253-按类别统计","12.5.3 按类别统计",[117,154232,154234],{"className":30918,"code":154233,"language":30920,"meta":122,"style":122},"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",[124,154235,154236,154245,154249,154259,154272,154284,154302,154306],{"__ignoreMap":122},[127,154237,154238,154241,154243],{"class":129,"line":130},[127,154239,154240],{"class":147},"category_total ",[127,154242,725],{"class":290},[127,154244,88397],{"class":147},[127,154246,154247],{"class":129,"line":137},[127,154248,2942],{"emptyLinePlaceholder":606},[127,154250,154251,154253,154255,154257],{"class":129,"line":151},[127,154252,3567],{"class":290},[127,154254,148599],{"class":147},[127,154256,26584],{"class":290},[127,154258,154169],{"class":147},[127,154260,154261,154264,154266,154268,154270],{"class":129,"line":167},[127,154262,154263],{"class":147},"    category ",[127,154265,725],{"class":290},[127,154267,154179],{"class":147},[127,154269,154028],{"class":781},[127,154271,33786],{"class":147},[127,154273,154274,154276,154278,154280,154282],{"class":129,"line":415},[127,154275,154188],{"class":147},[127,154277,725],{"class":290},[127,154279,154179],{"class":147},[127,154281,84613],{"class":781},[127,154283,33786],{"class":147},[127,154285,154286,154289,154291,154294,154296,154298,154300],{"class":129,"line":421},[127,154287,154288],{"class":147},"    category_total[category] ",[127,154290,725],{"class":290},[127,154292,154293],{"class":147}," category_total.get(category, ",[127,154295,867],{"class":154},[127,154297,14256],{"class":147},[127,154299,1156],{"class":290},[127,154301,154215],{"class":147},[127,154303,154304],{"class":129,"line":1766},[127,154305,2942],{"emptyLinePlaceholder":606},[127,154307,154308,154310],{"class":129,"line":1856},[127,154309,30955],{"class":154},[127,154311,154312],{"class":147},"(category_total)\n",[62,154314,154316],{"id":154315},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[117,154318,154320],{"className":30918,"code":154319,"language":30920,"meta":122,"style":122},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[124,154321,154322,154347],{"__ignoreMap":122},[127,154323,154324,154327,154329,154331,154334,154337,154340,154343,154345],{"class":129,"line":130},[127,154325,154326],{"class":147},"top_date, top_amount ",[127,154328,725],{"class":290},[127,154330,6493],{"class":154},[127,154332,154333],{"class":147},"(daily_total.items(), ",[127,154335,154336],{"class":5758},"key",[127,154338,154339],{"class":290},"=lambda",[127,154341,154342],{"class":147}," item: item[",[127,154344,893],{"class":154},[127,154346,5199],{"class":147},[127,154348,154349,154351],{"class":129,"line":137},[127,154350,30955],{"class":154},[127,154352,154353],{"class":147},"(top_date, top_amount)\n",[14,154355,154357],{"id":154356},"_126-绘制柱状图","12.6 绘制柱状图",[117,154359,154361],{"className":30918,"code":154360,"language":30920,"meta":122,"style":122},"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",[124,154362,154363,154377,154388,154392,154400,154412,154424,154435,154439,154443,154453,154464,154478,154483,154500,154517,154533,154537],{"__ignoreMap":122},[127,154364,154365,154367,154369,154371,154373,154375],{"class":129,"line":130},[127,154366,31277],{"class":290},[127,154368,147769],{"class":147},[127,154370,30932],{"class":290},[127,154372,147774],{"class":147},[127,154374,31923],{"class":290},[127,154376,147779],{"class":147},[127,154378,154379,154381,154383,154385],{"class":129,"line":137},[127,154380,31277],{"class":290},[127,154382,147628],{"class":147},[127,154384,30932],{"class":290},[127,154386,154387],{"class":147}," Bar\n",[127,154389,154390],{"class":129,"line":151},[127,154391,2942],{"emptyLinePlaceholder":606},[127,154393,154394,154396,154398],{"class":129,"line":167},[127,154395,154240],{"class":147},[127,154397,725],{"class":290},[127,154399,148],{"class":147},[127,154401,154402,154405,154407,154410],{"class":129,"line":415},[127,154403,154404],{"class":781},"    \"手机\"",[127,154406,158],{"class":147},[127,154408,154409],{"class":154},"27000",[127,154411,32006],{"class":147},[127,154413,154414,154417,154419,154422],{"class":129,"line":421},[127,154415,154416],{"class":781},"    \"电脑\"",[127,154418,158],{"class":147},[127,154420,154421],{"class":154},"34000",[127,154423,32006],{"class":147},[127,154425,154426,154429,154431,154433],{"class":129,"line":1766},[127,154427,154428],{"class":781},"    \"耳机\"",[127,154430,158],{"class":147},[127,154432,124928],{"class":154},[127,154434,32006],{"class":147},[127,154436,154437],{"class":129,"line":1856},[127,154438,170],{"class":147},[127,154440,154441],{"class":129,"line":1862},[127,154442,2942],{"emptyLinePlaceholder":606},[127,154444,154445,154448,154450],{"class":129,"line":1874},[127,154446,154447],{"class":147},"bar ",[127,154449,725],{"class":290},[127,154451,154452],{"class":147}," Bar()\n",[127,154454,154455,154458,154461],{"class":129,"line":2155},[127,154456,154457],{"class":147},"bar.add_xaxis(",[127,154459,154460],{"class":154},"list",[127,154462,154463],{"class":147},"(category_total.keys()))\n",[127,154465,154466,154469,154471,154473,154475],{"class":129,"line":2160},[127,154467,154468],{"class":147},"bar.add_yaxis(",[127,154470,147685],{"class":781},[127,154472,12977],{"class":147},[127,154474,154460],{"class":154},[127,154476,154477],{"class":147},"(category_total.values()))\n",[127,154479,154480],{"class":129,"line":2166},[127,154481,154482],{"class":147},"bar.set_global_opts(\n",[127,154484,154485,154487,154489,154491,154493,154495,154498],{"class":129,"line":2171},[127,154486,147863],{"class":5758},[127,154488,725],{"class":290},[127,154490,147868],{"class":147},[127,154492,51946],{"class":5758},[127,154494,725],{"class":290},[127,154496,154497],{"class":781},"\"品类销售额\"",[127,154499,38587],{"class":147},[127,154501,154502,154504,154506,154508,154510,154512,154515],{"class":129,"line":2185},[127,154503,147882],{"class":5758},[127,154505,725],{"class":290},[127,154507,147887],{"class":147},[127,154509,80339],{"class":5758},[127,154511,725],{"class":290},[127,154513,154514],{"class":781},"\"品类\"",[127,154516,38587],{"class":147},[127,154518,154519,154521,154523,154525,154527,154529,154531],{"class":129,"line":2190},[127,154520,147901],{"class":5758},[127,154522,725],{"class":290},[127,154524,147887],{"class":147},[127,154526,80339],{"class":5758},[127,154528,725],{"class":290},[127,154530,147685],{"class":781},[127,154532,38587],{"class":147},[127,154534,154535],{"class":129,"line":2196},[127,154536,687],{"class":147},[127,154538,154539,154542,154545],{"class":129,"line":2217},[127,154540,154541],{"class":147},"bar.render(",[127,154543,154544],{"class":781},"\"category_sales.html\"",[127,154546,687],{"class":147},[14,154548,154550],{"id":154549},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154552,154553],{},"时间线适合展示不同日期、月份、年份的数据变化。",[117,154555,154557],{"className":30918,"code":154556,"language":30920,"meta":122,"style":122},"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",[124,154558,154559,154573,154584,154588,154596,154620,154643,154668,154672,154676,154686,154690,154701,154710,154720,154734,154765,154770,154774],{"__ignoreMap":122},[127,154560,154561,154563,154565,154567,154569,154571],{"class":129,"line":130},[127,154562,31277],{"class":290},[127,154564,147769],{"class":147},[127,154566,30932],{"class":290},[127,154568,147774],{"class":147},[127,154570,31923],{"class":290},[127,154572,147779],{"class":147},[127,154574,154575,154577,154579,154581],{"class":129,"line":137},[127,154576,31277],{"class":290},[127,154578,147628],{"class":147},[127,154580,30932],{"class":290},[127,154582,154583],{"class":147}," Bar, Timeline\n",[127,154585,154586],{"class":129,"line":151},[127,154587,2942],{"emptyLinePlaceholder":606},[127,154589,154590,154592,154594],{"class":129,"line":167},[127,154591,102187],{"class":147},[127,154593,725],{"class":290},[127,154595,148],{"class":147},[127,154597,154598,154601,154604,154606,154608,154610,154612,154614,154616,154618],{"class":129,"line":415},[127,154599,154600],{"class":781},"    \"2024-10-01\"",[127,154602,154603],{"class":147},": {",[127,154605,154033],{"class":781},[127,154607,158],{"class":147},[127,154609,154042],{"class":154},[127,154611,12977],{"class":147},[127,154613,154063],{"class":781},[127,154615,158],{"class":147},[127,154617,154072],{"class":154},[127,154619,5472],{"class":147},[127,154621,154622,154625,154627,154629,154631,154633,154635,154637,154639,154641],{"class":129,"line":421},[127,154623,154624],{"class":781},"    \"2024-10-02\"",[127,154626,154603],{"class":147},[127,154628,154033],{"class":781},[127,154630,158],{"class":147},[127,154632,154101],{"class":154},[127,154634,12977],{"class":147},[127,154636,154063],{"class":781},[127,154638,158],{"class":147},[127,154640,154130],{"class":154},[127,154642,5472],{"class":147},[127,154644,154645,154648,154650,154652,154654,154657,154659,154661,154663,154666],{"class":129,"line":1766},[127,154646,154647],{"class":781},"    \"2024-10-03\"",[127,154649,154603],{"class":147},[127,154651,154033],{"class":781},[127,154653,158],{"class":147},[127,154655,154656],{"class":154},"17000",[127,154658,12977],{"class":147},[127,154660,154063],{"class":781},[127,154662,158],{"class":147},[127,154664,154665],{"class":154},"19000",[127,154667,5472],{"class":147},[127,154669,154670],{"class":129,"line":1856},[127,154671,170],{"class":147},[127,154673,154674],{"class":129,"line":1862},[127,154675,2942],{"emptyLinePlaceholder":606},[127,154677,154678,154681,154683],{"class":129,"line":1874},[127,154679,154680],{"class":147},"timeline ",[127,154682,725],{"class":290},[127,154684,154685],{"class":147}," Timeline()\n",[127,154687,154688],{"class":129,"line":2155},[127,154689,2942],{"emptyLinePlaceholder":606},[127,154691,154692,154694,154697,154699],{"class":129,"line":2160},[127,154693,3567],{"class":290},[127,154695,154696],{"class":147}," date, category_data ",[127,154698,26584],{"class":290},[127,154700,149538],{"class":147},[127,154702,154703,154706,154708],{"class":129,"line":2166},[127,154704,154705],{"class":147},"    bar ",[127,154707,725],{"class":290},[127,154709,154452],{"class":147},[127,154711,154712,154715,154717],{"class":129,"line":2171},[127,154713,154714],{"class":147},"    bar.add_xaxis(",[127,154716,154460],{"class":154},[127,154718,154719],{"class":147},"(category_data.keys()))\n",[127,154721,154722,154725,154727,154729,154731],{"class":129,"line":2185},[127,154723,154724],{"class":147},"    bar.add_yaxis(",[127,154726,147685],{"class":781},[127,154728,12977],{"class":147},[127,154730,154460],{"class":154},[127,154732,154733],{"class":147},"(category_data.values()))\n",[127,154735,154736,154739,154742,154744,154746,154748,154750,154752,154754,154756,154758,154760,154763],{"class":129,"line":2190},[127,154737,154738],{"class":147},"    bar.set_global_opts(",[127,154740,154741],{"class":5758},"title_opts",[127,154743,725],{"class":290},[127,154745,147868],{"class":147},[127,154747,51946],{"class":5758},[127,154749,725],{"class":290},[127,154751,731],{"class":290},[127,154753,926],{"class":781},[127,154755,1570],{"class":154},[127,154757,74455],{"class":147},[127,154759,1620],{"class":154},[127,154761,154762],{"class":781},"销售额\"",[127,154764,31037],{"class":147},[127,154766,154767],{"class":129,"line":2196},[127,154768,154769],{"class":147},"    timeline.add(bar, date)\n",[127,154771,154772],{"class":129,"line":2217},[127,154773,2942],{"emptyLinePlaceholder":606},[127,154775,154776,154779,154782],{"class":129,"line":2222},[127,154777,154778],{"class":147},"timeline.render(",[127,154780,154781],{"class":781},"\"timeline_sales.html\"",[127,154783,687],{"class":147},[14,154785,154787],{"id":154786},"_128-绘制地图","12.8 绘制地图",[19,154789,154790],{},"地图适合展示地区数据。",[117,154792,154794],{"className":30918,"code":154793,"language":30920,"meta":122,"style":122},"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",[124,154795,154796,154810,154821,154825,154833,154846,154858,154871,154884,154888,154892,154902,154917,154922,154939,154958,154962],{"__ignoreMap":122},[127,154797,154798,154800,154802,154804,154806,154808],{"class":129,"line":130},[127,154799,31277],{"class":290},[127,154801,147769],{"class":147},[127,154803,30932],{"class":290},[127,154805,147774],{"class":147},[127,154807,31923],{"class":290},[127,154809,147779],{"class":147},[127,154811,154812,154814,154816,154818],{"class":129,"line":137},[127,154813,31277],{"class":290},[127,154815,147628],{"class":147},[127,154817,30932],{"class":290},[127,154819,154820],{"class":147}," Map\n",[127,154822,154823],{"class":129,"line":151},[127,154824,2942],{"emptyLinePlaceholder":606},[127,154826,154827,154829,154831],{"class":129,"line":167},[127,154828,102187],{"class":147},[127,154830,725],{"class":290},[127,154832,55981],{"class":147},[127,154834,154835,154838,154840,154842,154844],{"class":129,"line":415},[127,154836,154837],{"class":147},"    (",[127,154839,69802],{"class":781},[127,154841,12977],{"class":147},[127,154843,1491],{"class":154},[127,154845,38587],{"class":147},[127,154847,154848,154850,154852,154854,154856],{"class":129,"line":421},[127,154849,154837],{"class":147},[127,154851,69822],{"class":781},[127,154853,12977],{"class":147},[127,154855,147702],{"class":154},[127,154857,38587],{"class":147},[127,154859,154860,154862,154865,154867,154869],{"class":129,"line":1766},[127,154861,154837],{"class":147},[127,154863,154864],{"class":781},"\"广东\"",[127,154866,12977],{"class":147},[127,154868,2265],{"class":154},[127,154870,38587],{"class":147},[127,154872,154873,154875,154878,154880,154882],{"class":129,"line":1856},[127,154874,154837],{"class":147},[127,154876,154877],{"class":781},"\"浙江\"",[127,154879,12977],{"class":147},[127,154881,147707],{"class":154},[127,154883,38587],{"class":147},[127,154885,154886],{"class":129,"line":1862},[127,154887,33786],{"class":147},[127,154889,154890],{"class":129,"line":1874},[127,154891,2942],{"emptyLinePlaceholder":606},[127,154893,154894,154897,154899],{"class":129,"line":2155},[127,154895,154896],{"class":147},"map_chart ",[127,154898,725],{"class":290},[127,154900,154901],{"class":147}," Map()\n",[127,154903,154904,154907,154909,154912,154915],{"class":129,"line":2160},[127,154905,154906],{"class":147},"map_chart.add(",[127,154908,147685],{"class":781},[127,154910,154911],{"class":147},", data, ",[127,154913,154914],{"class":781},"\"china\"",[127,154916,687],{"class":147},[127,154918,154919],{"class":129,"line":2166},[127,154920,154921],{"class":147},"map_chart.set_global_opts(\n",[127,154923,154924,154926,154928,154930,154932,154934,154937],{"class":129,"line":2171},[127,154925,147863],{"class":5758},[127,154927,725],{"class":290},[127,154929,147868],{"class":147},[127,154931,51946],{"class":5758},[127,154933,725],{"class":290},[127,154935,154936],{"class":781},"\"地区销售额\"",[127,154938,38587],{"class":147},[127,154940,154941,154944,154946,154949,154952,154954,154956],{"class":129,"line":2185},[127,154942,154943],{"class":5758},"    visualmap_opts",[127,154945,725],{"class":290},[127,154947,154948],{"class":147},"opts.VisualMapOpts(",[127,154950,154951],{"class":5758},"max_",[127,154953,725],{"class":290},[127,154955,2265],{"class":154},[127,154957,38587],{"class":147},[127,154959,154960],{"class":129,"line":2190},[127,154961,687],{"class":147},[127,154963,154964,154967,154970],{"class":129,"line":2196},[127,154965,154966],{"class":147},"map_chart.render(",[127,154968,154969],{"class":781},"\"map_sales.html\"",[127,154971,687],{"class":147},[19,154973,154974],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154976,154978],{"id":154977},"_129-项目拆分建议","12.9 项目拆分建议",[19,154980,154981],{},"当代码超过一个文件时，可以这样组织：",[117,154983,154986],{"className":154984,"code":154985,"language":5729,"meta":122},[5727],"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",[124,154987,154985],{"__ignoreMap":122},[19,154989,154990],{},"职责：",[632,154992,154993,154999,155005,155011],{},[635,154994,154995,154998],{},[124,154996,154997],{},"main.py","：程序入口。",[635,155000,155001,155004],{},[124,155002,155003],{},"file_utils.py","：读写 JSON。",[635,155006,155007,155010],{},[124,155008,155009],{},"sales_service.py","：统计销售数据。",[635,155012,155013,155016],{},[124,155014,155015],{},"chart_builder.py","：生成图表。",[14,155018,155020],{"id":155019},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155022,155023],{},"语法基础：",[632,155025,155026,155029,155032,155035],{},[635,155027,155028],{},"会写变量、注释、输入输出。",[635,155030,155031],{},"会使用 int、float、str、bool。",[635,155033,155034],{},"会做类型转换。",[635,155036,155037],{},"会使用 f-string 格式化输出。",[19,155039,155040],{},"流程控制：",[632,155042,155043,155049,155055,155063],{},[635,155044,155045,155046,28925],{},"会写 ",[124,155047,155048],{},"if elif else",[635,155050,155045,155051,101547,155053,28925],{},[124,155052,109192],{},[124,155054,3567],{},[635,155056,155057,155058,101547,155060,28925],{},"理解 ",[124,155059,2595],{},[124,155061,155062],{},"continue",[635,155064,155065],{},"能写嵌套循环。",[19,155067,155068],{},"函数：",[632,155070,155071,155074,155077,155080],{},[635,155072,155073],{},"会定义和调用函数。",[635,155075,155076],{},"理解参数和返回值。",[635,155078,155079],{},"知道局部变量和全局变量。",[635,155081,155082],{},"会使用默认参数、关键字参数、不定长参数。",[19,155084,155085],{},"容器：",[632,155087,155088,155091,155094,155097,155100],{},[635,155089,155090],{},"会使用列表增删改查。",[635,155092,155093],{},"会遍历列表、字典。",[635,155095,155096],{},"会使用切片。",[635,155098,155099],{},"会用集合去重。",[635,155101,155102],{},"会处理列表嵌套字典。",[19,155104,155105],{},"文件和模块：",[632,155107,155108,155111,155114,155117,155120],{},[635,155109,155110],{},"会读写文本文件。",[635,155112,155113],{},"会读写 JSON。",[635,155115,155116],{},"会捕获常见异常。",[635,155118,155119],{},"会导入模块和第三方包。",[635,155121,155122],{},"会创建简单包结构。",[19,155124,155125],{},"项目能力：",[632,155127,155128,155131,155134,155137,155140],{},[635,155129,155130],{},"能把代码拆成函数。",[635,155132,155133],{},"能把数据保存到文件。",[635,155135,155136],{},"能处理用户输入错误。",[635,155138,155139],{},"能写一个完整菜单程序。",[635,155141,155142],{},"能用 pyecharts 生成图表。",[14,155144,155146],{"id":155145},"_1211-推荐练习顺序","12.11 推荐练习顺序",[632,155148,155149,155152,155155,155158,155161,155164,155167,155170],{},[635,155150,155151],{},"猜数字游戏。",[635,155153,155154],{},"ATM 菜单程序。",[635,155156,155157],{},"学生成绩统计。",[635,155159,155160],{},"学生管理系统函数版。",[635,155162,155163],{},"学生管理系统文件持久化版。",[635,155165,155166],{},"学生管理系统面向对象版。",[635,155168,155169],{},"销售数据统计。",[635,155171,155172],{},"销售数据可视化。",[14,155174,155176],{"id":155175},"_1212-常见学习误区","12.12 常见学习误区",[632,155178,155179,155182,155185,155188,155191,155194,155197],{},[635,155180,155181],{},"只看视频不敲代码。",[635,155183,155184],{},"一报错就复制错误去搜，不先读报错位置。",[635,155186,155187],{},"变量名随便写，后续自己看不懂。",[635,155189,155190],{},"所有代码都写在一个文件一个函数里。",[635,155192,155193],{},"不保存练习代码，复习时没有材料。",[635,155195,155196],{},"还没掌握列表字典就急着学框架。",[635,155198,155199],{},"不会读官方文档，只依赖教程。",[14,155201,155203],{"id":155202},"_1213-如何读报错","12.13 如何读报错",[19,155205,155206],{},"报错通常从下往上看最后几行。",[19,155208,15677],{},[117,155210,155213],{"className":155211,"code":155212,"language":5729,"meta":122},[5727],"ValueError: invalid literal for int() with base 10: 'abc'\n",[124,155214,155212],{"__ignoreMap":122},[19,155216,25140],{},[632,155218,155219,155225,155235],{},[635,155220,155221,155222,28925],{},"异常类型是 ",[124,155223,155224],{},"ValueError",[635,155226,107874,155227,155230,155231,155234],{},[124,155228,155229],{},"int()"," 无法把 ",[124,155232,155233],{},"'abc'"," 转成整数。",[635,155236,155237],{},"应该检查输入内容或增加异常处理。",[19,155239,155240],{},"再看文件名和行号：",[117,155242,155245],{"className":155243,"code":155244,"language":5729,"meta":122},[5727],"File \"main.py\", line 10, in \u003Cmodule>\n",[124,155246,155244],{"__ignoreMap":122},[19,155248,155249,155250,155252],{},"表示错误发生在 ",[124,155251,154997],{}," 第 10 行。",[14,155254,155256],{"id":155255},"_1214-后续学习方向","12.14 后续学习方向",[19,155258,155259],{},"Python 基础完成后，可以按兴趣选择方向：",[632,155261,155262,155274,155283,155295,155306,155315,155325],{},[635,155263,155264,155265,888,155268,888,155271,28925],{},"自动化办公：",[124,155266,155267],{},"openpyxl",[124,155269,155270],{},"python-docx",[124,155272,155273],{},"pdfplumber",[635,155275,155276,155277,888,155279,888,155281,28925],{},"数据分析：",[124,155278,101155],{},[124,155280,146575],{},[124,155282,146583],{},[635,155284,155285,155286,888,155289,888,155292,28925],{},"Web 后端：",[124,155287,155288],{},"Flask",[124,155290,155291],{},"FastAPI",[124,155293,155294],{},"Django",[635,155296,155297,155298,888,155300,888,155303,28925],{},"爬虫：",[124,155299,146560],{},[124,155301,155302],{},"BeautifulSoup",[124,155304,155305],{},"Scrapy",[635,155307,155308,155309,888,155311,155314],{},"测试开发：",[124,155310,146607],{},[124,155312,155313],{},"selenium","、接口测试。",[635,155316,155317,155318,888,155320,888,155322,28925],{},"人工智能：",[124,155319,101155],{},[124,155321,146575],{},[124,155323,155324],{},"pytorch",[635,155326,155327,155328,888,155330,888,155333,28925],{},"运维脚本：",[124,155329,146176],{},[124,155331,155332],{},"subprocess",[124,155334,155335],{},"paramiko",[19,155337,155338],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155340,155342],{"id":155341},"_1215-结课练习","12.15 结课练习",[632,155344,155345,155348,155351,155354,155357,155360,155363,155366],{},[635,155346,155347],{},"完成函数版学生管理系统。",[635,155349,155350],{},"给学生管理系统增加 JSON 持久化。",[635,155352,155353],{},"给学生管理系统增加异常处理。",[635,155355,155356],{},"把学生管理系统改成面向对象版。",[635,155358,155359],{},"使用 pyecharts 绘制学生成绩柱状图。",[635,155361,155362],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[635,155364,155365],{},"按品类统计销售额并绘制柱状图。",[635,155367,155368],{},"写一份自己的 Python 学习路线图。",[575,155370,155371],{},"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":122,"searchDepth":137,"depth":137,"links":155373},[155374,155375,155378,155379,155380,155386,155387,155388,155389,155390,155391,155392,155393,155394,155395],{"id":152090,"depth":137,"text":152091},{"id":152140,"depth":137,"text":152141,"children":155376},[155377],{"id":152144,"depth":151,"text":152145},{"id":152183,"depth":137,"text":152184},{"id":153657,"depth":137,"text":153658},{"id":153995,"depth":137,"text":153996,"children":155381},[155382,155383,155384,155385],{"id":153999,"depth":151,"text":154000},{"id":154139,"depth":151,"text":154140},{"id":154229,"depth":151,"text":154230},{"id":154315,"depth":151,"text":154316},{"id":154356,"depth":137,"text":154357},{"id":154549,"depth":137,"text":154550},{"id":154786,"depth":137,"text":154787},{"id":154977,"depth":137,"text":154978},{"id":155019,"depth":137,"text":155020},{"id":155145,"depth":137,"text":155146},{"id":155175,"depth":137,"text":155176},{"id":155202,"depth":137,"text":155203},{"id":155255,"depth":137,"text":155256},{"id":155341,"depth":137,"text":155342},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152082,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155402,"title":155403,"body":155404,"description":603,"extension":604,"meta":157873,"navigation":606,"path":157874,"seo":157875,"stem":157876,"__hash__":157877},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155405,"toc":157848},[155406,155409,155413,155416,155419,155439,155442,155465,155468,155471,155493,155496,155518,155522,155525,155565,155568,155689,155693,155696,155736,155739,155763,155766,155770,155773,155787,155820,155823,155858,155861,155884,155887,155920,155923,155925,155931,156006,156009,156015,156032,156072,156076,156079,156125,156127,156165,156168,156203,156206,156241,156244,156276,156279,156298,156302,156306,156419,156421,156496,156500,156546,156549,156575,156584,156588,156591,156654,156662,156690,156694,156734,156799,156803,156806,156845,156848,156893,156896,156957,156961,156988,156991,157019,157022,157026,157030,157095,157098,157136,157139,157171,157175,157274,157278,157281,157354,157357,157405,157409,157415,157455,157458,157505,157508,157557,157561,157563,157577,157579,157760,157764,157791,157811,157818,157822,157839,157845],[10,155407,155403],{"id":155408},"_2-基础语法变量与字符串",[14,155410,155412],{"id":155411},"_21-注释","2.1 注释",[19,155414,155415],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155417,155418],{},"单行注释：",[117,155420,155422],{"className":30918,"code":155421,"language":30920,"meta":122,"style":122},"# 这是单行注释\nprint(\"hello\")\n",[124,155423,155424,155429],{"__ignoreMap":122},[127,155425,155426],{"class":129,"line":130},[127,155427,155428],{"class":133},"# 这是单行注释\n",[127,155430,155431,155433,155435,155437],{"class":129,"line":137},[127,155432,30955],{"class":154},[127,155434,681],{"class":147},[127,155436,6386],{"class":781},[127,155438,687],{"class":147},[19,155440,155441],{},"多行说明常用三引号：",[117,155443,155445],{"className":30918,"code":155444,"language":30920,"meta":122,"style":122},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[124,155446,155447,155451,155456,155461],{"__ignoreMap":122},[127,155448,155449],{"class":129,"line":130},[127,155450,96227],{"class":781},[127,155452,155453],{"class":129,"line":137},[127,155454,155455],{"class":781},"这是多行说明。\n",[127,155457,155458],{"class":129,"line":151},[127,155459,155460],{"class":781},"常用于文件顶部说明、函数说明等。\n",[127,155462,155463],{"class":129,"line":167},[127,155464,96227],{"class":781},[19,155466,155467],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155469,155470],{},"不好：",[117,155472,155474],{"className":30918,"code":155473,"language":30920,"meta":122,"style":122},"# age 加 1\nage = age + 1\n",[124,155475,155476,155481],{"__ignoreMap":122},[127,155477,155478],{"class":129,"line":130},[127,155479,155480],{"class":133},"# age 加 1\n",[127,155482,155483,155485,155487,155489,155491],{"class":129,"line":137},[127,155484,146936],{"class":147},[127,155486,725],{"class":290},[127,155488,16248],{"class":147},[127,155490,1156],{"class":290},[127,155492,56233],{"class":154},[19,155494,155495],{},"较好：",[117,155497,155499],{"className":30918,"code":155498,"language":30920,"meta":122,"style":122},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[124,155500,155501,155506],{"__ignoreMap":122},[127,155502,155503],{"class":129,"line":130},[127,155504,155505],{"class":133},"# 用户过完生日后，年龄增加一岁\n",[127,155507,155508,155510,155512,155514,155516],{"class":129,"line":137},[127,155509,146936],{"class":147},[127,155511,725],{"class":290},[127,155513,16248],{"class":147},[127,155515,1156],{"class":290},[127,155517,56233],{"class":154},[14,155519,155521],{"id":155520},"_22-字面量","2.2 字面量",[19,155523,155524],{},"字面量就是代码中直接写出来的数据。",[117,155526,155528],{"className":30918,"code":155527,"language":30920,"meta":122,"style":122},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[124,155529,155530,155537,155544,155551,155558],{"__ignoreMap":122},[127,155531,155532,155534],{"class":129,"line":130},[127,155533,986],{"class":154},[127,155535,155536],{"class":133},"          # 整数\n",[127,155538,155539,155541],{"class":129,"line":137},[127,155540,728],{"class":154},[127,155542,155543],{"class":133},"         # 小数\n",[127,155545,155546,155548],{"class":129,"line":151},[127,155547,6386],{"class":781},[127,155549,155550],{"class":133},"      # 字符串\n",[127,155552,155553,155555],{"class":129,"line":167},[127,155554,32016],{"class":154},[127,155556,155557],{"class":133},"         # 布尔值\n",[127,155559,155560,155562],{"class":129,"line":415},[127,155561,96215],{"class":154},[127,155563,155564],{"class":133},"         # 空值\n",[19,155566,155567],{},"常见字面量类型：",[814,155569,155570,155580],{},[817,155571,155572],{},[820,155573,155574,155576,155578],{},[823,155575,24277],{},[823,155577,28032],{},[823,155579,26410],{},[860,155581,155582,155593,155604,155615,155627,155639,155651,155664,155676],{},[820,155583,155584,155586,155590],{},[865,155585,684],{},[865,155587,155588],{},[124,155589,986],{},[865,155591,155592],{},"整数",[820,155594,155595,155597,155601],{},[865,155596,719],{},[865,155598,155599],{},[124,155600,728],{},[865,155602,155603],{},"浮点数",[820,155605,155606,155608,155612],{},[865,155607,1844],{},[865,155609,155610],{},[124,155611,6386],{},[865,155613,155614],{},"字符串",[820,155616,155617,155619,155625],{},[865,155618,1899],{},[865,155620,155621,888,155623],{},[124,155622,32016],{},[124,155624,34527],{},[865,155626,66548],{},[820,155628,155629,155632,155636],{},[865,155630,155631],{},"NoneType",[865,155633,155634],{},[124,155635,96215],{},[865,155637,155638],{},"空值",[820,155640,155641,155643,155648],{},[865,155642,154460],{},[865,155644,155645],{},[124,155646,155647],{},"[1, 2, 3]",[865,155649,155650],{},"列表",[820,155652,155653,155656,155661],{},[865,155654,155655],{},"tuple",[865,155657,155658],{},[124,155659,155660],{},"(1, 2, 3)",[865,155662,155663],{},"元组",[820,155665,155666,155668,155673],{},[865,155667,115075],{},[865,155669,155670],{},[124,155671,155672],{},"{\"name\": \"张三\"}",[865,155674,155675],{},"字典",[820,155677,155678,155681,155686],{},[865,155679,155680],{},"set",[865,155682,155683],{},[124,155684,155685],{},"{1, 2, 3}",[865,155687,155688],{},"集合",[14,155690,155692],{"id":155691},"_23-变量","2.3 变量",[19,155694,155695],{},"变量是保存数据的名字。",[117,155697,155699],{"className":30918,"code":155698,"language":30920,"meta":122,"style":122},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[124,155700,155701,155709,155717,155727],{"__ignoreMap":122},[127,155702,155703,155705,155707],{"class":129,"line":130},[127,155704,146926],{"class":147},[127,155706,725],{"class":290},[127,155708,149743],{"class":781},[127,155710,155711,155713,155715],{"class":129,"line":137},[127,155712,146936],{"class":147},[127,155714,725],{"class":290},[127,155716,146941],{"class":154},[127,155718,155719,155722,155724],{"class":129,"line":151},[127,155720,155721],{"class":147},"height ",[127,155723,725],{"class":290},[127,155725,155726],{"class":154}," 1.75\n",[127,155728,155729,155732,155734],{"class":129,"line":167},[127,155730,155731],{"class":147},"is_student ",[127,155733,725],{"class":290},[127,155735,153989],{"class":154},[19,155737,155738],{},"Python 的变量不需要提前声明类型：",[117,155740,155742],{"className":30918,"code":155741,"language":30920,"meta":122,"style":122},"score = 100\nscore = \"满分\"\n",[124,155743,155744,155754],{"__ignoreMap":122},[127,155745,155746,155749,155751],{"class":129,"line":130},[127,155747,155748],{"class":147},"score ",[127,155750,725],{"class":290},[127,155752,155753],{"class":154}," 100\n",[127,155755,155756,155758,155760],{"class":129,"line":137},[127,155757,155748],{"class":147},[127,155759,725],{"class":290},[127,155761,155762],{"class":781}," \"满分\"\n",[19,155764,155765],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155767,155769],{"id":155768},"_24-变量命名规则","2.4 变量命名规则",[19,155771,155772],{},"硬性规则：",[632,155774,155775,155778,155781,155784],{},[635,155776,155777],{},"只能由字母、数字、下划线组成。",[635,155779,155780],{},"不能以数字开头。",[635,155782,155783],{},"不能使用 Python 关键字。",[635,155785,155786],{},"区分大小写。",[117,155788,155790],{"className":30918,"code":155789,"language":30920,"meta":122,"style":122},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[124,155791,155792,155801,155810],{"__ignoreMap":122},[127,155793,155794,155797,155799],{"class":129,"line":130},[127,155795,155796],{"class":147},"user_name ",[127,155798,725],{"class":290},[127,155800,146931],{"class":781},[127,155802,155803,155806,155808],{"class":129,"line":137},[127,155804,155805],{"class":147},"age2 ",[127,155807,725],{"class":290},[127,155809,146941],{"class":154},[127,155811,155812,155815,155817],{"class":129,"line":151},[127,155813,155814],{"class":147},"_token ",[127,155816,725],{"class":290},[127,155818,155819],{"class":781}," \"abc\"\n",[19,155821,155822],{},"错误写法：",[117,155824,155826],{"className":30918,"code":155825,"language":30920,"meta":122,"style":122},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[124,155827,155828,155837,155849],{"__ignoreMap":122},[127,155829,155830,155833,155835],{"class":129,"line":130},[127,155831,155832],{"class":77932},"2age",[127,155834,14106],{"class":290},[127,155836,146941],{"class":154},[127,155838,155839,155841,155843,155845,155847],{"class":129,"line":137},[127,155840,131974],{"class":147},[127,155842,1207],{"class":290},[127,155844,146926],{"class":147},[127,155846,725],{"class":290},[127,155848,146931],{"class":781},[127,155850,155851,155853,155855],{"class":129,"line":151},[127,155852,15236],{"class":290},[127,155854,14106],{"class":290},[127,155856,155857],{"class":781}," \"一班\"\n",[19,155859,155860],{},"查看关键字：",[117,155862,155864],{"className":30918,"code":155863,"language":30920,"meta":122,"style":122},"import keyword\n\nprint(keyword.kwlist)\n",[124,155865,155866,155873,155877],{"__ignoreMap":122},[127,155867,155868,155870],{"class":129,"line":130},[127,155869,30932],{"class":290},[127,155871,155872],{"class":147}," keyword\n",[127,155874,155875],{"class":129,"line":137},[127,155876,2942],{"emptyLinePlaceholder":606},[127,155878,155879,155881],{"class":129,"line":151},[127,155880,30955],{"class":154},[127,155882,155883],{"class":147},"(keyword.kwlist)\n",[19,155885,155886],{},"推荐命名风格：",[117,155888,155890],{"className":30918,"code":155889,"language":30920,"meta":122,"style":122},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[124,155891,155892,155901,155911],{"__ignoreMap":122},[127,155893,155894,155897,155899],{"class":129,"line":130},[127,155895,155896],{"class":147},"student_name ",[127,155898,725],{"class":290},[127,155900,149743],{"class":781},[127,155902,155903,155906,155908],{"class":129,"line":137},[127,155904,155905],{"class":147},"total_price ",[127,155907,725],{"class":290},[127,155909,155910],{"class":154}," 99.8\n",[127,155912,155913,155916,155918],{"class":129,"line":151},[127,155914,155915],{"class":147},"is_finished ",[127,155917,725],{"class":290},[127,155919,126336],{"class":154},[19,155921,155922],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155924,51272],{"id":51271},[19,155926,104895,155927,155930],{},[124,155928,155929],{},"type()"," 查看数据类型：",[117,155932,155934],{"className":30918,"code":155933,"language":30920,"meta":122,"style":122},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[124,155935,155936,155950,155964,155978,155992],{"__ignoreMap":122},[127,155937,155938,155940,155942,155944,155946,155948],{"class":129,"line":130},[127,155939,30955],{"class":154},[127,155941,681],{"class":147},[127,155943,103636],{"class":154},[127,155945,681],{"class":147},[127,155947,986],{"class":154},[127,155949,31037],{"class":147},[127,155951,155952,155954,155956,155958,155960,155962],{"class":129,"line":137},[127,155953,30955],{"class":154},[127,155955,681],{"class":147},[127,155957,103636],{"class":154},[127,155959,681],{"class":147},[127,155961,728],{"class":154},[127,155963,31037],{"class":147},[127,155965,155966,155968,155970,155972,155974,155976],{"class":129,"line":151},[127,155967,30955],{"class":154},[127,155969,681],{"class":147},[127,155971,103636],{"class":154},[127,155973,681],{"class":147},[127,155975,6386],{"class":781},[127,155977,31037],{"class":147},[127,155979,155980,155982,155984,155986,155988,155990],{"class":129,"line":167},[127,155981,30955],{"class":154},[127,155983,681],{"class":147},[127,155985,103636],{"class":154},[127,155987,681],{"class":147},[127,155989,32016],{"class":154},[127,155991,31037],{"class":147},[127,155993,155994,155996,155998,156000,156002,156004],{"class":129,"line":415},[127,155995,30955],{"class":154},[127,155997,681],{"class":147},[127,155999,103636],{"class":154},[127,156001,681],{"class":147},[127,156003,96215],{"class":154},[127,156005,31037],{"class":147},[19,156007,156008],{},"输出类似：",[117,156010,156013],{"className":156011,"code":156012,"language":5729,"meta":122},[5727],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[124,156014,156012],{"__ignoreMap":122},[19,156016,9567,156017,107812,156019,156021,156022,156024,156025,22041,156027,156024,156029,156031],{},[124,156018,1899],{},[124,156020,684],{}," 的子类，",[124,156023,32016],{}," 可以当作 ",[124,156026,893],{},[124,156028,34527],{},[124,156030,867],{},"，但业务代码中不要滥用。",[117,156033,156035],{"className":30918,"code":156034,"language":30920,"meta":122,"style":122},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[124,156036,156037,156055],{"__ignoreMap":122},[127,156038,156039,156041,156043,156045,156047,156049,156052],{"class":129,"line":130},[127,156040,30955],{"class":154},[127,156042,681],{"class":147},[127,156044,32016],{"class":154},[127,156046,46106],{"class":290},[127,156048,25659],{"class":154},[127,156050,156051],{"class":147},")   ",[127,156053,156054],{"class":133},"# 2\n",[127,156056,156057,156059,156061,156063,156065,156067,156069],{"class":129,"line":137},[127,156058,30955],{"class":154},[127,156060,681],{"class":147},[127,156062,34527],{"class":154},[127,156064,46106],{"class":290},[127,156066,25659],{"class":154},[127,156068,46348],{"class":147},[127,156070,156071],{"class":133},"# 1\n",[14,156073,156075],{"id":156074},"_26-类型转换","2.6 类型转换",[19,156077,156078],{},"常用转换函数：",[117,156080,156082],{"className":30918,"code":156081,"language":30920,"meta":122,"style":122},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[124,156083,156084,156094,156105,156115],{"__ignoreMap":122},[127,156085,156086,156088,156090,156092],{"class":129,"line":130},[127,156087,684],{"class":154},[127,156089,681],{"class":147},[127,156091,54851],{"class":781},[127,156093,687],{"class":147},[127,156095,156096,156098,156100,156103],{"class":129,"line":137},[127,156097,719],{"class":154},[127,156099,681],{"class":147},[127,156101,156102],{"class":781},"\"3.14\"",[127,156104,687],{"class":147},[127,156106,156107,156109,156111,156113],{"class":129,"line":151},[127,156108,1844],{"class":154},[127,156110,681],{"class":147},[127,156112,986],{"class":154},[127,156114,687],{"class":147},[127,156116,156117,156119,156121,156123],{"class":129,"line":167},[127,156118,1899],{"class":154},[127,156120,681],{"class":147},[127,156122,893],{"class":154},[127,156124,687],{"class":147},[19,156126,15677],{},[117,156128,156130],{"className":30918,"code":156129,"language":30920,"meta":122,"style":122},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[124,156131,156132,156141,156152],{"__ignoreMap":122},[127,156133,156134,156136,156138],{"class":129,"line":130},[127,156135,146936],{"class":147},[127,156137,725],{"class":290},[127,156139,156140],{"class":781}," \"18\"\n",[127,156142,156143,156145,156147,156149],{"class":129,"line":137},[127,156144,146936],{"class":147},[127,156146,725],{"class":290},[127,156148,2924],{"class":154},[127,156150,156151],{"class":147},"(age)\n",[127,156153,156154,156156,156159,156161,156163],{"class":129,"line":151},[127,156155,30955],{"class":154},[127,156157,156158],{"class":147},"(age ",[127,156160,1156],{"class":290},[127,156162,25659],{"class":154},[127,156164,687],{"class":147},[19,156166,156167],{},"输入得到的内容永远是字符串：",[117,156169,156171],{"className":30918,"code":156170,"language":30920,"meta":122,"style":122},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[124,156172,156173,156189],{"__ignoreMap":122},[127,156174,156175,156178,156180,156182,156184,156187],{"class":129,"line":130},[127,156176,156177],{"class":147},"num ",[127,156179,725],{"class":290},[127,156181,61138],{"class":154},[127,156183,681],{"class":147},[127,156185,156186],{"class":781},"\"请输入数字:\"",[127,156188,687],{"class":147},[127,156190,156191,156193,156195,156197,156200],{"class":129,"line":137},[127,156192,30955],{"class":154},[127,156194,681],{"class":147},[127,156196,103636],{"class":154},[127,156198,156199],{"class":147},"(num))  ",[127,156201,156202],{"class":133},"# str\n",[19,156204,156205],{},"如果要做数学运算，必须转换：",[117,156207,156209],{"className":30918,"code":156208,"language":30920,"meta":122,"style":122},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[124,156210,156211,156229],{"__ignoreMap":122},[127,156212,156213,156215,156217,156219,156221,156223,156225,156227],{"class":129,"line":130},[127,156214,156177],{"class":147},[127,156216,725],{"class":290},[127,156218,2924],{"class":154},[127,156220,681],{"class":147},[127,156222,54356],{"class":154},[127,156224,681],{"class":147},[127,156226,156186],{"class":781},[127,156228,31037],{"class":147},[127,156230,156231,156233,156235,156237,156239],{"class":129,"line":137},[127,156232,30955],{"class":154},[127,156234,46159],{"class":147},[127,156236,1156],{"class":290},[127,156238,2580],{"class":154},[127,156240,687],{"class":147},[19,156242,156243],{},"常见错误：",[117,156245,156247],{"className":30918,"code":156246,"language":30920,"meta":122,"style":122},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[124,156248,156249,156262],{"__ignoreMap":122},[127,156250,156251,156253,156255,156257,156259],{"class":129,"line":130},[127,156252,684],{"class":154},[127,156254,681],{"class":147},[127,156256,156102],{"class":781},[127,156258,156051],{"class":147},[127,156260,156261],{"class":133},"# 错误\n",[127,156263,156264,156266,156268,156271,156274],{"class":129,"line":137},[127,156265,684],{"class":154},[127,156267,681],{"class":147},[127,156269,156270],{"class":781},"\"abc\"",[127,156272,156273],{"class":147},")    ",[127,156275,156261],{"class":133},[19,156277,156278],{},"正确写法：",[117,156280,156282],{"className":30918,"code":156281,"language":30920,"meta":122,"style":122},"num = float(\"3.14\")\n",[124,156283,156284],{"__ignoreMap":122},[127,156285,156286,156288,156290,156292,156294,156296],{"class":129,"line":130},[127,156287,156177],{"class":147},[127,156289,725],{"class":290},[127,156291,110326],{"class":154},[127,156293,681],{"class":147},[127,156295,156102],{"class":781},[127,156297,687],{"class":147},[14,156299,156301],{"id":156300},"_27-运算符","2.7 运算符",[62,156303,156305],{"id":156304},"_271-算术运算符","2.7.1 算术运算符",[814,156307,156308,156319],{},[817,156309,156310],{},[820,156311,156312,156315,156317],{},[823,156313,156314],{},"运算符",[823,156316,26410],{},[823,156318,28032],{},[860,156320,156321,156335,156349,156363,156377,156391,156405],{},[820,156322,156323,156327,156330],{},[865,156324,156325],{},[124,156326,1156],{},[865,156328,156329],{},"加法",[865,156331,156332],{},[124,156333,156334],{},"1 + 2",[820,156336,156337,156341,156344],{},[865,156338,156339],{},[124,156340,1207],{},[865,156342,156343],{},"减法",[865,156345,156346],{},[124,156347,156348],{},"5 - 3",[820,156350,156351,156355,156358],{},[865,156352,156353],{},[124,156354,1130],{},[865,156356,156357],{},"乘法",[865,156359,156360],{},[124,156361,156362],{},"2 * 3",[820,156364,156365,156369,156372],{},[865,156366,156367],{},[124,156368,1259],{},[865,156370,156371],{},"除法，结果是浮点数",[865,156373,156374],{},[124,156375,156376],{},"5 \u002F 2",[820,156378,156379,156383,156386],{},[865,156380,156381],{},[124,156382,33869],{},[865,156384,156385],{},"整除",[865,156387,156388],{},[124,156389,156390],{},"5 \u002F\u002F 2",[820,156392,156393,156397,156400],{},[865,156394,156395],{},[124,156396,1003],{},[865,156398,156399],{},"取余",[865,156401,156402],{},[124,156403,156404],{},"5 % 2",[820,156406,156407,156411,156414],{},[865,156408,156409],{},[124,156410,11203],{},[865,156412,156413],{},"幂运算",[865,156415,156416],{},[124,156417,156418],{},"2 ** 3",[19,156420,15677],{},[117,156422,156424],{"className":30918,"code":156423,"language":30920,"meta":122,"style":122},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[124,156425,156426,156444,156461,156478],{"__ignoreMap":122},[127,156427,156428,156430,156432,156434,156437,156439,156441],{"class":129,"line":130},[127,156429,30955],{"class":154},[127,156431,681],{"class":147},[127,156433,994],{"class":154},[127,156435,156436],{"class":290}," \u002F",[127,156438,15297],{"class":154},[127,156440,156051],{"class":147},[127,156442,156443],{"class":133},"# 2.5\n",[127,156445,156446,156448,156450,156452,156455,156457,156459],{"class":129,"line":137},[127,156447,30955],{"class":154},[127,156449,681],{"class":147},[127,156451,994],{"class":154},[127,156453,156454],{"class":290}," \u002F\u002F",[127,156456,15297],{"class":154},[127,156458,46348],{"class":147},[127,156460,156054],{"class":133},[127,156462,156463,156465,156467,156469,156472,156474,156476],{"class":129,"line":151},[127,156464,30955],{"class":154},[127,156466,681],{"class":147},[127,156468,994],{"class":154},[127,156470,156471],{"class":290}," %",[127,156473,15297],{"class":154},[127,156475,156051],{"class":147},[127,156477,156071],{"class":133},[127,156479,156480,156482,156484,156486,156489,156491,156493],{"class":129,"line":167},[127,156481,30955],{"class":154},[127,156483,681],{"class":147},[127,156485,530],{"class":154},[127,156487,156488],{"class":290}," **",[127,156490,78599],{"class":154},[127,156492,46348],{"class":147},[127,156494,156495],{"class":133},"# 8\n",[62,156497,156499],{"id":156498},"_272-赋值运算符","2.7.2 赋值运算符",[117,156501,156503],{"className":30918,"code":156502,"language":30920,"meta":122,"style":122},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[124,156504,156505,156513,156521,156529,156537],{"__ignoreMap":122},[127,156506,156507,156509,156511],{"class":129,"line":130},[127,156508,156177],{"class":147},[127,156510,725],{"class":290},[127,156512,58961],{"class":154},[127,156514,156515,156517,156519],{"class":129,"line":137},[127,156516,156177],{"class":147},[127,156518,10019],{"class":290},[127,156520,54962],{"class":154},[127,156522,156523,156525,156527],{"class":129,"line":151},[127,156524,156177],{"class":147},[127,156526,150642],{"class":290},[127,156528,48263],{"class":154},[127,156530,156531,156533,156535],{"class":129,"line":167},[127,156532,156177],{"class":147},[127,156534,137538],{"class":290},[127,156536,120565],{"class":154},[127,156538,156539,156541,156544],{"class":129,"line":415},[127,156540,156177],{"class":147},[127,156542,156543],{"class":290},"\u002F=",[127,156545,48263],{"class":154},[19,156547,156548],{},"等价关系：",[117,156550,156552],{"className":30918,"code":156551,"language":30920,"meta":122,"style":122},"num += 1\nnum = num + 1\n",[124,156553,156554,156562],{"__ignoreMap":122},[127,156555,156556,156558,156560],{"class":129,"line":130},[127,156557,156177],{"class":147},[127,156559,10019],{"class":290},[127,156561,56233],{"class":154},[127,156563,156564,156566,156568,156571,156573],{"class":129,"line":137},[127,156565,156177],{"class":147},[127,156567,725],{"class":290},[127,156569,156570],{"class":147}," num ",[127,156572,1156],{"class":290},[127,156574,56233],{"class":154},[19,156576,156577,156578,101547,156581,28925],{},"Python 没有 ",[124,156579,156580],{},"num++",[124,156582,156583],{},"num--",[62,156585,156587],{"id":156586},"_273-比较运算符","2.7.3 比较运算符",[19,156589,156590],{},"比较运算结果是布尔值。",[117,156592,156594],{"className":30918,"code":156593,"language":30920,"meta":122,"style":122},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[124,156595,156596,156610,156625,156639],{"__ignoreMap":122},[127,156597,156598,156600,156602,156604,156606,156608],{"class":129,"line":130},[127,156599,30955],{"class":154},[127,156601,681],{"class":147},[127,156603,1121],{"class":154},[127,156605,26763],{"class":290},[127,156607,2690],{"class":154},[127,156609,687],{"class":147},[127,156611,156612,156614,156616,156618,156621,156623],{"class":129,"line":137},[127,156613,30955],{"class":154},[127,156615,681],{"class":147},[127,156617,1121],{"class":154},[127,156619,156620],{"class":290}," >=",[127,156622,2580],{"class":154},[127,156624,687],{"class":147},[127,156626,156627,156629,156631,156633,156635,156637],{"class":129,"line":151},[127,156628,30955],{"class":154},[127,156630,681],{"class":147},[127,156632,1121],{"class":154},[127,156634,102088],{"class":290},[127,156636,2625],{"class":154},[127,156638,687],{"class":147},[127,156640,156641,156643,156645,156647,156650,156652],{"class":129,"line":167},[127,156642,30955],{"class":154},[127,156644,681],{"class":147},[127,156646,1121],{"class":154},[127,156648,156649],{"class":290}," !=",[127,156651,2625],{"class":154},[127,156653,687],{"class":147},[19,156655,156656,156657,156659,156660,28925],{},"注意：判断相等用 ",[124,156658,3491],{},"，赋值用 ",[124,156661,725],{},[117,156663,156665],{"className":30918,"code":156664,"language":30920,"meta":122,"style":122},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[124,156666,156667,156679],{"__ignoreMap":122},[127,156668,156669,156671,156673,156676],{"class":129,"line":130},[127,156670,146936],{"class":147},[127,156672,725],{"class":290},[127,156674,156675],{"class":154}," 18",[127,156677,156678],{"class":133},"       # 赋值\n",[127,156680,156681,156683,156685,156687],{"class":129,"line":137},[127,156682,146936],{"class":147},[127,156684,3491],{"class":290},[127,156686,156675],{"class":154},[127,156688,156689],{"class":133},"      # 判断是否相等\n",[62,156691,156693],{"id":156692},"_274-逻辑运算符","2.7.4 逻辑运算符",[814,156695,156696,156704],{},[817,156697,156698],{},[820,156699,156700,156702],{},[823,156701,156314],{},[823,156703,26410],{},[860,156705,156706,156715,156724],{},[820,156707,156708,156712],{},[865,156709,156710],{},[124,156711,31002],{},[865,156713,156714],{},"并且",[820,156716,156717,156721],{},[865,156718,156719],{},[124,156720,115619],{},[865,156722,156723],{},"或者",[820,156725,156726,156731],{},[865,156727,156728],{},[124,156729,156730],{},"not",[865,156732,156733],{},"取反",[117,156735,156737],{"className":30918,"code":156736,"language":30920,"meta":122,"style":122},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[124,156738,156739,156747,156756,156760,156775,156789],{"__ignoreMap":122},[127,156740,156741,156743,156745],{"class":129,"line":130},[127,156742,146936],{"class":147},[127,156744,725],{"class":290},[127,156746,88594],{"class":154},[127,156748,156749,156752,156754],{"class":129,"line":137},[127,156750,156751],{"class":147},"has_ticket ",[127,156753,725],{"class":290},[127,156755,153989],{"class":154},[127,156757,156758],{"class":129,"line":151},[127,156759,2942],{"emptyLinePlaceholder":606},[127,156761,156762,156764,156766,156768,156770,156772],{"class":129,"line":167},[127,156763,30955],{"class":154},[127,156765,156158],{"class":147},[127,156767,2253],{"class":290},[127,156769,156675],{"class":154},[127,156771,120958],{"class":290},[127,156773,156774],{"class":147}," has_ticket)\n",[127,156776,156777,156779,156781,156783,156785,156787],{"class":129,"line":415},[127,156778,30955],{"class":154},[127,156780,156158],{"class":147},[127,156782,1584],{"class":290},[127,156784,156675],{"class":154},[127,156786,114730],{"class":290},[127,156788,156774],{"class":147},[127,156790,156791,156793,156795,156797],{"class":129,"line":421},[127,156792,30955],{"class":154},[127,156794,681],{"class":147},[127,156796,156730],{"class":290},[127,156798,156774],{"class":147},[14,156800,156802],{"id":156801},"_28-字符串定义","2.8 字符串定义",[19,156804,156805],{},"三种常见写法：",[117,156807,156809],{"className":30918,"code":156808,"language":30920,"meta":122,"style":122},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[124,156810,156811,156821,156830,156840],{"__ignoreMap":122},[127,156812,156813,156816,156818],{"class":129,"line":130},[127,156814,156815],{"class":147},"name1 ",[127,156817,725],{"class":290},[127,156819,156820],{"class":781}," '小明'\n",[127,156822,156823,156826,156828],{"class":129,"line":137},[127,156824,156825],{"class":147},"name2 ",[127,156827,725],{"class":290},[127,156829,149743],{"class":781},[127,156831,156832,156835,156837],{"class":129,"line":151},[127,156833,156834],{"class":147},"text ",[127,156836,725],{"class":290},[127,156838,156839],{"class":781}," \"\"\"这是多行字符串\n",[127,156841,156842],{"class":129,"line":167},[127,156843,156844],{"class":781},"可以换行\"\"\"\n",[19,156846,156847],{},"字符串中包含引号：",[117,156849,156851],{"className":30918,"code":156850,"language":30920,"meta":122,"style":122},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[124,156852,156853,156863,156873],{"__ignoreMap":122},[127,156854,156855,156858,156860],{"class":129,"line":130},[127,156856,156857],{"class":147},"msg ",[127,156859,725],{"class":290},[127,156861,156862],{"class":781}," \"他说:'你好'\"\n",[127,156864,156865,156868,156870],{"class":129,"line":137},[127,156866,156867],{"class":147},"msg2 ",[127,156869,725],{"class":290},[127,156871,156872],{"class":781}," '他说:\"你好\"'\n",[127,156874,156875,156878,156880,156883,156886,156889,156891],{"class":129,"line":151},[127,156876,156877],{"class":147},"msg3 ",[127,156879,725],{"class":290},[127,156881,156882],{"class":781}," \"他说:",[127,156884,156885],{"class":154},"\\\"",[127,156887,156888],{"class":781},"你好",[127,156890,156885],{"class":154},[127,156892,25674],{"class":781},[19,156894,156895],{},"常见转义字符：",[814,156897,156898,156907],{},[817,156899,156900],{},[820,156901,156902,156905],{},[823,156903,156904],{},"写法",[823,156906,101229],{},[860,156908,156909,156919,156928,156938,156947],{},[820,156910,156911,156916],{},[865,156912,156913],{},[124,156914,156915],{},"\\n",[865,156917,156918],{},"换行",[820,156920,156921,156925],{},[865,156922,156923],{},[124,156924,1776],{},[865,156926,156927],{},"制表符",[820,156929,156930,156935],{},[865,156931,156932],{},[124,156933,156934],{},"\\\\",[865,156936,156937],{},"反斜杠",[820,156939,156940,156944],{},[865,156941,156942],{},[124,156943,156885],{},[865,156945,156946],{},"双引号",[820,156948,156949,156954],{},[865,156950,156951],{},[124,156952,156953],{},"\\'",[865,156955,156956],{},"单引号",[14,156958,156960],{"id":156959},"_29-字符串拼接","2.9 字符串拼接",[117,156962,156964],{"className":30918,"code":156963,"language":30920,"meta":122,"style":122},"name = \"小明\"\nprint(\"你好，\" + name)\n",[124,156965,156966,156974],{"__ignoreMap":122},[127,156967,156968,156970,156972],{"class":129,"line":130},[127,156969,146926],{"class":147},[127,156971,725],{"class":290},[127,156973,149743],{"class":781},[127,156975,156976,156978,156980,156983,156985],{"class":129,"line":137},[127,156977,30955],{"class":154},[127,156979,681],{"class":147},[127,156981,156982],{"class":781},"\"你好，\"",[127,156984,46106],{"class":290},[127,156986,156987],{"class":147}," name)\n",[19,156989,156990],{},"字符串只能和字符串拼接：",[117,156992,156994],{"className":30918,"code":156993,"language":30920,"meta":122,"style":122},"age = 18\nprint(\"年龄:\" + str(age))\n",[124,156995,156996,157004],{"__ignoreMap":122},[127,156997,156998,157000,157002],{"class":129,"line":130},[127,156999,146936],{"class":147},[127,157001,725],{"class":290},[127,157003,146941],{"class":154},[127,157005,157006,157008,157010,157012,157014,157016],{"class":129,"line":137},[127,157007,30955],{"class":154},[127,157009,681],{"class":147},[127,157011,146907],{"class":781},[127,157013,46106],{"class":290},[127,157015,74448],{"class":154},[127,157017,157018],{"class":147},"(age))\n",[19,157020,157021],{},"更推荐使用格式化字符串。",[14,157023,157025],{"id":157024},"_210-字符串格式化","2.10 字符串格式化",[62,157027,157029],{"id":157028},"_2101-百分号格式化","2.10.1 百分号格式化",[117,157031,157033],{"className":30918,"code":157032,"language":30920,"meta":122,"style":122},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[124,157034,157035,157043,157051,157060,157064],{"__ignoreMap":122},[127,157036,157037,157039,157041],{"class":129,"line":130},[127,157038,146926],{"class":147},[127,157040,725],{"class":290},[127,157042,149743],{"class":781},[127,157044,157045,157047,157049],{"class":129,"line":137},[127,157046,146936],{"class":147},[127,157048,725],{"class":290},[127,157050,146941],{"class":154},[127,157052,157053,157055,157057],{"class":129,"line":151},[127,157054,155748],{"class":147},[127,157056,725],{"class":290},[127,157058,157059],{"class":154}," 95.5\n",[127,157061,157062],{"class":129,"line":167},[127,157063,2942],{"emptyLinePlaceholder":606},[127,157065,157066,157068,157070,157073,157076,157079,157082,157085,157088,157090,157092],{"class":129,"line":415},[127,157067,30955],{"class":154},[127,157069,681],{"class":147},[127,157071,157072],{"class":781},"\"姓名:",[127,157074,157075],{"class":154},"%s",[127,157077,157078],{"class":781}," 年龄:",[127,157080,157081],{"class":154},"%d",[127,157083,157084],{"class":781}," 分数:",[127,157086,157087],{"class":154},"%.1f",[127,157089,926],{"class":781},[127,157091,156471],{"class":290},[127,157093,157094],{"class":147}," (name, age, score))\n",[19,157096,157097],{},"常用占位符：",[814,157099,157100,157109],{},[817,157101,157102],{},[820,157103,157104,157107],{},[823,157105,157106],{},"占位符",[823,157108,26410],{},[860,157110,157111,157119,157127],{},[820,157112,157113,157117],{},[865,157114,157115],{},[124,157116,157075],{},[865,157118,155614],{},[820,157120,157121,157125],{},[865,157122,157123],{},[124,157124,157081],{},[865,157126,155592],{},[820,157128,157129,157134],{},[865,157130,157131],{},[124,157132,157133],{},"%f",[865,157135,155603],{},[19,157137,157138],{},"精度控制：",[117,157140,157142],{"className":30918,"code":157141,"language":30920,"meta":122,"style":122},"price = 12.3456\nprint(\"%.2f\" % price)\n",[124,157143,157144,157153],{"__ignoreMap":122},[127,157145,157146,157148,157150],{"class":129,"line":130},[127,157147,147071],{"class":147},[127,157149,725],{"class":290},[127,157151,157152],{"class":154}," 12.3456\n",[127,157154,157155,157157,157159,157161,157164,157166,157168],{"class":129,"line":137},[127,157156,30955],{"class":154},[127,157158,681],{"class":147},[127,157160,926],{"class":781},[127,157162,157163],{"class":154},"%.2f",[127,157165,926],{"class":781},[127,157167,156471],{"class":290},[127,157169,157170],{"class":147}," price)\n",[62,157172,157174],{"id":157173},"_2102-format方法","2.10.2 format方法",[117,157176,157178],{"className":30918,"code":157177,"language":30920,"meta":122,"style":122},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[124,157179,157180,157188,157196,157200,157219,157239],{"__ignoreMap":122},[127,157181,157182,157184,157186],{"class":129,"line":130},[127,157183,146926],{"class":147},[127,157185,725],{"class":290},[127,157187,149743],{"class":781},[127,157189,157190,157192,157194],{"class":129,"line":137},[127,157191,146936],{"class":147},[127,157193,725],{"class":290},[127,157195,146941],{"class":154},[127,157197,157198],{"class":129,"line":151},[127,157199,2942],{"emptyLinePlaceholder":606},[127,157201,157202,157204,157206,157208,157210,157212,157214,157216],{"class":129,"line":167},[127,157203,30955],{"class":154},[127,157205,681],{"class":147},[127,157207,157072],{"class":781},[127,157209,32999],{"class":154},[127,157211,157078],{"class":781},[127,157213,32999],{"class":154},[127,157215,926],{"class":781},[127,157217,157218],{"class":147},".format(name, age))\n",[127,157220,157221,157223,157225,157227,157230,157232,157235,157237],{"class":129,"line":415},[127,157222,30955],{"class":154},[127,157224,681],{"class":147},[127,157226,157072],{"class":781},[127,157228,157229],{"class":154},"{0}",[127,157231,157078],{"class":781},[127,157233,157234],{"class":154},"{1}",[127,157236,926],{"class":781},[127,157238,157218],{"class":147},[127,157240,157241,157243,157245,157247,157250,157252,157255,157257,157260,157262,157264,157267,157269,157271],{"class":129,"line":421},[127,157242,30955],{"class":154},[127,157244,681],{"class":147},[127,157246,157072],{"class":781},[127,157248,157249],{"class":154},"{name}",[127,157251,157078],{"class":781},[127,157253,157254],{"class":154},"{age}",[127,157256,926],{"class":781},[127,157258,157259],{"class":147},".format(",[127,157261,80339],{"class":5758},[127,157263,725],{"class":290},[127,157265,157266],{"class":147},"name, ",[127,157268,70754],{"class":5758},[127,157270,725],{"class":290},[127,157272,157273],{"class":147},"age))\n",[62,157275,157277],{"id":157276},"_2103-f-string","2.10.3 f-string",[19,157279,157280],{},"推荐写法：",[117,157282,157284],{"className":30918,"code":157283,"language":30920,"meta":122,"style":122},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[124,157285,157286,157294,157302,157310,157314],{"__ignoreMap":122},[127,157287,157288,157290,157292],{"class":129,"line":130},[127,157289,146926],{"class":147},[127,157291,725],{"class":290},[127,157293,149743],{"class":781},[127,157295,157296,157298,157300],{"class":129,"line":137},[127,157297,146936],{"class":147},[127,157299,725],{"class":290},[127,157301,146941],{"class":154},[127,157303,157304,157306,157308],{"class":129,"line":151},[127,157305,155748],{"class":147},[127,157307,725],{"class":290},[127,157309,157059],{"class":154},[127,157311,157312],{"class":129,"line":167},[127,157313,2942],{"emptyLinePlaceholder":606},[127,157315,157316,157318,157320,157322,157324,157326,157328,157330,157332,157334,157336,157338,157340,157342,157345,157348,157350,157352],{"class":129,"line":415},[127,157317,30955],{"class":154},[127,157319,681],{"class":147},[127,157321,731],{"class":290},[127,157323,157072],{"class":781},[127,157325,1570],{"class":154},[127,157327,80339],{"class":147},[127,157329,1620],{"class":154},[127,157331,157078],{"class":781},[127,157333,1570],{"class":154},[127,157335,70754],{"class":147},[127,157337,1620],{"class":154},[127,157339,157084],{"class":781},[127,157341,1570],{"class":154},[127,157343,157344],{"class":147},"score",[127,157346,157347],{"class":290},":.1f",[127,157349,1620],{"class":154},[127,157351,926],{"class":781},[127,157353,687],{"class":147},[19,157355,157356],{},"表达式也可以放进去：",[117,157358,157360],{"className":30918,"code":157359,"language":30920,"meta":122,"style":122},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[124,157361,157362,157370,157378],{"__ignoreMap":122},[127,157363,157364,157366,157368],{"class":129,"line":130},[127,157365,147071],{"class":147},[127,157367,725],{"class":290},[127,157369,147076],{"class":154},[127,157371,157372,157374,157376],{"class":129,"line":137},[127,157373,147081],{"class":147},[127,157375,725],{"class":290},[127,157377,54962],{"class":154},[127,157379,157380,157382,157384,157386,157389,157391,157393,157395,157398,157400,157403],{"class":129,"line":151},[127,157381,30955],{"class":154},[127,157383,681],{"class":147},[127,157385,731],{"class":290},[127,157387,157388],{"class":781},"\"总价:",[127,157390,1570],{"class":154},[127,157392,147071],{"class":147},[127,157394,1130],{"class":290},[127,157396,157397],{"class":147}," count",[127,157399,1620],{"class":154},[127,157401,157402],{"class":781},"元\"",[127,157404,687],{"class":147},[14,157406,157408],{"id":157407},"_211-input输入","2.11 input输入",[19,157410,157411,157414],{},[124,157412,157413],{},"input()"," 会暂停程序，等待用户输入。",[117,157416,157418],{"className":30918,"code":157417,"language":30920,"meta":122,"style":122},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[124,157419,157420,157434],{"__ignoreMap":122},[127,157421,157422,157424,157426,157428,157430,157432],{"class":129,"line":130},[127,157423,146926],{"class":147},[127,157425,725],{"class":290},[127,157427,61138],{"class":154},[127,157429,681],{"class":147},[127,157431,152769],{"class":781},[127,157433,687],{"class":147},[127,157435,157436,157438,157440,157442,157445,157447,157449,157451,157453],{"class":129,"line":137},[127,157437,30955],{"class":154},[127,157439,681],{"class":147},[127,157441,731],{"class":290},[127,157443,157444],{"class":781},"\"你好，",[127,157446,1570],{"class":154},[127,157448,80339],{"class":147},[127,157450,1620],{"class":154},[127,157452,926],{"class":781},[127,157454,687],{"class":147},[19,157456,157457],{},"输入整数：",[117,157459,157461],{"className":30918,"code":157460,"language":30920,"meta":122,"style":122},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[124,157462,157463,157481],{"__ignoreMap":122},[127,157464,157465,157467,157469,157471,157473,157475,157477,157479],{"class":129,"line":130},[127,157466,146936],{"class":147},[127,157468,725],{"class":290},[127,157470,2924],{"class":154},[127,157472,681],{"class":147},[127,157474,54356],{"class":154},[127,157476,681],{"class":147},[127,157478,152784],{"class":781},[127,157480,31037],{"class":147},[127,157482,157483,157485,157487,157489,157492,157494,157496,157498,157501,157503],{"class":129,"line":137},[127,157484,30955],{"class":154},[127,157486,681],{"class":147},[127,157488,731],{"class":290},[127,157490,157491],{"class":781},"\"明年你",[127,157493,1570],{"class":154},[127,157495,146936],{"class":147},[127,157497,1156],{"class":290},[127,157499,157500],{"class":154}," 1}",[127,157502,149794],{"class":781},[127,157504,687],{"class":147},[19,157506,157507],{},"输入小数：",[117,157509,157511],{"className":30918,"code":157510,"language":30920,"meta":122,"style":122},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[124,157512,157513,157532],{"__ignoreMap":122},[127,157514,157515,157517,157519,157521,157523,157525,157527,157530],{"class":129,"line":130},[127,157516,155721],{"class":147},[127,157518,725],{"class":290},[127,157520,110326],{"class":154},[127,157522,681],{"class":147},[127,157524,54356],{"class":154},[127,157526,681],{"class":147},[127,157528,157529],{"class":781},"\"请输入身高:\"",[127,157531,31037],{"class":147},[127,157533,157534,157536,157538,157540,157543,157545,157547,157550,157552,157555],{"class":129,"line":137},[127,157535,30955],{"class":154},[127,157537,681],{"class":147},[127,157539,731],{"class":290},[127,157541,157542],{"class":781},"\"身高:",[127,157544,1570],{"class":154},[127,157546,25522],{"class":147},[127,157548,157549],{"class":290},":.2f",[127,157551,1620],{"class":154},[127,157553,157554],{"class":781},"米\"",[127,157556,687],{"class":147},[14,157558,157560],{"id":157559},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157562,123821],{},[632,157564,157565,157568,157571,157574],{},[635,157566,157567],{},"输入商品单价。",[635,157569,157570],{},"输入购买数量。",[635,157572,157573],{},"输入折扣，例如 0.8 表示八折。",[635,157575,157576],{},"输出最终金额，保留两位小数。",[19,157578,10577],{},[117,157580,157582],{"className":30918,"code":157581,"language":30920,"meta":122,"style":122},"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",[124,157583,157584,157603,157622,157642,157646,157666,157670,157693,157714,157736],{"__ignoreMap":122},[127,157585,157586,157588,157590,157592,157594,157596,157598,157601],{"class":129,"line":130},[127,157587,147071],{"class":147},[127,157589,725],{"class":290},[127,157591,110326],{"class":154},[127,157593,681],{"class":147},[127,157595,54356],{"class":154},[127,157597,681],{"class":147},[127,157599,157600],{"class":781},"\"请输入商品单价:\"",[127,157602,31037],{"class":147},[127,157604,157605,157607,157609,157611,157613,157615,157617,157620],{"class":129,"line":137},[127,157606,147081],{"class":147},[127,157608,725],{"class":290},[127,157610,2924],{"class":154},[127,157612,681],{"class":147},[127,157614,54356],{"class":154},[127,157616,681],{"class":147},[127,157618,157619],{"class":781},"\"请输入购买数量:\"",[127,157621,31037],{"class":147},[127,157623,157624,157627,157629,157631,157633,157635,157637,157640],{"class":129,"line":151},[127,157625,157626],{"class":147},"discount ",[127,157628,725],{"class":290},[127,157630,110326],{"class":154},[127,157632,681],{"class":147},[127,157634,54356],{"class":154},[127,157636,681],{"class":147},[127,157638,157639],{"class":781},"\"请输入折扣:\"",[127,157641,31037],{"class":147},[127,157643,157644],{"class":129,"line":167},[127,157645,2942],{"emptyLinePlaceholder":606},[127,157647,157648,157651,157653,157656,157658,157661,157663],{"class":129,"line":415},[127,157649,157650],{"class":147},"total ",[127,157652,725],{"class":290},[127,157654,157655],{"class":147}," price ",[127,157657,1130],{"class":290},[127,157659,157660],{"class":147}," count ",[127,157662,1130],{"class":290},[127,157664,157665],{"class":147}," discount\n",[127,157667,157668],{"class":129,"line":421},[127,157669,2942],{"emptyLinePlaceholder":606},[127,157671,157672,157674,157676,157678,157681,157683,157685,157687,157689,157691],{"class":129,"line":1766},[127,157673,30955],{"class":154},[127,157675,681],{"class":147},[127,157677,731],{"class":290},[127,157679,157680],{"class":781},"\"商品单价:",[127,157682,1570],{"class":154},[127,157684,80344],{"class":147},[127,157686,157549],{"class":290},[127,157688,1620],{"class":154},[127,157690,926],{"class":781},[127,157692,687],{"class":147},[127,157694,157695,157697,157699,157701,157704,157706,157708,157710,157712],{"class":129,"line":1856},[127,157696,30955],{"class":154},[127,157698,681],{"class":147},[127,157700,731],{"class":290},[127,157702,157703],{"class":781},"\"购买数量:",[127,157705,1570],{"class":154},[127,157707,84963],{"class":147},[127,157709,1620],{"class":154},[127,157711,926],{"class":781},[127,157713,687],{"class":147},[127,157715,157716,157718,157720,157722,157725,157727,157730,157732,157734],{"class":129,"line":1862},[127,157717,30955],{"class":154},[127,157719,681],{"class":147},[127,157721,731],{"class":290},[127,157723,157724],{"class":781},"\"折扣:",[127,157726,1570],{"class":154},[127,157728,157729],{"class":147},"discount",[127,157731,1620],{"class":154},[127,157733,926],{"class":781},[127,157735,687],{"class":147},[127,157737,157738,157740,157742,157744,157747,157749,157752,157754,157756,157758],{"class":129,"line":1874},[127,157739,30955],{"class":154},[127,157741,681],{"class":147},[127,157743,731],{"class":290},[127,157745,157746],{"class":781},"\"应付金额:",[127,157748,1570],{"class":154},[127,157750,157751],{"class":147},"total",[127,157753,157549],{"class":290},[127,157755,1620],{"class":154},[127,157757,157402],{"class":781},[127,157759,687],{"class":147},[14,157761,157763],{"id":157762},"_213-易错点","2.13 易错点",[632,157765,157766,157771,157777,157785,157788],{},[635,157767,157768,157770],{},[124,157769,157413],{}," 的结果是字符串，做运算前要转换。",[635,157772,157773,157774,28925],{},"字符串拼接时，数字要先 ",[124,157775,157776],{},"str()",[635,157778,157779,157781,157782,157784],{},[124,157780,725],{}," 是赋值，",[124,157783,3491],{}," 是比较。",[635,157786,157787],{},"Python 没有自增自减运算符。",[635,157789,157790],{},"浮点数计算可能有精度误差：",[117,157792,157794],{"className":30918,"code":157793,"language":30920,"meta":122,"style":122},"print(0.1 + 0.2)\n",[124,157795,157796],{"__ignoreMap":122},[127,157797,157798,157800,157802,157804,157806,157809],{"class":129,"line":130},[127,157799,30955],{"class":154},[127,157801,681],{"class":147},[127,157803,86739],{"class":154},[127,157805,46106],{"class":290},[127,157807,157808],{"class":154}," 0.2",[127,157810,687],{"class":147},[19,157812,157813,157814,157817],{},"金额计算如果要求严格，可以后续学习 ",[124,157815,157816],{},"decimal"," 模块。",[14,157819,157821],{"id":157820},"_214-本章练习","2.14 本章练习",[632,157823,157824,157827,157830,157833,157836],{},[635,157825,157826],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[635,157828,157829],{},"输入圆的半径，计算面积，保留两位小数。",[635,157831,157832],{},"输入工资和奖金，计算总收入。",[635,157834,157835],{},"输入摄氏温度，转换为华氏温度。",[635,157837,157838],{},"写一个 BMI 计算程序：",[117,157840,157843],{"className":157841,"code":157842,"language":5729,"meta":122},[5727],"BMI = 体重kg \u002F 身高m ** 2\n",[124,157844,157842],{"__ignoreMap":122},[575,157846,157847],{},"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":122,"searchDepth":137,"depth":137,"links":157849},[157850,157851,157852,157853,157854,157855,157856,157862,157863,157864,157869,157870,157871,157872],{"id":155411,"depth":137,"text":155412},{"id":155520,"depth":137,"text":155521},{"id":155691,"depth":137,"text":155692},{"id":155768,"depth":137,"text":155769},{"id":51271,"depth":137,"text":51272},{"id":156074,"depth":137,"text":156075},{"id":156300,"depth":137,"text":156301,"children":157857},[157858,157859,157860,157861],{"id":156304,"depth":151,"text":156305},{"id":156498,"depth":151,"text":156499},{"id":156586,"depth":151,"text":156587},{"id":156692,"depth":151,"text":156693},{"id":156801,"depth":137,"text":156802},{"id":156959,"depth":137,"text":156960},{"id":157024,"depth":137,"text":157025,"children":157865},[157866,157867,157868],{"id":157028,"depth":151,"text":157029},{"id":157173,"depth":151,"text":157174},{"id":157276,"depth":151,"text":157277},{"id":157407,"depth":137,"text":157408},{"id":157559,"depth":137,"text":157560},{"id":157762,"depth":137,"text":157763},{"id":157820,"depth":137,"text":157821},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155403,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157879,"title":157880,"body":157881,"description":603,"extension":604,"meta":159517,"navigation":606,"path":159518,"seo":159519,"stem":159520,"__hash__":159521},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157882,"toc":159498},[157883,157886,157890,157893,157908,157911,157939,157943,157993,157995,158011,158014,158040,158043,158047,158114,158117,158133,158137,158140,158258,158261,158268,158317,158323,158327,158330,158443,158446,158450,158454,158457,158507,158511,158514,158564,158568,158571,158609,158613,158616,158662,158665,158700,158704,158709,158712,158758,158760,158827,158831,158837,158948,158957,158961,158963,158974,158976,159142,159146,159148,159162,159164,159378,159382,159401,159418,159421,159467,159471,159495],[10,157884,157880],{"id":157885},"_3-判断语句",[14,157887,157889],{"id":157888},"_31-布尔值","3.1 布尔值",[19,157891,157892],{},"判断语句依赖布尔值：",[117,157894,157896],{"className":30918,"code":157895,"language":30920,"meta":122,"style":122},"True\nFalse\n",[124,157897,157898,157903],{"__ignoreMap":122},[127,157899,157900],{"class":129,"line":130},[127,157901,157902],{"class":154},"True\n",[127,157904,157905],{"class":129,"line":137},[127,157906,157907],{"class":154},"False\n",[19,157909,157910],{},"比较表达式会产生布尔值：",[117,157912,157914],{"className":30918,"code":157913,"language":30920,"meta":122,"style":122},"age = 18\nprint(age >= 18)  # True\n",[124,157915,157916,157924],{"__ignoreMap":122},[127,157917,157918,157920,157922],{"class":129,"line":130},[127,157919,146936],{"class":147},[127,157921,725],{"class":290},[127,157923,146941],{"class":154},[127,157925,157926,157928,157930,157932,157934,157936],{"class":129,"line":137},[127,157927,30955],{"class":154},[127,157929,156158],{"class":147},[127,157931,2253],{"class":290},[127,157933,156675],{"class":154},[127,157935,46348],{"class":147},[127,157937,157938],{"class":133},"# True\n",[14,157940,157942],{"id":157941},"_32-if基础语法","3.2 if基础语法",[117,157944,157946],{"className":30918,"code":157945,"language":30920,"meta":122,"style":122},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[124,157947,157948,157966,157970,157982],{"__ignoreMap":122},[127,157949,157950,157952,157954,157956,157958,157960,157962,157964],{"class":129,"line":130},[127,157951,146936],{"class":147},[127,157953,725],{"class":290},[127,157955,2924],{"class":154},[127,157957,681],{"class":147},[127,157959,54356],{"class":154},[127,157961,681],{"class":147},[127,157963,152784],{"class":781},[127,157965,31037],{"class":147},[127,157967,157968],{"class":129,"line":137},[127,157969,2942],{"emptyLinePlaceholder":606},[127,157971,157972,157974,157976,157978,157980],{"class":129,"line":151},[127,157973,2075],{"class":290},[127,157975,16248],{"class":147},[127,157977,2253],{"class":290},[127,157979,156675],{"class":154},[127,157981,4281],{"class":147},[127,157983,157984,157986,157988,157991],{"class":129,"line":167},[127,157985,31839],{"class":154},[127,157987,681],{"class":147},[127,157989,157990],{"class":781},"\"可以进入网吧\"",[127,157992,687],{"class":147},[19,157994,9567],{},[632,157996,157997,158002,158005,158008],{},[635,157998,157999,158001],{},[124,158000,2075],{}," 后面是条件表达式。",[635,158003,158004],{},"条件后面必须写冒号。",[635,158006,158007],{},"条件成立时执行缩进代码块。",[635,158009,158010],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158012,158013],{},"错误示例：",[117,158015,158017],{"className":30918,"code":158016,"language":30920,"meta":122,"style":122},"if age >= 18\n    print(\"可以进入\")\n",[124,158018,158019,158029],{"__ignoreMap":122},[127,158020,158021,158023,158025,158027],{"class":129,"line":130},[127,158022,2075],{"class":290},[127,158024,16248],{"class":147},[127,158026,2253],{"class":290},[127,158028,146941],{"class":154},[127,158030,158031,158033,158035,158038],{"class":129,"line":137},[127,158032,31839],{"class":154},[127,158034,681],{"class":147},[127,158036,158037],{"class":781},"\"可以进入\"",[127,158039,687],{"class":147},[19,158041,158042],{},"缺少冒号。",[14,158044,158046],{"id":158045},"_33-if-else","3.3 if else",[117,158048,158050],{"className":30918,"code":158049,"language":30920,"meta":122,"style":122},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[124,158051,158052,158070,158074,158086,158097,158103],{"__ignoreMap":122},[127,158053,158054,158056,158058,158060,158062,158064,158066,158068],{"class":129,"line":130},[127,158055,146936],{"class":147},[127,158057,725],{"class":290},[127,158059,2924],{"class":154},[127,158061,681],{"class":147},[127,158063,54356],{"class":154},[127,158065,681],{"class":147},[127,158067,152784],{"class":781},[127,158069,31037],{"class":147},[127,158071,158072],{"class":129,"line":137},[127,158073,2942],{"emptyLinePlaceholder":606},[127,158075,158076,158078,158080,158082,158084],{"class":129,"line":151},[127,158077,2075],{"class":290},[127,158079,16248],{"class":147},[127,158081,2253],{"class":290},[127,158083,156675],{"class":154},[127,158085,4281],{"class":147},[127,158087,158088,158090,158092,158095],{"class":129,"line":167},[127,158089,31839],{"class":154},[127,158091,681],{"class":147},[127,158093,158094],{"class":781},"\"成年人\"",[127,158096,687],{"class":147},[127,158098,158099,158101],{"class":129,"line":415},[127,158100,2244],{"class":290},[127,158102,4281],{"class":147},[127,158104,158105,158107,158109,158112],{"class":129,"line":421},[127,158106,31839],{"class":154},[127,158108,681],{"class":147},[127,158110,158111],{"class":781},"\"未成年人\"",[127,158113,687],{"class":147},[19,158115,158116],{},"执行逻辑：",[632,158118,158119,158125,158130],{},[635,158120,158121,158122,158124],{},"条件成立，执行 ",[124,158123,2075],{}," 代码块。",[635,158126,158127,158128,158124],{},"条件不成立，执行 ",[124,158129,2244],{},[635,158131,158132],{},"两个代码块只会执行其中一个。",[14,158134,158136],{"id":158135},"_34-if-elif-else","3.4 if elif else",[19,158138,158139],{},"多条件判断：",[117,158141,158143],{"className":30918,"code":158142,"language":30920,"meta":122,"style":122},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[124,158144,158145,158163,158167,158181,158192,158206,158217,158230,158241,158247],{"__ignoreMap":122},[127,158146,158147,158149,158151,158153,158155,158157,158159,158161],{"class":129,"line":130},[127,158148,155748],{"class":147},[127,158150,725],{"class":290},[127,158152,2924],{"class":154},[127,158154,681],{"class":147},[127,158156,54356],{"class":154},[127,158158,681],{"class":147},[127,158160,152799],{"class":781},[127,158162,31037],{"class":147},[127,158164,158165],{"class":129,"line":137},[127,158166,2942],{"emptyLinePlaceholder":606},[127,158168,158169,158171,158174,158176,158179],{"class":129,"line":151},[127,158170,2075],{"class":290},[127,158172,158173],{"class":147}," score ",[127,158175,2253],{"class":290},[127,158177,158178],{"class":154}," 90",[127,158180,4281],{"class":147},[127,158182,158183,158185,158187,158190],{"class":129,"line":167},[127,158184,31839],{"class":154},[127,158186,681],{"class":147},[127,158188,158189],{"class":781},"\"优秀\"",[127,158191,687],{"class":147},[127,158193,158194,158197,158199,158201,158204],{"class":129,"line":415},[127,158195,158196],{"class":290},"elif",[127,158198,158173],{"class":147},[127,158200,2253],{"class":290},[127,158202,158203],{"class":154}," 80",[127,158205,4281],{"class":147},[127,158207,158208,158210,158212,158215],{"class":129,"line":421},[127,158209,31839],{"class":154},[127,158211,681],{"class":147},[127,158213,158214],{"class":781},"\"良好\"",[127,158216,687],{"class":147},[127,158218,158219,158221,158223,158225,158228],{"class":129,"line":1766},[127,158220,158196],{"class":290},[127,158222,158173],{"class":147},[127,158224,2253],{"class":290},[127,158226,158227],{"class":154}," 60",[127,158229,4281],{"class":147},[127,158231,158232,158234,158236,158239],{"class":129,"line":1856},[127,158233,31839],{"class":154},[127,158235,681],{"class":147},[127,158237,158238],{"class":781},"\"及格\"",[127,158240,687],{"class":147},[127,158242,158243,158245],{"class":129,"line":1862},[127,158244,2244],{"class":290},[127,158246,4281],{"class":147},[127,158248,158249,158251,158253,158256],{"class":129,"line":1874},[127,158250,31839],{"class":154},[127,158252,681],{"class":147},[127,158254,158255],{"class":781},"\"不及格\"",[127,158257,687],{"class":147},[19,158259,158260],{},"注意判断顺序很重要。",[19,158262,158263,158264,158267],{},"如果把 ",[124,158265,158266],{},"score >= 60"," 放在最前面：",[117,158269,158271],{"className":30918,"code":158270,"language":30920,"meta":122,"style":122},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[124,158272,158273,158285,158295,158307],{"__ignoreMap":122},[127,158274,158275,158277,158279,158281,158283],{"class":129,"line":130},[127,158276,2075],{"class":290},[127,158278,158173],{"class":147},[127,158280,2253],{"class":290},[127,158282,158227],{"class":154},[127,158284,4281],{"class":147},[127,158286,158287,158289,158291,158293],{"class":129,"line":137},[127,158288,31839],{"class":154},[127,158290,681],{"class":147},[127,158292,158238],{"class":781},[127,158294,687],{"class":147},[127,158296,158297,158299,158301,158303,158305],{"class":129,"line":151},[127,158298,158196],{"class":290},[127,158300,158173],{"class":147},[127,158302,2253],{"class":290},[127,158304,158178],{"class":154},[127,158306,4281],{"class":147},[127,158308,158309,158311,158313,158315],{"class":129,"line":167},[127,158310,31839],{"class":154},[127,158312,681],{"class":147},[127,158314,158189],{"class":781},[127,158316,687],{"class":147},[19,158318,158319,158320,158322],{},"成绩 95 会先满足 ",[124,158321,158266],{},"，后面的优秀分支就不会执行。",[14,158324,158326],{"id":158325},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158328,158329],{},"嵌套判断就是在一个判断内部再写判断。",[117,158331,158333],{"className":30918,"code":158332,"language":30920,"meta":122,"style":122},"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",[124,158334,158335,158353,158368,158372,158384,158398,158408,158415,158426,158432],{"__ignoreMap":122},[127,158336,158337,158339,158341,158343,158345,158347,158349,158351],{"class":129,"line":130},[127,158338,146936],{"class":147},[127,158340,725],{"class":290},[127,158342,2924],{"class":154},[127,158344,681],{"class":147},[127,158346,54356],{"class":154},[127,158348,681],{"class":147},[127,158350,152784],{"class":781},[127,158352,31037],{"class":147},[127,158354,158355,158357,158359,158361,158363,158366],{"class":129,"line":137},[127,158356,156751],{"class":147},[127,158358,725],{"class":290},[127,158360,61138],{"class":154},[127,158362,681],{"class":147},[127,158364,158365],{"class":781},"\"是否有票(y\u002Fn):\"",[127,158367,687],{"class":147},[127,158369,158370],{"class":129,"line":151},[127,158371,2942],{"emptyLinePlaceholder":606},[127,158373,158374,158376,158378,158380,158382],{"class":129,"line":167},[127,158375,2075],{"class":290},[127,158377,16248],{"class":147},[127,158379,2253],{"class":290},[127,158381,156675],{"class":154},[127,158383,4281],{"class":147},[127,158385,158386,158388,158391,158393,158396],{"class":129,"line":415},[127,158387,3643],{"class":290},[127,158389,158390],{"class":147}," has_ticket ",[127,158392,3491],{"class":290},[127,158394,158395],{"class":781}," \"y\"",[127,158397,4281],{"class":147},[127,158399,158400,158402,158404,158406],{"class":129,"line":421},[127,158401,32991],{"class":154},[127,158403,681],{"class":147},[127,158405,158037],{"class":781},[127,158407,687],{"class":147},[127,158409,158410,158413],{"class":129,"line":1766},[127,158411,158412],{"class":290},"    else",[127,158414,4281],{"class":147},[127,158416,158417,158419,158421,158424],{"class":129,"line":1856},[127,158418,32991],{"class":154},[127,158420,681],{"class":147},[127,158422,158423],{"class":781},"\"请先买票\"",[127,158425,687],{"class":147},[127,158427,158428,158430],{"class":129,"line":1862},[127,158429,2244],{"class":290},[127,158431,4281],{"class":147},[127,158433,158434,158436,158438,158441],{"class":129,"line":1874},[127,158435,31839],{"class":154},[127,158437,681],{"class":147},[127,158439,158440],{"class":781},"\"未成年人禁止进入\"",[127,158442,687],{"class":147},[19,158444,158445],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158447,158449],{"id":158448},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[62,158451,158453],{"id":158452},"_361-and","3.6.1 and",[19,158455,158456],{},"两个条件都成立才成立。",[117,158458,158460],{"className":30918,"code":158459,"language":30920,"meta":122,"style":122},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[124,158461,158462,158470,158478,158482,158497],{"__ignoreMap":122},[127,158463,158464,158466,158468],{"class":129,"line":130},[127,158465,146936],{"class":147},[127,158467,725],{"class":290},[127,158469,88594],{"class":154},[127,158471,158472,158474,158476],{"class":129,"line":137},[127,158473,156751],{"class":147},[127,158475,725],{"class":290},[127,158477,153989],{"class":154},[127,158479,158480],{"class":129,"line":151},[127,158481,2942],{"emptyLinePlaceholder":606},[127,158483,158484,158486,158488,158490,158492,158494],{"class":129,"line":167},[127,158485,2075],{"class":290},[127,158487,16248],{"class":147},[127,158489,2253],{"class":290},[127,158491,156675],{"class":154},[127,158493,120958],{"class":290},[127,158495,158496],{"class":147}," has_ticket:\n",[127,158498,158499,158501,158503,158505],{"class":129,"line":415},[127,158500,31839],{"class":154},[127,158502,681],{"class":147},[127,158504,158037],{"class":781},[127,158506,687],{"class":147},[62,158508,158510],{"id":158509},"_362-or","3.6.2 or",[19,158512,158513],{},"只要一个条件成立就成立。",[117,158515,158517],{"className":30918,"code":158516,"language":30920,"meta":122,"style":122},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[124,158518,158519,158528,158537,158541,158553],{"__ignoreMap":122},[127,158520,158521,158524,158526],{"class":129,"line":130},[127,158522,158523],{"class":147},"is_vip ",[127,158525,725],{"class":290},[127,158527,126336],{"class":154},[127,158529,158530,158533,158535],{"class":129,"line":137},[127,158531,158532],{"class":147},"coupon ",[127,158534,725],{"class":290},[127,158536,153989],{"class":154},[127,158538,158539],{"class":129,"line":151},[127,158540,2942],{"emptyLinePlaceholder":606},[127,158542,158543,158545,158548,158550],{"class":129,"line":167},[127,158544,2075],{"class":290},[127,158546,158547],{"class":147}," is_vip ",[127,158549,115619],{"class":290},[127,158551,158552],{"class":147}," coupon:\n",[127,158554,158555,158557,158559,158562],{"class":129,"line":415},[127,158556,31839],{"class":154},[127,158558,681],{"class":147},[127,158560,158561],{"class":781},"\"可以享受优惠\"",[127,158563,687],{"class":147},[62,158565,158567],{"id":158566},"_363-not","3.6.3 not",[19,158569,158570],{},"取反。",[117,158572,158574],{"className":30918,"code":158573,"language":30920,"meta":122,"style":122},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[124,158575,158576,158585,158589,158598],{"__ignoreMap":122},[127,158577,158578,158581,158583],{"class":129,"line":130},[127,158579,158580],{"class":147},"is_closed ",[127,158582,725],{"class":290},[127,158584,126336],{"class":154},[127,158586,158587],{"class":129,"line":137},[127,158588,2942],{"emptyLinePlaceholder":606},[127,158590,158591,158593,158595],{"class":129,"line":151},[127,158592,2075],{"class":290},[127,158594,39470],{"class":290},[127,158596,158597],{"class":147}," is_closed:\n",[127,158599,158600,158602,158604,158607],{"class":129,"line":167},[127,158601,31839],{"class":154},[127,158603,681],{"class":147},[127,158605,158606],{"class":781},"\"店铺营业中\"",[127,158608,687],{"class":147},[14,158610,158612],{"id":158611},"_37-链式比较","3.7 链式比较",[19,158614,158615],{},"Python 支持链式比较：",[117,158617,158619],{"className":30918,"code":158618,"language":30920,"meta":122,"style":122},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[124,158620,158621,158630,158634,158651],{"__ignoreMap":122},[127,158622,158623,158625,158627],{"class":129,"line":130},[127,158624,155748],{"class":147},[127,158626,725],{"class":290},[127,158628,158629],{"class":154}," 85\n",[127,158631,158632],{"class":129,"line":137},[127,158633,2942],{"emptyLinePlaceholder":606},[127,158635,158636,158638,158640,158643,158645,158647,158649],{"class":129,"line":151},[127,158637,2075],{"class":290},[127,158639,4635],{"class":154},[127,158641,158642],{"class":290}," \u003C=",[127,158644,158173],{"class":147},[127,158646,2131],{"class":290},[127,158648,6296],{"class":154},[127,158650,4281],{"class":147},[127,158652,158653,158655,158657,158660],{"class":129,"line":167},[127,158654,31839],{"class":154},[127,158656,681],{"class":147},[127,158658,158659],{"class":781},"\"成绩合法\"",[127,158661,687],{"class":147},[19,158663,158664],{},"等价于：",[117,158666,158668],{"className":30918,"code":158667,"language":30920,"meta":122,"style":122},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[124,158669,158670,158690],{"__ignoreMap":122},[127,158671,158672,158674,158676,158678,158680,158682,158684,158686,158688],{"class":129,"line":130},[127,158673,2075],{"class":290},[127,158675,158173],{"class":147},[127,158677,2253],{"class":290},[127,158679,4635],{"class":154},[127,158681,120958],{"class":290},[127,158683,158173],{"class":147},[127,158685,2131],{"class":290},[127,158687,6296],{"class":154},[127,158689,4281],{"class":147},[127,158691,158692,158694,158696,158698],{"class":129,"line":137},[127,158693,31839],{"class":154},[127,158695,681],{"class":147},[127,158697,158659],{"class":781},[127,158699,687],{"class":147},[14,158701,158703],{"id":158702},"_38-真值和假值","3.8 真值和假值",[19,158705,116996,158706,158708],{},[124,158707,2075],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158710,158711],{},"假值：",[117,158713,158715],{"className":30918,"code":158714,"language":30920,"meta":122,"style":122},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[124,158716,158717,158721,158726,158730,158734,158739,158743,158747,158752],{"__ignoreMap":122},[127,158718,158719],{"class":129,"line":130},[127,158720,157907],{"class":154},[127,158722,158723],{"class":129,"line":137},[127,158724,158725],{"class":154},"None\n",[127,158727,158728],{"class":129,"line":151},[127,158729,3627],{"class":154},[127,158731,158732],{"class":129,"line":167},[127,158733,32882],{"class":154},[127,158735,158736],{"class":129,"line":415},[127,158737,158738],{"class":781},"\"\"\n",[127,158740,158741],{"class":129,"line":421},[127,158742,32897],{"class":147},[127,158744,158745],{"class":129,"line":1766},[127,158746,2518],{"class":147},[127,158748,158749],{"class":129,"line":1856},[127,158750,158751],{"class":147},"{}\n",[127,158753,158754,158756],{"class":129,"line":1862},[127,158755,155680],{"class":154},[127,158757,2518],{"class":147},[19,158759,15677],{},[117,158761,158763],{"className":30918,"code":158762,"language":30920,"meta":122,"style":122},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[124,158764,158765,158779,158783,158790,158810,158816],{"__ignoreMap":122},[127,158766,158767,158769,158771,158773,158775,158777],{"class":129,"line":130},[127,158768,146926],{"class":147},[127,158770,725],{"class":290},[127,158772,61138],{"class":154},[127,158774,681],{"class":147},[127,158776,152769],{"class":781},[127,158778,687],{"class":147},[127,158780,158781],{"class":129,"line":137},[127,158782,2942],{"emptyLinePlaceholder":606},[127,158784,158785,158787],{"class":129,"line":151},[127,158786,2075],{"class":290},[127,158788,158789],{"class":147}," name:\n",[127,158791,158792,158794,158796,158798,158800,158802,158804,158806,158808],{"class":129,"line":167},[127,158793,31839],{"class":154},[127,158795,681],{"class":147},[127,158797,731],{"class":290},[127,158799,157444],{"class":781},[127,158801,1570],{"class":154},[127,158803,80339],{"class":147},[127,158805,1620],{"class":154},[127,158807,926],{"class":781},[127,158809,687],{"class":147},[127,158811,158812,158814],{"class":129,"line":415},[127,158813,2244],{"class":290},[127,158815,4281],{"class":147},[127,158817,158818,158820,158822,158825],{"class":129,"line":421},[127,158819,31839],{"class":154},[127,158821,681],{"class":147},[127,158823,158824],{"class":781},"\"姓名不能为空\"",[127,158826,687],{"class":147},[14,158828,158830],{"id":158829},"_39-match语句","3.9 match语句",[19,158832,158833,158834,158836],{},"Python 3.10 开始支持 ",[124,158835,71794],{},"。它适合处理固定选项。",[117,158838,158840],{"className":30918,"code":158839,"language":30920,"meta":122,"style":122},"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",[124,158841,158842,158858,158862,158869,158879,158890,158899,158910,158919,158930,158937],{"__ignoreMap":122},[127,158843,158844,158847,158849,158851,158853,158856],{"class":129,"line":130},[127,158845,158846],{"class":147},"command ",[127,158848,725],{"class":290},[127,158850,61138],{"class":154},[127,158852,681],{"class":147},[127,158854,158855],{"class":781},"\"请输入命令:\"",[127,158857,687],{"class":147},[127,158859,158860],{"class":129,"line":137},[127,158861,2942],{"emptyLinePlaceholder":606},[127,158863,158864,158866],{"class":129,"line":151},[127,158865,71794],{"class":290},[127,158867,158868],{"class":147}," command:\n",[127,158870,158871,158874,158877],{"class":129,"line":167},[127,158872,158873],{"class":290},"    case",[127,158875,158876],{"class":781}," \"start\"",[127,158878,4281],{"class":147},[127,158880,158881,158883,158885,158888],{"class":129,"line":415},[127,158882,32991],{"class":154},[127,158884,681],{"class":147},[127,158886,158887],{"class":781},"\"启动\"",[127,158889,687],{"class":147},[127,158891,158892,158894,158897],{"class":129,"line":421},[127,158893,158873],{"class":290},[127,158895,158896],{"class":781}," \"stop\"",[127,158898,4281],{"class":147},[127,158900,158901,158903,158905,158908],{"class":129,"line":1766},[127,158902,32991],{"class":154},[127,158904,681],{"class":147},[127,158906,158907],{"class":781},"\"停止\"",[127,158909,687],{"class":147},[127,158911,158912,158914,158917],{"class":129,"line":1856},[127,158913,158873],{"class":290},[127,158915,158916],{"class":781}," \"restart\"",[127,158918,4281],{"class":147},[127,158920,158921,158923,158925,158928],{"class":129,"line":1862},[127,158922,32991],{"class":154},[127,158924,681],{"class":147},[127,158926,158927],{"class":781},"\"重启\"",[127,158929,687],{"class":147},[127,158931,158932,158934],{"class":129,"line":1874},[127,158933,158873],{"class":290},[127,158935,158936],{"class":147}," _:\n",[127,158938,158939,158941,158943,158946],{"class":129,"line":2155},[127,158940,32991],{"class":154},[127,158942,681],{"class":147},[127,158944,158945],{"class":781},"\"未知命令\"",[127,158947,687],{"class":147},[19,158949,158950,158951,158953,158954,158956],{},"入门阶段掌握 ",[124,158952,155048],{}," 更重要，",[124,158955,71794],{}," 可以作为补充。",[14,158958,158960],{"id":158959},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158962,123821],{},[632,158964,158965,158968,158971],{},[635,158966,158967],{},"输入成绩。",[635,158969,158970],{},"判断成绩是否合法。",[635,158972,158973],{},"输出等级。",[19,158975,10577],{},[117,158977,158979],{"className":30918,"code":158978,"language":30920,"meta":122,"style":122},"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",[124,158980,158981,158999,159003,159021,159032,159044,159055,159067,159078,159091,159102,159114,159125,159131],{"__ignoreMap":122},[127,158982,158983,158985,158987,158989,158991,158993,158995,158997],{"class":129,"line":130},[127,158984,155748],{"class":147},[127,158986,725],{"class":290},[127,158988,110326],{"class":154},[127,158990,681],{"class":147},[127,158992,54356],{"class":154},[127,158994,681],{"class":147},[127,158996,152799],{"class":781},[127,158998,31037],{"class":147},[127,159000,159001],{"class":129,"line":137},[127,159002,2942],{"emptyLinePlaceholder":606},[127,159004,159005,159007,159009,159011,159013,159015,159017,159019],{"class":129,"line":151},[127,159006,2075],{"class":290},[127,159008,39470],{"class":290},[127,159010,4635],{"class":154},[127,159012,158642],{"class":290},[127,159014,158173],{"class":147},[127,159016,2131],{"class":290},[127,159018,6296],{"class":154},[127,159020,4281],{"class":147},[127,159022,159023,159025,159027,159030],{"class":129,"line":167},[127,159024,31839],{"class":154},[127,159026,681],{"class":147},[127,159028,159029],{"class":781},"\"成绩不合法\"",[127,159031,687],{"class":147},[127,159033,159034,159036,159038,159040,159042],{"class":129,"line":415},[127,159035,158196],{"class":290},[127,159037,158173],{"class":147},[127,159039,2253],{"class":290},[127,159041,158178],{"class":154},[127,159043,4281],{"class":147},[127,159045,159046,159048,159050,159053],{"class":129,"line":421},[127,159047,31839],{"class":154},[127,159049,681],{"class":147},[127,159051,159052],{"class":781},"\"等级:A\"",[127,159054,687],{"class":147},[127,159056,159057,159059,159061,159063,159065],{"class":129,"line":1766},[127,159058,158196],{"class":290},[127,159060,158173],{"class":147},[127,159062,2253],{"class":290},[127,159064,158203],{"class":154},[127,159066,4281],{"class":147},[127,159068,159069,159071,159073,159076],{"class":129,"line":1856},[127,159070,31839],{"class":154},[127,159072,681],{"class":147},[127,159074,159075],{"class":781},"\"等级:B\"",[127,159077,687],{"class":147},[127,159079,159080,159082,159084,159086,159089],{"class":129,"line":1862},[127,159081,158196],{"class":290},[127,159083,158173],{"class":147},[127,159085,2253],{"class":290},[127,159087,159088],{"class":154}," 70",[127,159090,4281],{"class":147},[127,159092,159093,159095,159097,159100],{"class":129,"line":1874},[127,159094,31839],{"class":154},[127,159096,681],{"class":147},[127,159098,159099],{"class":781},"\"等级:C\"",[127,159101,687],{"class":147},[127,159103,159104,159106,159108,159110,159112],{"class":129,"line":2155},[127,159105,158196],{"class":290},[127,159107,158173],{"class":147},[127,159109,2253],{"class":290},[127,159111,158227],{"class":154},[127,159113,4281],{"class":147},[127,159115,159116,159118,159120,159123],{"class":129,"line":2160},[127,159117,31839],{"class":154},[127,159119,681],{"class":147},[127,159121,159122],{"class":781},"\"等级:D\"",[127,159124,687],{"class":147},[127,159126,159127,159129],{"class":129,"line":2166},[127,159128,2244],{"class":290},[127,159130,4281],{"class":147},[127,159132,159133,159135,159137,159140],{"class":129,"line":2171},[127,159134,31839],{"class":154},[127,159136,681],{"class":147},[127,159138,159139],{"class":781},"\"等级:E\"",[127,159141,687],{"class":147},[14,159143,159145],{"id":159144},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159147,123821],{},[632,159149,159150,159153,159156,159159],{},[635,159151,159152],{},"输入消费金额。",[635,159154,159155],{},"输入会员等级，普通、银卡、金卡。",[635,159157,159158],{},"普通不打折，银卡 9 折，金卡 8 折。",[635,159160,159161],{},"满 500 再减 50。",[19,159163,10577],{},[117,159165,159167],{"className":30918,"code":159166,"language":30920,"meta":122,"style":122},"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",[124,159168,159169,159189,159205,159209,159217,159221,159235,159245,159258,159267,159280,159288,159294,159305,159309,159323,159327,159341,159351,159355],{"__ignoreMap":122},[127,159170,159171,159174,159176,159178,159180,159182,159184,159187],{"class":129,"line":130},[127,159172,159173],{"class":147},"amount ",[127,159175,725],{"class":290},[127,159177,110326],{"class":154},[127,159179,681],{"class":147},[127,159181,54356],{"class":154},[127,159183,681],{"class":147},[127,159185,159186],{"class":781},"\"请输入消费金额:\"",[127,159188,31037],{"class":147},[127,159190,159191,159194,159196,159198,159200,159203],{"class":129,"line":137},[127,159192,159193],{"class":147},"level ",[127,159195,725],{"class":290},[127,159197,61138],{"class":154},[127,159199,681],{"class":147},[127,159201,159202],{"class":781},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[127,159204,687],{"class":147},[127,159206,159207],{"class":129,"line":151},[127,159208,2942],{"emptyLinePlaceholder":606},[127,159210,159211,159213,159215],{"class":129,"line":167},[127,159212,157626],{"class":147},[127,159214,725],{"class":290},[127,159216,56233],{"class":154},[127,159218,159219],{"class":129,"line":415},[127,159220,2942],{"emptyLinePlaceholder":606},[127,159222,159223,159225,159228,159230,159233],{"class":129,"line":421},[127,159224,2075],{"class":290},[127,159226,159227],{"class":147}," level ",[127,159229,3491],{"class":290},[127,159231,159232],{"class":781}," \"银卡\"",[127,159234,4281],{"class":147},[127,159236,159237,159240,159242],{"class":129,"line":1766},[127,159238,159239],{"class":147},"    discount ",[127,159241,725],{"class":290},[127,159243,159244],{"class":154}," 0.9\n",[127,159246,159247,159249,159251,159253,159256],{"class":129,"line":1856},[127,159248,158196],{"class":290},[127,159250,159227],{"class":147},[127,159252,3491],{"class":290},[127,159254,159255],{"class":781}," \"金卡\"",[127,159257,4281],{"class":147},[127,159259,159260,159262,159264],{"class":129,"line":1862},[127,159261,159239],{"class":147},[127,159263,725],{"class":290},[127,159265,159266],{"class":154}," 0.8\n",[127,159268,159269,159271,159273,159275,159278],{"class":129,"line":1874},[127,159270,158196],{"class":290},[127,159272,159227],{"class":147},[127,159274,3491],{"class":290},[127,159276,159277],{"class":781}," \"普通\"",[127,159279,4281],{"class":147},[127,159281,159282,159284,159286],{"class":129,"line":2155},[127,159283,159239],{"class":147},[127,159285,725],{"class":290},[127,159287,56233],{"class":154},[127,159289,159290,159292],{"class":129,"line":2160},[127,159291,2244],{"class":290},[127,159293,4281],{"class":147},[127,159295,159296,159298,159300,159303],{"class":129,"line":2166},[127,159297,31839],{"class":154},[127,159299,681],{"class":147},[127,159301,159302],{"class":781},"\"会员等级输入错误，按普通会员计算\"",[127,159304,687],{"class":147},[127,159306,159307],{"class":129,"line":2171},[127,159308,2942],{"emptyLinePlaceholder":606},[127,159310,159311,159314,159316,159319,159321],{"class":129,"line":2185},[127,159312,159313],{"class":147},"pay ",[127,159315,725],{"class":290},[127,159317,159318],{"class":147}," amount ",[127,159320,1130],{"class":290},[127,159322,157665],{"class":147},[127,159324,159325],{"class":129,"line":2190},[127,159326,2942],{"emptyLinePlaceholder":606},[127,159328,159329,159331,159334,159336,159339],{"class":129,"line":2196},[127,159330,2075],{"class":290},[127,159332,159333],{"class":147}," pay ",[127,159335,2253],{"class":290},[127,159337,159338],{"class":154}," 500",[127,159340,4281],{"class":147},[127,159342,159343,159346,159348],{"class":129,"line":2217},[127,159344,159345],{"class":147},"    pay ",[127,159347,150642],{"class":290},[127,159349,159350],{"class":154}," 50\n",[127,159352,159353],{"class":129,"line":2222},[127,159354,2942],{"emptyLinePlaceholder":606},[127,159356,159357,159359,159361,159363,159365,159367,159370,159372,159374,159376],{"class":129,"line":2236},[127,159358,30955],{"class":154},[127,159360,681],{"class":147},[127,159362,731],{"class":290},[127,159364,157746],{"class":781},[127,159366,1570],{"class":154},[127,159368,159369],{"class":147},"pay",[127,159371,157549],{"class":290},[127,159373,1620],{"class":154},[127,159375,157402],{"class":781},[127,159377,687],{"class":147},[14,159379,159381],{"id":159380},"_312-易错点","3.12 易错点",[632,159383,159384,159387,159390,159393,159398],{},[635,159385,159386],{},"冒号不能漏。",[635,159388,159389],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[635,159391,159392],{},"多分支判断要注意顺序。",[635,159394,159395,159396,28925],{},"判断相等用 ",[124,159397,3491],{},[635,159399,159400],{},"字符串比较区分大小写：",[117,159402,159404],{"className":30918,"code":159403,"language":30920,"meta":122,"style":122},"\"Y\" == \"y\"  # False\n",[124,159405,159406],{"__ignoreMap":122},[127,159407,159408,159411,159413,159415],{"class":129,"line":130},[127,159409,159410],{"class":781},"\"Y\"",[127,159412,102088],{"class":290},[127,159414,158395],{"class":781},[127,159416,159417],{"class":133},"  # False\n",[19,159419,159420],{},"可转换后再判断：",[117,159422,159424],{"className":30918,"code":159423,"language":30920,"meta":122,"style":122},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[124,159425,159426,159443,159456],{"__ignoreMap":122},[127,159427,159428,159431,159433,159435,159437,159440],{"class":129,"line":130},[127,159429,159430],{"class":147},"answer ",[127,159432,725],{"class":290},[127,159434,61138],{"class":154},[127,159436,681],{"class":147},[127,159438,159439],{"class":781},"\"是否继续(y\u002Fn):\"",[127,159441,159442],{"class":147},").lower()\n",[127,159444,159445,159447,159450,159452,159454],{"class":129,"line":137},[127,159446,2075],{"class":290},[127,159448,159449],{"class":147}," answer ",[127,159451,3491],{"class":290},[127,159453,158395],{"class":781},[127,159455,4281],{"class":147},[127,159457,159458,159460,159462,159465],{"class":129,"line":151},[127,159459,31839],{"class":154},[127,159461,681],{"class":147},[127,159463,159464],{"class":781},"\"继续\"",[127,159466,687],{"class":147},[14,159468,159470],{"id":159469},"_313-本章练习","3.13 本章练习",[632,159472,159473,159476,159479,159482,159492],{},[635,159474,159475],{},"输入年龄，判断是否成年。",[635,159477,159478],{},"输入年份，判断是否为闰年。",[635,159480,159481],{},"输入三个数字，输出最大值。",[635,159483,159484,159485,159488,159489,159491],{},"写登录判断：用户名是 ",[124,159486,159487],{},"admin"," 且密码是 ",[124,159490,15626],{}," 才登录成功。",[635,159493,159494],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[575,159496,159497],{},"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":122,"searchDepth":137,"depth":137,"links":159499},[159500,159501,159502,159503,159504,159505,159510,159511,159512,159513,159514,159515,159516],{"id":157888,"depth":137,"text":157889},{"id":157941,"depth":137,"text":157942},{"id":158045,"depth":137,"text":158046},{"id":158135,"depth":137,"text":158136},{"id":158325,"depth":137,"text":158326},{"id":158448,"depth":137,"text":158449,"children":159506},[159507,159508,159509],{"id":158452,"depth":151,"text":158453},{"id":158509,"depth":151,"text":158510},{"id":158566,"depth":151,"text":158567},{"id":158611,"depth":137,"text":158612},{"id":158702,"depth":137,"text":158703},{"id":158829,"depth":137,"text":158830},{"id":158959,"depth":137,"text":158960},{"id":159144,"depth":137,"text":159145},{"id":159380,"depth":137,"text":159381},{"id":159469,"depth":137,"text":159470},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157880,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159523,"title":159524,"body":159525,"description":603,"extension":604,"meta":161294,"navigation":606,"path":161295,"seo":161296,"stem":161297,"__hash__":161298},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159526,"toc":161274},[159527,159530,159534,159540,159543,159560,159564,159566,159583,159585,159630,159632,159649,159653,159656,159722,159725,159743,159747,159908,159917,159921,159925,159930,159977,159979,159985,159989,159994,160041,160043,160049,160053,160058,160094,160097,160144,160148,160154,160212,160217,160248,160253,160257,160312,160315,160387,160390,160449,160453,160456,160531,160534,160538,160644,160647,160673,160677,160689,160758,160761,160853,160857,160859,160870,160872,161002,161006,161208,161216,161220,161250,161254,161271],[10,159528,159524],{"id":159529},"_4-循环语句",[14,159531,159533],{"id":159532},"_41-为什么需要循环","4.1 为什么需要循环",[19,159535,159536,159537,159539],{},"如果要输出 1 到 100，不应该写 100 行 ",[124,159538,146862],{},"，而应该用循环。",[19,159541,159542],{},"循环适合处理重复任务：",[632,159544,159545,159548,159551,159554,159557],{},[635,159546,159547],{},"重复输出。",[635,159549,159550],{},"重复输入。",[635,159552,159553],{},"遍历数据。",[635,159555,159556],{},"持续执行菜单。",[635,159558,159559],{},"批量处理文件或数据。",[14,159561,159563],{"id":159562},"_42-while循环","4.2 while循环",[19,159565,5723],{},[117,159567,159569],{"className":30918,"code":159568,"language":30920,"meta":122,"style":122},"while 条件:\n    循环体\n",[124,159570,159571,159578],{"__ignoreMap":122},[127,159572,159573,159575],{"class":129,"line":130},[127,159574,109192],{"class":290},[127,159576,159577],{"class":147}," 条件:\n",[127,159579,159580],{"class":129,"line":137},[127,159581,159582],{"class":147},"    循环体\n",[19,159584,15677],{},[117,159586,159588],{"className":30918,"code":159587,"language":30920,"meta":122,"style":122},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[124,159589,159590,159598,159602,159614,159621],{"__ignoreMap":122},[127,159591,159592,159594,159596],{"class":129,"line":130},[127,159593,100677],{"class":147},[127,159595,725],{"class":290},[127,159597,56233],{"class":154},[127,159599,159600],{"class":129,"line":137},[127,159601,2942],{"emptyLinePlaceholder":606},[127,159603,159604,159606,159608,159610,159612],{"class":129,"line":151},[127,159605,109192],{"class":290},[127,159607,9980],{"class":147},[127,159609,2131],{"class":290},[127,159611,2690],{"class":154},[127,159613,4281],{"class":147},[127,159615,159616,159618],{"class":129,"line":167},[127,159617,31839],{"class":154},[127,159619,159620],{"class":147},"(i)\n",[127,159622,159623,159626,159628],{"class":129,"line":415},[127,159624,159625],{"class":147},"    i ",[127,159627,10019],{"class":290},[127,159629,56233],{"class":154},[19,159631,81458],{},[632,159633,159634,159640,159643,159646],{},[635,159635,159636,159637,28925],{},"判断条件 ",[124,159638,159639],{},"i \u003C= 5",[635,159641,159642],{},"条件成立，执行循环体。",[635,159644,159645],{},"执行完后回到条件判断。",[635,159647,159648],{},"条件不成立，退出循环。",[14,159650,159652],{"id":159651},"_43-while累加","4.3 while累加",[19,159654,159655],{},"计算 1 到 100 的和：",[117,159657,159659],{"className":30918,"code":159658,"language":30920,"meta":122,"style":122},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[124,159660,159661,159669,159677,159681,159693,159703,159711,159715],{"__ignoreMap":122},[127,159662,159663,159665,159667],{"class":129,"line":130},[127,159664,100677],{"class":147},[127,159666,725],{"class":290},[127,159668,56233],{"class":154},[127,159670,159671,159673,159675],{"class":129,"line":137},[127,159672,157650],{"class":147},[127,159674,725],{"class":290},[127,159676,47873],{"class":154},[127,159678,159679],{"class":129,"line":151},[127,159680,2942],{"emptyLinePlaceholder":606},[127,159682,159683,159685,159687,159689,159691],{"class":129,"line":167},[127,159684,109192],{"class":290},[127,159686,9980],{"class":147},[127,159688,2131],{"class":290},[127,159690,6296],{"class":154},[127,159692,4281],{"class":147},[127,159694,159695,159698,159700],{"class":129,"line":415},[127,159696,159697],{"class":147},"    total ",[127,159699,10019],{"class":290},[127,159701,159702],{"class":147}," i\n",[127,159704,159705,159707,159709],{"class":129,"line":421},[127,159706,159625],{"class":147},[127,159708,10019],{"class":290},[127,159710,56233],{"class":154},[127,159712,159713],{"class":129,"line":1766},[127,159714,2942],{"emptyLinePlaceholder":606},[127,159716,159717,159719],{"class":129,"line":1856},[127,159718,30955],{"class":154},[127,159720,159721],{"class":147},"(total)\n",[19,159723,159724],{},"核心思想：",[632,159726,159727,159732,159737],{},[635,159728,159729,159731],{},[124,159730,1116],{}," 控制循环次数。",[635,159733,159734,159736],{},[124,159735,157751],{}," 保存累加结果。",[635,159738,159739,159740,159742],{},"每轮循环都要更新 ",[124,159741,1116],{},"，否则可能死循环。",[14,159744,159746],{"id":159745},"_44-while猜数字","4.4 while猜数字",[117,159748,159750],{"className":30918,"code":159749,"language":30920,"meta":122,"style":122},"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",[124,159751,159752,159758,159762,159779,159787,159791,159799,159819,159828,159832,159844,159855,159865,159876,159882,159904],{"__ignoreMap":122},[127,159753,159754,159756],{"class":129,"line":130},[127,159755,30932],{"class":290},[127,159757,45868],{"class":147},[127,159759,159760],{"class":129,"line":137},[127,159761,2942],{"emptyLinePlaceholder":606},[127,159763,159764,159766,159768,159771,159773,159775,159777],{"class":129,"line":151},[127,159765,159430],{"class":147},[127,159767,725],{"class":290},[127,159769,159770],{"class":147}," random.randint(",[127,159772,893],{"class":154},[127,159774,12977],{"class":147},[127,159776,986],{"class":154},[127,159778,687],{"class":147},[127,159780,159781,159783,159785],{"class":129,"line":167},[127,159782,147081],{"class":147},[127,159784,725],{"class":290},[127,159786,47873],{"class":154},[127,159788,159789],{"class":129,"line":415},[127,159790,2942],{"emptyLinePlaceholder":606},[127,159792,159793,159795,159797],{"class":129,"line":421},[127,159794,109192],{"class":290},[127,159796,95821],{"class":154},[127,159798,4281],{"class":147},[127,159800,159801,159804,159806,159808,159810,159812,159814,159817],{"class":129,"line":1766},[127,159802,159803],{"class":147},"    guess ",[127,159805,725],{"class":290},[127,159807,2924],{"class":154},[127,159809,681],{"class":147},[127,159811,54356],{"class":154},[127,159813,681],{"class":147},[127,159815,159816],{"class":781},"\"请输入1到100之间的数字:\"",[127,159818,31037],{"class":147},[127,159820,159821,159824,159826],{"class":129,"line":1856},[127,159822,159823],{"class":147},"    count ",[127,159825,10019],{"class":290},[127,159827,56233],{"class":154},[127,159829,159830],{"class":129,"line":1862},[127,159831,2942],{"emptyLinePlaceholder":606},[127,159833,159834,159836,159839,159841],{"class":129,"line":1874},[127,159835,3643],{"class":290},[127,159837,159838],{"class":147}," guess ",[127,159840,1634],{"class":290},[127,159842,159843],{"class":147}," answer:\n",[127,159845,159846,159848,159850,159853],{"class":129,"line":2155},[127,159847,32991],{"class":154},[127,159849,681],{"class":147},[127,159851,159852],{"class":781},"\"猜大了\"",[127,159854,687],{"class":147},[127,159856,159857,159859,159861,159863],{"class":129,"line":2160},[127,159858,39833],{"class":290},[127,159860,159838],{"class":147},[127,159862,1584],{"class":290},[127,159864,159843],{"class":147},[127,159866,159867,159869,159871,159874],{"class":129,"line":2166},[127,159868,32991],{"class":154},[127,159870,681],{"class":147},[127,159872,159873],{"class":781},"\"猜小了\"",[127,159875,687],{"class":147},[127,159877,159878,159880],{"class":129,"line":2171},[127,159879,158412],{"class":290},[127,159881,4281],{"class":147},[127,159883,159884,159886,159888,159890,159893,159895,159897,159899,159902],{"class":129,"line":2185},[127,159885,32991],{"class":154},[127,159887,681],{"class":147},[127,159889,731],{"class":290},[127,159891,159892],{"class":781},"\"猜对了，一共猜了",[127,159894,1570],{"class":154},[127,159896,84963],{"class":147},[127,159898,1620],{"class":154},[127,159900,159901],{"class":781},"次\"",[127,159903,687],{"class":147},[127,159905,159906],{"class":129,"line":2190},[127,159907,32167],{"class":290},[19,159909,159910,159913,159914,159916],{},[124,159911,159912],{},"while True"," 表示无限循环，通常配合 ",[124,159915,2595],{}," 使用。",[14,159918,159920],{"id":159919},"_45-break和continue","4.5 break和continue",[62,159922,159924],{"id":159923},"_451-break","4.5.1 break",[19,159926,159927,159929],{},[124,159928,2595],{}," 直接结束整个循环。",[117,159931,159933],{"className":30918,"code":159932,"language":30920,"meta":122,"style":122},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[124,159934,159935,159955,159967,159971],{"__ignoreMap":122},[127,159936,159937,159939,159941,159943,159945,159947,159949,159951,159953],{"class":129,"line":130},[127,159938,3567],{"class":290},[127,159940,9980],{"class":147},[127,159942,26584],{"class":290},[127,159944,32983],{"class":154},[127,159946,681],{"class":147},[127,159948,893],{"class":154},[127,159950,12977],{"class":147},[127,159952,1019],{"class":154},[127,159954,31326],{"class":147},[127,159956,159957,159959,159961,159963,159965],{"class":129,"line":137},[127,159958,3643],{"class":290},[127,159960,9980],{"class":147},[127,159962,3491],{"class":290},[127,159964,78599],{"class":154},[127,159966,4281],{"class":147},[127,159968,159969],{"class":129,"line":151},[127,159970,32167],{"class":290},[127,159972,159973,159975],{"class":129,"line":167},[127,159974,31839],{"class":154},[127,159976,159620],{"class":147},[19,159978,146847],{},[117,159980,159983],{"className":159981,"code":159982,"language":5729,"meta":122},[5727],"1\n2\n",[124,159984,159982],{"__ignoreMap":122},[62,159986,159988],{"id":159987},"_452-continue","4.5.2 continue",[19,159990,159991,159993],{},[124,159992,155062],{}," 跳过本轮剩余代码，进入下一轮循环。",[117,159995,159997],{"className":30918,"code":159996,"language":30920,"meta":122,"style":122},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[124,159998,159999,160019,160031,160035],{"__ignoreMap":122},[127,160000,160001,160003,160005,160007,160009,160011,160013,160015,160017],{"class":129,"line":130},[127,160002,3567],{"class":290},[127,160004,9980],{"class":147},[127,160006,26584],{"class":290},[127,160008,32983],{"class":154},[127,160010,681],{"class":147},[127,160012,893],{"class":154},[127,160014,12977],{"class":147},[127,160016,1019],{"class":154},[127,160018,31326],{"class":147},[127,160020,160021,160023,160025,160027,160029],{"class":129,"line":137},[127,160022,3643],{"class":290},[127,160024,9980],{"class":147},[127,160026,3491],{"class":290},[127,160028,78599],{"class":154},[127,160030,4281],{"class":147},[127,160032,160033],{"class":129,"line":151},[127,160034,148902],{"class":290},[127,160036,160037,160039],{"class":129,"line":167},[127,160038,31839],{"class":154},[127,160040,159620],{"class":147},[19,160042,146847],{},[117,160044,160047],{"className":160045,"code":160046,"language":5729,"meta":122},[5727],"1\n2\n4\n5\n",[124,160048,160046],{"__ignoreMap":122},[14,160050,160052],{"id":160051},"_46-for循环","4.6 for循环",[19,160054,160055,160057],{},[124,160056,3567],{}," 常用于遍历序列。",[117,160059,160061],{"className":30918,"code":160060,"language":30920,"meta":122,"style":122},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[124,160062,160063,160072,160076,160087],{"__ignoreMap":122},[127,160064,160065,160067,160069],{"class":129,"line":130},[127,160066,146926],{"class":147},[127,160068,725],{"class":290},[127,160070,160071],{"class":781}," \"python\"\n",[127,160073,160074],{"class":129,"line":137},[127,160075,2942],{"emptyLinePlaceholder":606},[127,160077,160078,160080,160083,160085],{"class":129,"line":151},[127,160079,3567],{"class":290},[127,160081,160082],{"class":147}," ch ",[127,160084,26584],{"class":290},[127,160086,158789],{"class":147},[127,160088,160089,160091],{"class":129,"line":167},[127,160090,31839],{"class":154},[127,160092,160093],{"class":147},"(ch)\n",[19,160095,160096],{},"遍历列表：",[117,160098,160100],{"className":30918,"code":160099,"language":30920,"meta":122,"style":122},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[124,160101,160102,160124,160128,160138],{"__ignoreMap":122},[127,160103,160104,160107,160109,160111,160113,160115,160117,160119,160122],{"class":129,"line":130},[127,160105,160106],{"class":147},"students ",[127,160108,725],{"class":290},[127,160110,52761],{"class":147},[127,160112,150278],{"class":781},[127,160114,12977],{"class":147},[127,160116,151326],{"class":781},[127,160118,12977],{"class":147},[127,160120,160121],{"class":781},"\"小刚\"",[127,160123,33786],{"class":147},[127,160125,160126],{"class":129,"line":137},[127,160127,2942],{"emptyLinePlaceholder":606},[127,160129,160130,160132,160134,160136],{"class":129,"line":151},[127,160131,3567],{"class":290},[127,160133,152527],{"class":147},[127,160135,26584],{"class":290},[127,160137,152532],{"class":147},[127,160139,160140,160142],{"class":129,"line":167},[127,160141,31839],{"class":154},[127,160143,150432],{"class":147},[14,160145,160147],{"id":160146},"_47-range函数","4.7 range函数",[19,160149,160150,160153],{},[124,160151,160152],{},"range()"," 用于生成整数序列。",[117,160155,160157],{"className":30918,"code":160156,"language":30920,"meta":122,"style":122},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[124,160158,160159,160173,160191],{"__ignoreMap":122},[127,160160,160161,160163,160165,160167,160170],{"class":129,"line":130},[127,160162,33956],{"class":154},[127,160164,681],{"class":147},[127,160166,994],{"class":154},[127,160168,160169],{"class":147},")          ",[127,160171,160172],{"class":133},"# 0,1,2,3,4\n",[127,160174,160175,160177,160179,160181,160183,160185,160188],{"class":129,"line":137},[127,160176,33956],{"class":154},[127,160178,681],{"class":147},[127,160180,893],{"class":154},[127,160182,12977],{"class":147},[127,160184,994],{"class":154},[127,160186,160187],{"class":147},")       ",[127,160189,160190],{"class":133},"# 1,2,3,4\n",[127,160192,160193,160195,160197,160199,160201,160203,160205,160207,160209],{"class":129,"line":151},[127,160194,33956],{"class":154},[127,160196,681],{"class":147},[127,160198,893],{"class":154},[127,160200,12977],{"class":147},[127,160202,1121],{"class":154},[127,160204,12977],{"class":147},[127,160206,530],{"class":154},[127,160208,156051],{"class":147},[127,160210,160211],{"class":133},"# 1,3,5,7,9\n",[19,160213,160214,160215,25159],{},"配合 ",[124,160216,3567],{},[117,160218,160220],{"className":30918,"code":160219,"language":30920,"meta":122,"style":122},"for i in range(1, 6):\n    print(i)\n",[124,160221,160222,160242],{"__ignoreMap":122},[127,160223,160224,160226,160228,160230,160232,160234,160236,160238,160240],{"class":129,"line":130},[127,160225,3567],{"class":290},[127,160227,9980],{"class":147},[127,160229,26584],{"class":290},[127,160231,32983],{"class":154},[127,160233,681],{"class":147},[127,160235,893],{"class":154},[127,160237,12977],{"class":147},[127,160239,1019],{"class":154},[127,160241,31326],{"class":147},[127,160243,160244,160246],{"class":129,"line":137},[127,160245,31839],{"class":154},[127,160247,159620],{"class":147},[19,160249,9567,160250,160252],{},[124,160251,33956],{}," 的结束值不包含在内。",[14,160254,160256],{"id":160255},"_48-for循环求和","4.8 for循环求和",[117,160258,160260],{"className":30918,"code":160259,"language":30920,"meta":122,"style":122},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[124,160261,160262,160270,160274,160294,160302,160306],{"__ignoreMap":122},[127,160263,160264,160266,160268],{"class":129,"line":130},[127,160265,157650],{"class":147},[127,160267,725],{"class":290},[127,160269,47873],{"class":154},[127,160271,160272],{"class":129,"line":137},[127,160273,2942],{"emptyLinePlaceholder":606},[127,160275,160276,160278,160280,160282,160284,160286,160288,160290,160292],{"class":129,"line":151},[127,160277,3567],{"class":290},[127,160279,9980],{"class":147},[127,160281,26584],{"class":290},[127,160283,32983],{"class":154},[127,160285,681],{"class":147},[127,160287,893],{"class":154},[127,160289,12977],{"class":147},[127,160291,1012],{"class":154},[127,160293,31326],{"class":147},[127,160295,160296,160298,160300],{"class":129,"line":167},[127,160297,159697],{"class":147},[127,160299,10019],{"class":290},[127,160301,159702],{"class":147},[127,160303,160304],{"class":129,"line":415},[127,160305,2942],{"emptyLinePlaceholder":606},[127,160307,160308,160310],{"class":129,"line":421},[127,160309,30955],{"class":154},[127,160311,159721],{"class":147},[19,160313,160314],{},"求偶数和：",[117,160316,160318],{"className":30918,"code":160317,"language":30920,"meta":122,"style":122},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[124,160319,160320,160328,160332,160352,160368,160377,160381],{"__ignoreMap":122},[127,160321,160322,160324,160326],{"class":129,"line":130},[127,160323,157650],{"class":147},[127,160325,725],{"class":290},[127,160327,47873],{"class":154},[127,160329,160330],{"class":129,"line":137},[127,160331,2942],{"emptyLinePlaceholder":606},[127,160333,160334,160336,160338,160340,160342,160344,160346,160348,160350],{"class":129,"line":151},[127,160335,3567],{"class":290},[127,160337,9980],{"class":147},[127,160339,26584],{"class":290},[127,160341,32983],{"class":154},[127,160343,681],{"class":147},[127,160345,893],{"class":154},[127,160347,12977],{"class":147},[127,160349,1012],{"class":154},[127,160351,31326],{"class":147},[127,160353,160354,160356,160358,160360,160362,160364,160366],{"class":129,"line":167},[127,160355,3643],{"class":290},[127,160357,9980],{"class":147},[127,160359,1003],{"class":290},[127,160361,15297],{"class":154},[127,160363,102088],{"class":290},[127,160365,4635],{"class":154},[127,160367,4281],{"class":147},[127,160369,160370,160373,160375],{"class":129,"line":415},[127,160371,160372],{"class":147},"        total ",[127,160374,10019],{"class":290},[127,160376,159702],{"class":147},[127,160378,160379],{"class":129,"line":421},[127,160380,2942],{"emptyLinePlaceholder":606},[127,160382,160383,160385],{"class":129,"line":1766},[127,160384,30955],{"class":154},[127,160386,159721],{"class":147},[19,160388,160389],{},"也可以：",[117,160391,160393],{"className":30918,"code":160392,"language":30920,"meta":122,"style":122},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[124,160394,160395,160403,160407,160431,160439,160443],{"__ignoreMap":122},[127,160396,160397,160399,160401],{"class":129,"line":130},[127,160398,157650],{"class":147},[127,160400,725],{"class":290},[127,160402,47873],{"class":154},[127,160404,160405],{"class":129,"line":137},[127,160406,2942],{"emptyLinePlaceholder":606},[127,160408,160409,160411,160413,160415,160417,160419,160421,160423,160425,160427,160429],{"class":129,"line":151},[127,160410,3567],{"class":290},[127,160412,9980],{"class":147},[127,160414,26584],{"class":290},[127,160416,32983],{"class":154},[127,160418,681],{"class":147},[127,160420,530],{"class":154},[127,160422,12977],{"class":147},[127,160424,1012],{"class":154},[127,160426,12977],{"class":147},[127,160428,530],{"class":154},[127,160430,31326],{"class":147},[127,160432,160433,160435,160437],{"class":129,"line":167},[127,160434,159697],{"class":147},[127,160436,10019],{"class":290},[127,160438,159702],{"class":147},[127,160440,160441],{"class":129,"line":415},[127,160442,2942],{"emptyLinePlaceholder":606},[127,160444,160445,160447],{"class":129,"line":421},[127,160446,30955],{"class":154},[127,160448,159721],{"class":147},[14,160450,160452],{"id":160451},"_49-循环嵌套","4.9 循环嵌套",[19,160454,160455],{},"嵌套循环就是循环里面再写循环。",[117,160457,160459],{"className":30918,"code":160458,"language":30920,"meta":122,"style":122},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[124,160460,160461,160481,160501],{"__ignoreMap":122},[127,160462,160463,160465,160467,160469,160471,160473,160475,160477,160479],{"class":129,"line":130},[127,160464,3567],{"class":290},[127,160466,9980],{"class":147},[127,160468,26584],{"class":290},[127,160470,32983],{"class":154},[127,160472,681],{"class":147},[127,160474,893],{"class":154},[127,160476,12977],{"class":147},[127,160478,968],{"class":154},[127,160480,31326],{"class":147},[127,160482,160483,160485,160487,160489,160491,160493,160495,160497,160499],{"class":129,"line":137},[127,160484,3743],{"class":290},[127,160486,10042],{"class":147},[127,160488,26584],{"class":290},[127,160490,32983],{"class":154},[127,160492,681],{"class":147},[127,160494,893],{"class":154},[127,160496,12977],{"class":147},[127,160498,968],{"class":154},[127,160500,31326],{"class":147},[127,160502,160503,160505,160507,160509,160512,160514,160516,160518,160521,160523,160525,160527,160529],{"class":129,"line":151},[127,160504,32991],{"class":154},[127,160506,681],{"class":147},[127,160508,731],{"class":290},[127,160510,160511],{"class":781},"\"i=",[127,160513,1570],{"class":154},[127,160515,1116],{"class":147},[127,160517,1620],{"class":154},[127,160519,160520],{"class":781},", j=",[127,160522,1570],{"class":154},[127,160524,1142],{"class":147},[127,160526,1620],{"class":154},[127,160528,926],{"class":781},[127,160530,687],{"class":147},[19,160532,160533],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160535,160537],{"id":160536},"_410-九九乘法表","4.10 九九乘法表",[117,160539,160541],{"className":30918,"code":160540,"language":30920,"meta":122,"style":122},"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",[124,160542,160543,160563,160586,160638],{"__ignoreMap":122},[127,160544,160545,160547,160549,160551,160553,160555,160557,160559,160561],{"class":129,"line":130},[127,160546,3567],{"class":290},[127,160548,9980],{"class":147},[127,160550,26584],{"class":290},[127,160552,32983],{"class":154},[127,160554,681],{"class":147},[127,160556,893],{"class":154},[127,160558,12977],{"class":147},[127,160560,1121],{"class":154},[127,160562,31326],{"class":147},[127,160564,160565,160567,160569,160571,160573,160575,160577,160580,160582,160584],{"class":129,"line":137},[127,160566,3743],{"class":290},[127,160568,10042],{"class":147},[127,160570,26584],{"class":290},[127,160572,32983],{"class":154},[127,160574,681],{"class":147},[127,160576,893],{"class":154},[127,160578,160579],{"class":147},", i ",[127,160581,1156],{"class":290},[127,160583,25659],{"class":154},[127,160585,31326],{"class":147},[127,160587,160588,160590,160592,160594,160596,160598,160600,160602,160604,160606,160608,160610,160612,160614,160616,160618,160620,160622,160624,160626,160628,160630,160632,160634,160636],{"class":129,"line":151},[127,160589,32991],{"class":154},[127,160591,681],{"class":147},[127,160593,731],{"class":290},[127,160595,926],{"class":781},[127,160597,1570],{"class":154},[127,160599,1142],{"class":147},[127,160601,1620],{"class":154},[127,160603,1130],{"class":781},[127,160605,1570],{"class":154},[127,160607,1116],{"class":147},[127,160609,1620],{"class":154},[127,160611,725],{"class":781},[127,160613,1570],{"class":154},[127,160615,100677],{"class":147},[127,160617,1130],{"class":290},[127,160619,3952],{"class":147},[127,160621,1620],{"class":154},[127,160623,926],{"class":781},[127,160625,12977],{"class":147},[127,160627,46341],{"class":5758},[127,160629,725],{"class":290},[127,160631,926],{"class":781},[127,160633,1776],{"class":154},[127,160635,926],{"class":781},[127,160637,687],{"class":147},[127,160639,160640,160642],{"class":129,"line":167},[127,160641,31839],{"class":154},[127,160643,2518],{"class":147},[19,160645,160646],{},"关键点：",[632,160648,160649,160655,160661,160667],{},[635,160650,160651,160652,160654],{},"外层 ",[124,160653,1116],{}," 控制行。",[635,160656,160657,160658,160660],{},"内层 ",[124,160659,1142],{}," 控制列。",[635,160662,160663,160664,160666],{},"每行结束后用 ",[124,160665,146862],{}," 换行。",[635,160668,160669,160672],{},[124,160670,160671],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160674,160676],{"id":160675},"_411-循环else","4.11 循环else",[19,160678,160679,160680,160682,160683,160685,160686,160688],{},"Python 的循环可以带 ",[124,160681,2244],{},"。当循环正常结束时执行 ",[124,160684,2244],{},"，如果被 ",[124,160687,2595],{}," 打断，则不执行。",[117,160690,160692],{"className":30918,"code":160691,"language":30920,"meta":122,"style":122},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[124,160693,160694,160714,160726,160737,160741,160747],{"__ignoreMap":122},[127,160695,160696,160698,160700,160702,160704,160706,160708,160710,160712],{"class":129,"line":130},[127,160697,3567],{"class":290},[127,160699,9980],{"class":147},[127,160701,26584],{"class":290},[127,160703,32983],{"class":154},[127,160705,681],{"class":147},[127,160707,893],{"class":154},[127,160709,12977],{"class":147},[127,160711,1019],{"class":154},[127,160713,31326],{"class":147},[127,160715,160716,160718,160720,160722,160724],{"class":129,"line":137},[127,160717,3643],{"class":290},[127,160719,9980],{"class":147},[127,160721,3491],{"class":290},[127,160723,2580],{"class":154},[127,160725,4281],{"class":147},[127,160727,160728,160730,160732,160735],{"class":129,"line":151},[127,160729,32991],{"class":154},[127,160731,681],{"class":147},[127,160733,160734],{"class":781},"\"找到了\"",[127,160736,687],{"class":147},[127,160738,160739],{"class":129,"line":167},[127,160740,32167],{"class":290},[127,160742,160743,160745],{"class":129,"line":415},[127,160744,2244],{"class":290},[127,160746,4281],{"class":147},[127,160748,160749,160751,160753,160756],{"class":129,"line":421},[127,160750,31839],{"class":154},[127,160752,681],{"class":147},[127,160754,160755],{"class":781},"\"没找到\"",[127,160757,687],{"class":147},[19,160759,160760],{},"常用于搜索。",[117,160762,160764],{"className":30918,"code":160763,"language":30920,"meta":122,"style":122},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[124,160765,160766,160787,160796,160800,160812,160823,160833,160837,160843],{"__ignoreMap":122},[127,160767,160768,160771,160773,160775,160777,160779,160781,160783,160785],{"class":129,"line":130},[127,160769,160770],{"class":147},"names ",[127,160772,725],{"class":290},[127,160774,52761],{"class":147},[127,160776,150278],{"class":781},[127,160778,12977],{"class":147},[127,160780,151326],{"class":781},[127,160782,12977],{"class":147},[127,160784,160121],{"class":781},[127,160786,33786],{"class":147},[127,160788,160789,160791,160793],{"class":129,"line":137},[127,160790,112107],{"class":147},[127,160792,725],{"class":290},[127,160794,160795],{"class":781}," \"小李\"\n",[127,160797,160798],{"class":129,"line":151},[127,160799,2942],{"emptyLinePlaceholder":606},[127,160801,160802,160804,160807,160809],{"class":129,"line":167},[127,160803,3567],{"class":290},[127,160805,160806],{"class":147}," name ",[127,160808,26584],{"class":290},[127,160810,160811],{"class":147}," names:\n",[127,160813,160814,160816,160818,160820],{"class":129,"line":415},[127,160815,3643],{"class":290},[127,160817,160806],{"class":147},[127,160819,3491],{"class":290},[127,160821,160822],{"class":147}," target:\n",[127,160824,160825,160827,160829,160831],{"class":129,"line":421},[127,160826,32991],{"class":154},[127,160828,681],{"class":147},[127,160830,160734],{"class":781},[127,160832,687],{"class":147},[127,160834,160835],{"class":129,"line":1766},[127,160836,32167],{"class":290},[127,160838,160839,160841],{"class":129,"line":1856},[127,160840,2244],{"class":290},[127,160842,4281],{"class":147},[127,160844,160845,160847,160849,160851],{"class":129,"line":1862},[127,160846,31839],{"class":154},[127,160848,681],{"class":147},[127,160850,160755],{"class":781},[127,160852,687],{"class":147},[14,160854,160856],{"id":160855},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160858,123821],{},[632,160860,160861,160864,160867],{},[635,160862,160863],{},"用户最多输入 3 次密码。",[635,160865,160866],{},"密码正确则登录成功。",[635,160868,160869],{},"3 次都错误则锁定账号。",[19,160871,10577],{},[117,160873,160875],{"className":30918,"code":160874,"language":30920,"meta":122,"style":122},"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",[124,160876,160877,160887,160891,160907,160923,160927,160939,160950,160954,160960,160985,160991],{"__ignoreMap":122},[127,160878,160879,160882,160884],{"class":129,"line":130},[127,160880,160881],{"class":147},"password ",[127,160883,725],{"class":290},[127,160885,160886],{"class":781}," \"123456\"\n",[127,160888,160889],{"class":129,"line":137},[127,160890,2942],{"emptyLinePlaceholder":606},[127,160892,160893,160895,160897,160899,160901,160903,160905],{"class":129,"line":151},[127,160894,3567],{"class":290},[127,160896,9980],{"class":147},[127,160898,26584],{"class":290},[127,160900,32983],{"class":154},[127,160902,681],{"class":147},[127,160904,749],{"class":154},[127,160906,31326],{"class":147},[127,160908,160909,160912,160914,160916,160918,160921],{"class":129,"line":167},[127,160910,160911],{"class":147},"    user_password ",[127,160913,725],{"class":290},[127,160915,61138],{"class":154},[127,160917,681],{"class":147},[127,160919,160920],{"class":781},"\"请输入密码:\"",[127,160922,687],{"class":147},[127,160924,160925],{"class":129,"line":415},[127,160926,2942],{"emptyLinePlaceholder":606},[127,160928,160929,160931,160934,160936],{"class":129,"line":421},[127,160930,3643],{"class":290},[127,160932,160933],{"class":147}," user_password ",[127,160935,3491],{"class":290},[127,160937,160938],{"class":147}," password:\n",[127,160940,160941,160943,160945,160948],{"class":129,"line":1766},[127,160942,32991],{"class":154},[127,160944,681],{"class":147},[127,160946,160947],{"class":781},"\"登录成功\"",[127,160949,687],{"class":147},[127,160951,160952],{"class":129,"line":1856},[127,160953,32167],{"class":290},[127,160955,160956,160958],{"class":129,"line":1862},[127,160957,158412],{"class":290},[127,160959,4281],{"class":147},[127,160961,160962,160964,160966,160968,160971,160974,160976,160978,160980,160983],{"class":129,"line":1874},[127,160963,32991],{"class":154},[127,160965,681],{"class":147},[127,160967,731],{"class":290},[127,160969,160970],{"class":781},"\"密码错误，还剩",[127,160972,160973],{"class":154},"{2",[127,160975,52806],{"class":290},[127,160977,3574],{"class":147},[127,160979,1620],{"class":154},[127,160981,160982],{"class":781},"次机会\"",[127,160984,687],{"class":147},[127,160986,160987,160989],{"class":129,"line":2155},[127,160988,2244],{"class":290},[127,160990,4281],{"class":147},[127,160992,160993,160995,160997,161000],{"class":129,"line":2160},[127,160994,31839],{"class":154},[127,160996,681],{"class":147},[127,160998,160999],{"class":781},"\"账号已锁定\"",[127,161001,687],{"class":147},[14,161003,161005],{"id":161004},"_413-小案例菜单程序","4.13 小案例：菜单程序",[117,161007,161009],{"className":30918,"code":161008,"language":30920,"meta":122,"style":122},"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",[124,161010,161011,161019,161030,161041,161052,161063,161074,161078,161093,161097,161109,161120,161132,161143,161155,161166,161178,161188,161192,161198],{"__ignoreMap":122},[127,161012,161013,161015,161017],{"class":129,"line":130},[127,161014,109192],{"class":290},[127,161016,95821],{"class":154},[127,161018,4281],{"class":147},[127,161020,161021,161023,161025,161028],{"class":129,"line":137},[127,161022,31839],{"class":154},[127,161024,681],{"class":147},[127,161026,161027],{"class":781},"\"====== 菜单 ======\"",[127,161029,687],{"class":147},[127,161031,161032,161034,161036,161039],{"class":129,"line":151},[127,161033,31839],{"class":154},[127,161035,681],{"class":147},[127,161037,161038],{"class":781},"\"1. 查询余额\"",[127,161040,687],{"class":147},[127,161042,161043,161045,161047,161050],{"class":129,"line":167},[127,161044,31839],{"class":154},[127,161046,681],{"class":147},[127,161048,161049],{"class":781},"\"2. 存款\"",[127,161051,687],{"class":147},[127,161053,161054,161056,161058,161061],{"class":129,"line":415},[127,161055,31839],{"class":154},[127,161057,681],{"class":147},[127,161059,161060],{"class":781},"\"3. 取款\"",[127,161062,687],{"class":147},[127,161064,161065,161067,161069,161072],{"class":129,"line":421},[127,161066,31839],{"class":154},[127,161068,681],{"class":147},[127,161070,161071],{"class":781},"\"0. 退出\"",[127,161073,687],{"class":147},[127,161075,161076],{"class":129,"line":1766},[127,161077,2942],{"emptyLinePlaceholder":606},[127,161079,161080,161083,161085,161087,161089,161091],{"class":129,"line":1856},[127,161081,161082],{"class":147},"    choice ",[127,161084,725],{"class":290},[127,161086,61138],{"class":154},[127,161088,681],{"class":147},[127,161090,153463],{"class":781},[127,161092,687],{"class":147},[127,161094,161095],{"class":129,"line":1862},[127,161096,2942],{"emptyLinePlaceholder":606},[127,161098,161099,161101,161103,161105,161107],{"class":129,"line":1874},[127,161100,3643],{"class":290},[127,161102,153476],{"class":147},[127,161104,3491],{"class":290},[127,161106,153481],{"class":781},[127,161108,4281],{"class":147},[127,161110,161111,161113,161115,161118],{"class":129,"line":2155},[127,161112,32991],{"class":154},[127,161114,681],{"class":147},[127,161116,161117],{"class":781},"\"余额为1000元\"",[127,161119,687],{"class":147},[127,161121,161122,161124,161126,161128,161130],{"class":129,"line":2160},[127,161123,39833],{"class":290},[127,161125,153476],{"class":147},[127,161127,3491],{"class":290},[127,161129,153500],{"class":781},[127,161131,4281],{"class":147},[127,161133,161134,161136,161138,161141],{"class":129,"line":2166},[127,161135,32991],{"class":154},[127,161137,681],{"class":147},[127,161139,161140],{"class":781},"\"存款功能\"",[127,161142,687],{"class":147},[127,161144,161145,161147,161149,161151,161153],{"class":129,"line":2171},[127,161146,39833],{"class":290},[127,161148,153476],{"class":147},[127,161150,3491],{"class":290},[127,161152,153518],{"class":781},[127,161154,4281],{"class":147},[127,161156,161157,161159,161161,161164],{"class":129,"line":2185},[127,161158,32991],{"class":154},[127,161160,681],{"class":147},[127,161162,161163],{"class":781},"\"取款功能\"",[127,161165,687],{"class":147},[127,161167,161168,161170,161172,161174,161176],{"class":129,"line":2190},[127,161169,39833],{"class":290},[127,161171,153476],{"class":147},[127,161173,3491],{"class":290},[127,161175,153572],{"class":781},[127,161177,4281],{"class":147},[127,161179,161180,161182,161184,161186],{"class":129,"line":2196},[127,161181,32991],{"class":154},[127,161183,681],{"class":147},[127,161185,153583],{"class":781},[127,161187,687],{"class":147},[127,161189,161190],{"class":129,"line":2217},[127,161191,32167],{"class":290},[127,161193,161194,161196],{"class":129,"line":2222},[127,161195,158412],{"class":290},[127,161197,4281],{"class":147},[127,161199,161200,161202,161204,161206],{"class":129,"line":2236},[127,161201,32991],{"class":154},[127,161203,681],{"class":147},[127,161205,153604],{"class":781},[127,161207,687],{"class":147},[19,161209,161210,161211,161213,161214,28925],{},"菜单类程序通常使用 ",[124,161212,159912],{},"，用户选择退出时 ",[124,161215,2595],{},[14,161217,161219],{"id":161218},"_414-易错点","4.14 易错点",[632,161221,161222,161227,161233,161241,161247],{},[635,161223,161224,161226],{},[124,161225,109192],{}," 循环必须更新控制变量。",[635,161228,161229,161232],{},[124,161230,161231],{},"range(1, 10)"," 不包含 10。",[635,161234,161235,161237,161238,161240],{},[124,161236,2595],{}," 结束整个循环，",[124,161239,155062],{}," 只跳过本轮。",[635,161242,161243,161244,161246],{},"嵌套循环中，",[124,161245,2595],{}," 只跳出当前所在的一层循环。",[635,161248,161249],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161251,161253],{"id":161252},"_415-本章练习","4.15 本章练习",[632,161255,161256,161259,161262,161265,161268],{},[635,161257,161258],{},"输出 1 到 100。",[635,161260,161261],{},"计算 1 到 100 的偶数和。",[635,161263,161264],{},"输出 100 以内能被 3 和 5 同时整除的数。",[635,161266,161267],{},"编写猜数字游戏，限制最多猜 7 次。",[635,161269,161270],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[575,161272,161273],{},"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":122,"searchDepth":137,"depth":137,"links":161275},[161276,161277,161278,161279,161280,161284,161285,161286,161287,161288,161289,161290,161291,161292,161293],{"id":159532,"depth":137,"text":159533},{"id":159562,"depth":137,"text":159563},{"id":159651,"depth":137,"text":159652},{"id":159745,"depth":137,"text":159746},{"id":159919,"depth":137,"text":159920,"children":161281},[161282,161283],{"id":159923,"depth":151,"text":159924},{"id":159987,"depth":151,"text":159988},{"id":160051,"depth":137,"text":160052},{"id":160146,"depth":137,"text":160147},{"id":160255,"depth":137,"text":160256},{"id":160451,"depth":137,"text":160452},{"id":160536,"depth":137,"text":160537},{"id":160675,"depth":137,"text":160676},{"id":160855,"depth":137,"text":160856},{"id":161004,"depth":137,"text":161005},{"id":161218,"depth":137,"text":161219},{"id":161252,"depth":137,"text":161253},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159524,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161300,"title":161301,"body":161302,"description":603,"extension":604,"meta":163307,"navigation":606,"path":163308,"seo":163309,"stem":163310,"__hash__":163311},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161303,"toc":163287},[161304,161307,161311,161314,161317,161331,161334,161348,161352,161354,161373,161375,161422,161424,161438,161442,161516,161519,161523,161526,161585,161593,161596,161649,161652,161656,161661,161716,161724,161774,161778,161783,161791,161890,161896,161900,161905,161908,161919,161960,161973,161977,161980,162016,162019,162032,162035,162095,162099,162103,162106,162157,162161,162164,162211,162217,162283,162286,162290,162293,162409,162412,162416,162419,162525,162529,162532,162570,162573,162615,162618,162678,162681,162685,163149,163152,163156,163183,163189,163250,163254,163284],[10,161305,161301],{"id":161306},"_5-函数基础",[14,161308,161310],{"id":161309},"_51-为什么需要函数","5.1 为什么需要函数",[19,161312,161313],{},"函数用于封装一段可以重复使用的代码。",[19,161315,161316],{},"不使用函数的问题：",[632,161318,161319,161322,161325,161328],{},[635,161320,161321],{},"重复代码多。",[635,161323,161324],{},"修改逻辑时容易漏改。",[635,161326,161327],{},"主流程不清晰。",[635,161329,161330],{},"程序越写越长，难以维护。",[19,161332,161333],{},"使用函数后的好处：",[632,161335,161336,161339,161342,161345],{},[635,161337,161338],{},"提高复用性。",[635,161340,161341],{},"提高可读性。",[635,161343,161344],{},"便于调试。",[635,161346,161347],{},"便于分工。",[14,161349,161351],{"id":161350},"_52-函数定义","5.2 函数定义",[19,161353,5723],{},[117,161355,161357],{"className":30918,"code":161356,"language":30920,"meta":122,"style":122},"def 函数名():\n    函数体\n",[124,161358,161359,161368],{"__ignoreMap":122},[127,161360,161361,161363,161366],{"class":129,"line":130},[127,161362,32487],{"class":290},[127,161364,161365],{"class":143}," 函数名",[127,161367,32493],{"class":147},[127,161369,161370],{"class":129,"line":137},[127,161371,161372],{"class":147},"    函数体\n",[19,161374,15677],{},[117,161376,161378],{"className":30918,"code":161377,"language":30920,"meta":122,"style":122},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[124,161379,161380,161389,161399,161409,161413,161417],{"__ignoreMap":122},[127,161381,161382,161384,161387],{"class":129,"line":130},[127,161383,32487],{"class":290},[127,161385,161386],{"class":143}," say_hello",[127,161388,32493],{"class":147},[127,161390,161391,161393,161395,161397],{"class":129,"line":137},[127,161392,31839],{"class":154},[127,161394,681],{"class":147},[127,161396,6386],{"class":781},[127,161398,687],{"class":147},[127,161400,161401,161403,161405,161407],{"class":129,"line":151},[127,161402,31839],{"class":154},[127,161404,681],{"class":147},[127,161406,147029],{"class":781},[127,161408,687],{"class":147},[127,161410,161411],{"class":129,"line":167},[127,161412,2942],{"emptyLinePlaceholder":606},[127,161414,161415],{"class":129,"line":415},[127,161416,2942],{"emptyLinePlaceholder":606},[127,161418,161419],{"class":129,"line":421},[127,161420,161421],{"class":147},"say_hello()\n",[19,161423,9567],{},[632,161425,161426,161429,161432,161435],{},[635,161427,161428],{},"函数必须先定义，再调用。",[635,161430,161431],{},"函数名遵循变量命名规则。",[635,161433,161434],{},"函数体需要缩进。",[635,161436,161437],{},"函数不调用就不会执行。",[14,161439,161441],{"id":161440},"_53-函数调用","5.3 函数调用",[117,161443,161445],{"className":30918,"code":161444,"language":30920,"meta":122,"style":122},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[124,161446,161447,161456,161467,161478,161489,161499,161503,161507,161512],{"__ignoreMap":122},[127,161448,161449,161451,161454],{"class":129,"line":130},[127,161450,32487],{"class":290},[127,161452,161453],{"class":143}," print_menu",[127,161455,32493],{"class":147},[127,161457,161458,161460,161462,161465],{"class":129,"line":137},[127,161459,31839],{"class":154},[127,161461,681],{"class":147},[127,161463,161464],{"class":781},"\"1. 查询\"",[127,161466,687],{"class":147},[127,161468,161469,161471,161473,161476],{"class":129,"line":151},[127,161470,31839],{"class":154},[127,161472,681],{"class":147},[127,161474,161475],{"class":781},"\"2. 添加\"",[127,161477,687],{"class":147},[127,161479,161480,161482,161484,161487],{"class":129,"line":167},[127,161481,31839],{"class":154},[127,161483,681],{"class":147},[127,161485,161486],{"class":781},"\"3. 删除\"",[127,161488,687],{"class":147},[127,161490,161491,161493,161495,161497],{"class":129,"line":415},[127,161492,31839],{"class":154},[127,161494,681],{"class":147},[127,161496,161071],{"class":781},[127,161498,687],{"class":147},[127,161500,161501],{"class":129,"line":421},[127,161502,2942],{"emptyLinePlaceholder":606},[127,161504,161505],{"class":129,"line":1766},[127,161506,2942],{"emptyLinePlaceholder":606},[127,161508,161509],{"class":129,"line":1856},[127,161510,161511],{"class":147},"print_menu()\n",[127,161513,161514],{"class":129,"line":1862},[127,161515,161511],{"class":147},[19,161517,161518],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161520,161522],{"id":161521},"_54-参数","5.4 参数",[19,161524,161525],{},"参数用于向函数传递数据。",[117,161527,161529],{"className":30918,"code":161528,"language":30920,"meta":122,"style":122},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[124,161530,161531,161540,161560,161564,161568,161577],{"__ignoreMap":122},[127,161532,161533,161535,161537],{"class":129,"line":130},[127,161534,32487],{"class":290},[127,161536,161386],{"class":143},[127,161538,161539],{"class":147},"(name):\n",[127,161541,161542,161544,161546,161548,161550,161552,161554,161556,161558],{"class":129,"line":137},[127,161543,31839],{"class":154},[127,161545,681],{"class":147},[127,161547,731],{"class":290},[127,161549,157444],{"class":781},[127,161551,1570],{"class":154},[127,161553,80339],{"class":147},[127,161555,1620],{"class":154},[127,161557,926],{"class":781},[127,161559,687],{"class":147},[127,161561,161562],{"class":129,"line":151},[127,161563,2942],{"emptyLinePlaceholder":606},[127,161565,161566],{"class":129,"line":167},[127,161567,2942],{"emptyLinePlaceholder":606},[127,161569,161570,161573,161575],{"class":129,"line":415},[127,161571,161572],{"class":147},"say_hello(",[127,161574,150278],{"class":781},[127,161576,687],{"class":147},[127,161578,161579,161581,161583],{"class":129,"line":421},[127,161580,161572],{"class":147},[127,161582,151326],{"class":781},[127,161584,687],{"class":147},[19,161586,161587,161589,161590,161592],{},[124,161588,80339],{}," 是形参，",[124,161591,150278],{}," 是实参。",[19,161594,161595],{},"多个参数：",[117,161597,161599],{"className":30918,"code":161598,"language":30920,"meta":122,"style":122},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[124,161600,161601,161609,161622,161628,161632,161636],{"__ignoreMap":122},[127,161602,161603,161605,161607],{"class":129,"line":130},[127,161604,32487],{"class":290},[127,161606,5751],{"class":143},[127,161608,151483],{"class":147},[127,161610,161611,161614,161616,161618,161620],{"class":129,"line":137},[127,161612,161613],{"class":147},"    result ",[127,161615,725],{"class":290},[127,161617,11411],{"class":147},[127,161619,1156],{"class":290},[127,161621,151494],{"class":147},[127,161623,161624,161626],{"class":129,"line":151},[127,161625,31839],{"class":154},[127,161627,77114],{"class":147},[127,161629,161630],{"class":129,"line":167},[127,161631,2942],{"emptyLinePlaceholder":606},[127,161633,161634],{"class":129,"line":415},[127,161635,2942],{"emptyLinePlaceholder":606},[127,161637,161638,161641,161643,161645,161647],{"class":129,"line":421},[127,161639,161640],{"class":147},"add(",[127,161642,1121],{"class":154},[127,161644,12977],{"class":147},[127,161646,1374],{"class":154},[127,161648,687],{"class":147},[19,161650,161651],{},"调用时参数数量必须匹配。",[14,161653,161655],{"id":161654},"_55-返回值","5.5 返回值",[19,161657,161658,161660],{},[124,161659,17587],{}," 用于把函数内部的结果返回给调用者。",[117,161662,161664],{"className":30918,"code":161663,"language":30920,"meta":122,"style":122},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[124,161665,161666,161674,161684,161688,161692,161710],{"__ignoreMap":122},[127,161667,161668,161670,161672],{"class":129,"line":130},[127,161669,32487],{"class":290},[127,161671,5751],{"class":143},[127,161673,151483],{"class":147},[127,161675,161676,161678,161680,161682],{"class":129,"line":137},[127,161677,4632],{"class":290},[127,161679,11411],{"class":147},[127,161681,1156],{"class":290},[127,161683,151494],{"class":147},[127,161685,161686],{"class":129,"line":151},[127,161687,2942],{"emptyLinePlaceholder":606},[127,161689,161690],{"class":129,"line":167},[127,161691,2942],{"emptyLinePlaceholder":606},[127,161693,161694,161697,161699,161702,161704,161706,161708],{"class":129,"line":415},[127,161695,161696],{"class":147},"result ",[127,161698,725],{"class":290},[127,161700,161701],{"class":147}," add(",[127,161703,1121],{"class":154},[127,161705,12977],{"class":147},[127,161707,1374],{"class":154},[127,161709,687],{"class":147},[127,161711,161712,161714],{"class":129,"line":421},[127,161713,30955],{"class":154},[127,161715,77114],{"class":147},[19,161717,161718,161719,161721,161722,28925],{},"如果函数没有写 ",[124,161720,17587],{},"，默认返回 ",[124,161723,96215],{},[117,161725,161727],{"className":30918,"code":161726,"language":30920,"meta":122,"style":122},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[124,161728,161729,161737,161747,161751,161755,161764],{"__ignoreMap":122},[127,161730,161731,161733,161735],{"class":129,"line":130},[127,161732,32487],{"class":290},[127,161734,161386],{"class":143},[127,161736,32493],{"class":147},[127,161738,161739,161741,161743,161745],{"class":129,"line":137},[127,161740,31839],{"class":154},[127,161742,681],{"class":147},[127,161744,6386],{"class":781},[127,161746,687],{"class":147},[127,161748,161749],{"class":129,"line":151},[127,161750,2942],{"emptyLinePlaceholder":606},[127,161752,161753],{"class":129,"line":167},[127,161754,2942],{"emptyLinePlaceholder":606},[127,161756,161757,161759,161761],{"class":129,"line":415},[127,161758,161696],{"class":147},[127,161760,725],{"class":290},[127,161762,161763],{"class":147}," say_hello()\n",[127,161765,161766,161768,161771],{"class":129,"line":421},[127,161767,30955],{"class":154},[127,161769,161770],{"class":147},"(result)  ",[127,161772,161773],{"class":133},"# None\n",[14,161775,161777],{"id":161776},"_56-return的作用","5.6 return的作用",[19,161779,161780,161782],{},[124,161781,17587],{}," 有两个作用：",[632,161784,161785,161788],{},[635,161786,161787],{},"返回结果。",[635,161789,161790],{},"结束函数。",[117,161792,161794],{"className":30918,"code":161793,"language":30920,"meta":122,"style":122},"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",[124,161795,161796,161806,161818,161825,161829,161841,161848,161852,161859,161863,161867,161878],{"__ignoreMap":122},[127,161797,161798,161800,161803],{"class":129,"line":130},[127,161799,32487],{"class":290},[127,161801,161802],{"class":143}," check_age",[127,161804,161805],{"class":147},"(age):\n",[127,161807,161808,161810,161812,161814,161816],{"class":129,"line":137},[127,161809,3643],{"class":290},[127,161811,16248],{"class":147},[127,161813,1584],{"class":290},[127,161815,4635],{"class":154},[127,161817,4281],{"class":147},[127,161819,161820,161822],{"class":129,"line":151},[127,161821,15294],{"class":290},[127,161823,161824],{"class":781}," \"年龄不合法\"\n",[127,161826,161827],{"class":129,"line":167},[127,161828,2942],{"emptyLinePlaceholder":606},[127,161830,161831,161833,161835,161837,161839],{"class":129,"line":415},[127,161832,3643],{"class":290},[127,161834,16248],{"class":147},[127,161836,2253],{"class":290},[127,161838,156675],{"class":154},[127,161840,4281],{"class":147},[127,161842,161843,161845],{"class":129,"line":421},[127,161844,15294],{"class":290},[127,161846,161847],{"class":781}," \"成年人\"\n",[127,161849,161850],{"class":129,"line":1766},[127,161851,2942],{"emptyLinePlaceholder":606},[127,161853,161854,161856],{"class":129,"line":1856},[127,161855,4632],{"class":290},[127,161857,161858],{"class":781}," \"未成年人\"\n",[127,161860,161861],{"class":129,"line":1862},[127,161862,2942],{"emptyLinePlaceholder":606},[127,161864,161865],{"class":129,"line":1874},[127,161866,2942],{"emptyLinePlaceholder":606},[127,161868,161869,161871,161874,161876],{"class":129,"line":2155},[127,161870,30955],{"class":154},[127,161872,161873],{"class":147},"(check_age(",[127,161875,1374],{"class":154},[127,161877,31037],{"class":147},[127,161879,161880,161882,161884,161886,161888],{"class":129,"line":2160},[127,161881,30955],{"class":154},[127,161883,161873],{"class":147},[127,161885,1207],{"class":290},[127,161887,893],{"class":154},[127,161889,31037],{"class":147},[19,161891,161892,161893,161895],{},"函数执行到 ",[124,161894,17587],{}," 后，后面的代码不会继续执行。",[14,161897,161899],{"id":161898},"_57-none","5.7 None",[19,161901,161902,161904],{},[124,161903,96215],{}," 表示空值或没有结果。",[19,161906,161907],{},"常见使用场景：",[632,161909,161910,161913,161916],{},[635,161911,161912],{},"函数没有返回值。",[635,161914,161915],{},"变量暂时没有具体值。",[635,161917,161918],{},"表示查询不到结果。",[117,161920,161922],{"className":30918,"code":161921,"language":30920,"meta":122,"style":122},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[124,161923,161924,161932,161936,161949],{"__ignoreMap":122},[127,161925,161926,161928,161930],{"class":129,"line":130},[127,161927,161696],{"class":147},[127,161929,725],{"class":290},[127,161931,152562],{"class":154},[127,161933,161934],{"class":129,"line":137},[127,161935,2942],{"emptyLinePlaceholder":606},[127,161937,161938,161940,161943,161945,161947],{"class":129,"line":151},[127,161939,2075],{"class":290},[127,161941,161942],{"class":147}," result ",[127,161944,39467],{"class":290},[127,161946,39473],{"class":154},[127,161948,4281],{"class":147},[127,161950,161951,161953,161955,161958],{"class":129,"line":167},[127,161952,31839],{"class":154},[127,161954,681],{"class":147},[127,161956,161957],{"class":781},"\"没有数据\"",[127,161959,687],{"class":147},[19,161961,161962,161963,161965,161966,161969,161970,28925],{},"判断 ",[124,161964,96215],{}," 推荐使用 ",[124,161967,161968],{},"is None","，不要写成 ",[124,161971,161972],{},"== None",[14,161974,161976],{"id":161975},"_58-函数文档字符串","5.8 函数文档字符串",[19,161978,161979],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[117,161981,161983],{"className":30918,"code":161982,"language":30920,"meta":122,"style":122},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[124,161984,161985,161995,162000],{"__ignoreMap":122},[127,161986,161987,161989,161992],{"class":129,"line":130},[127,161988,32487],{"class":290},[127,161990,161991],{"class":143}," calculate_bmi",[127,161993,161994],{"class":147},"(weight, height):\n",[127,161996,161997],{"class":129,"line":137},[127,161998,161999],{"class":781},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[127,162001,162002,162004,162007,162009,162012,162014],{"class":129,"line":151},[127,162003,4632],{"class":290},[127,162005,162006],{"class":147}," weight ",[127,162008,1259],{"class":290},[127,162010,162011],{"class":147}," height ",[127,162013,11203],{"class":290},[127,162015,48263],{"class":154},[19,162017,162018],{},"查看说明：",[117,162020,162022],{"className":30918,"code":162021,"language":30920,"meta":122,"style":122},"help(calculate_bmi)\n",[124,162023,162024],{"__ignoreMap":122},[127,162025,162026,162029],{"class":129,"line":130},[127,162027,162028],{"class":154},"help",[127,162030,162031],{"class":147},"(calculate_bmi)\n",[19,162033,162034],{},"较完整的写法：",[117,162036,162038],{"className":30918,"code":162037,"language":30920,"meta":122,"style":122},"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",[124,162039,162040,162048,162053,162058,162062,162067,162072,162077,162081],{"__ignoreMap":122},[127,162041,162042,162044,162046],{"class":129,"line":130},[127,162043,32487],{"class":290},[127,162045,161991],{"class":143},[127,162047,161994],{"class":147},[127,162049,162050],{"class":129,"line":137},[127,162051,162052],{"class":781},"    \"\"\"\n",[127,162054,162055],{"class":129,"line":151},[127,162056,162057],{"class":781},"    计算BMI。\n",[127,162059,162060],{"class":129,"line":167},[127,162061,2942],{"emptyLinePlaceholder":606},[127,162063,162064],{"class":129,"line":415},[127,162065,162066],{"class":781},"    :param weight: 体重，单位kg\n",[127,162068,162069],{"class":129,"line":421},[127,162070,162071],{"class":781},"    :param height: 身高，单位m\n",[127,162073,162074],{"class":129,"line":1766},[127,162075,162076],{"class":781},"    :return: BMI数值\n",[127,162078,162079],{"class":129,"line":1856},[127,162080,162052],{"class":781},[127,162082,162083,162085,162087,162089,162091,162093],{"class":129,"line":1862},[127,162084,4632],{"class":290},[127,162086,162006],{"class":147},[127,162088,1259],{"class":290},[127,162090,162011],{"class":147},[127,162092,11203],{"class":290},[127,162094,48263],{"class":154},[14,162096,162098],{"id":162097},"_59-变量作用域","5.9 变量作用域",[62,162100,162102],{"id":162101},"_591-局部变量","5.9.1 局部变量",[19,162104,162105],{},"在函数内部定义的变量，只能在函数内部使用。",[117,162107,162109],{"className":30918,"code":162108,"language":30920,"meta":122,"style":122},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[124,162110,162111,162120,162128,162134,162138,162142,162147],{"__ignoreMap":122},[127,162112,162113,162115,162118],{"class":129,"line":130},[127,162114,32487],{"class":290},[127,162116,162117],{"class":143}," test",[127,162119,32493],{"class":147},[127,162121,162122,162124,162126],{"class":129,"line":137},[127,162123,46133],{"class":147},[127,162125,725],{"class":290},[127,162127,58961],{"class":154},[127,162129,162130,162132],{"class":129,"line":151},[127,162131,31839],{"class":154},[127,162133,694],{"class":147},[127,162135,162136],{"class":129,"line":167},[127,162137,2942],{"emptyLinePlaceholder":606},[127,162139,162140],{"class":129,"line":415},[127,162141,2942],{"emptyLinePlaceholder":606},[127,162143,162144],{"class":129,"line":421},[127,162145,162146],{"class":147},"test()\n",[127,162148,162149,162151,162154],{"class":129,"line":1766},[127,162150,30955],{"class":154},[127,162152,162153],{"class":147},"(num)  ",[127,162155,162156],{"class":133},"# 报错\n",[62,162158,162160],{"id":162159},"_592-全局变量","5.9.2 全局变量",[19,162162,162163],{},"在函数外部定义的变量，可以在函数内部读取。",[117,162165,162167],{"className":30918,"code":162166,"language":30920,"meta":122,"style":122},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[124,162168,162169,162177,162181,162185,162193,162199,162203,162207],{"__ignoreMap":122},[127,162170,162171,162173,162175],{"class":129,"line":130},[127,162172,146926],{"class":147},[127,162174,725],{"class":290},[127,162176,149743],{"class":781},[127,162178,162179],{"class":129,"line":137},[127,162180,2942],{"emptyLinePlaceholder":606},[127,162182,162183],{"class":129,"line":151},[127,162184,2942],{"emptyLinePlaceholder":606},[127,162186,162187,162189,162191],{"class":129,"line":167},[127,162188,32487],{"class":290},[127,162190,161386],{"class":143},[127,162192,32493],{"class":147},[127,162194,162195,162197],{"class":129,"line":415},[127,162196,31839],{"class":154},[127,162198,151050],{"class":147},[127,162200,162201],{"class":129,"line":421},[127,162202,2942],{"emptyLinePlaceholder":606},[127,162204,162205],{"class":129,"line":1766},[127,162206,2942],{"emptyLinePlaceholder":606},[127,162208,162209],{"class":129,"line":1856},[127,162210,161421],{"class":147},[19,162212,162213,162214,28925],{},"如果要在函数内部修改全局变量，需要 ",[124,162215,162216],{},"global",[117,162218,162220],{"className":30918,"code":162219,"language":30920,"meta":122,"style":122},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[124,162221,162222,162230,162234,162238,162247,162255,162263,162267,162271,162276],{"__ignoreMap":122},[127,162223,162224,162226,162228],{"class":129,"line":130},[127,162225,147081],{"class":147},[127,162227,725],{"class":290},[127,162229,47873],{"class":154},[127,162231,162232],{"class":129,"line":137},[127,162233,2942],{"emptyLinePlaceholder":606},[127,162235,162236],{"class":129,"line":151},[127,162237,2942],{"emptyLinePlaceholder":606},[127,162239,162240,162242,162245],{"class":129,"line":167},[127,162241,32487],{"class":290},[127,162243,162244],{"class":143}," add_count",[127,162246,32493],{"class":147},[127,162248,162249,162252],{"class":129,"line":415},[127,162250,162251],{"class":290},"    global",[127,162253,162254],{"class":147}," count\n",[127,162256,162257,162259,162261],{"class":129,"line":421},[127,162258,159823],{"class":147},[127,162260,10019],{"class":290},[127,162262,56233],{"class":154},[127,162264,162265],{"class":129,"line":1766},[127,162266,2942],{"emptyLinePlaceholder":606},[127,162268,162269],{"class":129,"line":1856},[127,162270,2942],{"emptyLinePlaceholder":606},[127,162272,162273],{"class":129,"line":1862},[127,162274,162275],{"class":147},"add_count()\n",[127,162277,162278,162280],{"class":129,"line":1874},[127,162279,30955],{"class":154},[127,162281,162282],{"class":147},"(count)\n",[19,162284,162285],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162287,162289],{"id":162288},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162291,162292],{},"一个函数中可以调用另一个函数。",[117,162294,162296],{"className":30918,"code":162295,"language":30920,"meta":122,"style":122},"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",[124,162297,162298,162307,162321,162325,162329,162338,162343,162363,162384,162388,162392,162396],{"__ignoreMap":122},[127,162299,162300,162302,162305],{"class":129,"line":130},[127,162301,32487],{"class":290},[127,162303,162304],{"class":143}," print_line",[127,162306,32493],{"class":147},[127,162308,162309,162311,162313,162315,162317,162319],{"class":129,"line":137},[127,162310,31839],{"class":154},[127,162312,681],{"class":147},[127,162314,33023],{"class":781},[127,162316,7060],{"class":290},[127,162318,79194],{"class":154},[127,162320,687],{"class":147},[127,162322,162323],{"class":129,"line":151},[127,162324,2942],{"emptyLinePlaceholder":606},[127,162326,162327],{"class":129,"line":167},[127,162328,2942],{"emptyLinePlaceholder":606},[127,162330,162331,162333,162336],{"class":129,"line":415},[127,162332,32487],{"class":290},[127,162334,162335],{"class":143}," print_info",[127,162337,149765],{"class":147},[127,162339,162340],{"class":129,"line":421},[127,162341,162342],{"class":147},"    print_line()\n",[127,162344,162345,162347,162349,162351,162353,162355,162357,162359,162361],{"class":129,"line":1766},[127,162346,31839],{"class":154},[127,162348,681],{"class":147},[127,162350,731],{"class":290},[127,162352,157072],{"class":781},[127,162354,1570],{"class":154},[127,162356,80339],{"class":147},[127,162358,1620],{"class":154},[127,162360,926],{"class":781},[127,162362,687],{"class":147},[127,162364,162365,162367,162369,162371,162374,162376,162378,162380,162382],{"class":129,"line":1856},[127,162366,31839],{"class":154},[127,162368,681],{"class":147},[127,162370,731],{"class":290},[127,162372,162373],{"class":781},"\"年龄:",[127,162375,1570],{"class":154},[127,162377,70754],{"class":147},[127,162379,1620],{"class":154},[127,162381,926],{"class":781},[127,162383,687],{"class":147},[127,162385,162386],{"class":129,"line":1862},[127,162387,162342],{"class":147},[127,162389,162390],{"class":129,"line":1874},[127,162391,2942],{"emptyLinePlaceholder":606},[127,162393,162394],{"class":129,"line":2155},[127,162395,2942],{"emptyLinePlaceholder":606},[127,162397,162398,162401,162403,162405,162407],{"class":129,"line":2160},[127,162399,162400],{"class":147},"print_info(",[127,162402,150278],{"class":781},[127,162404,12977],{"class":147},[127,162406,1324],{"class":154},[127,162408,687],{"class":147},[19,162410,162411],{},"这种方式可以把小功能组合成大功能。",[14,162413,162415],{"id":162414},"_511-参数检查","5.11 参数检查",[19,162417,162418],{},"函数内部可以检查参数是否合法。",[117,162420,162422],{"className":30918,"code":162421,"language":30920,"meta":122,"style":122},"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",[124,162423,162424,162433,162445,162451,162461,162465,162469,162486,162490,162502,162513,162519],{"__ignoreMap":122},[127,162425,162426,162428,162431],{"class":129,"line":130},[127,162427,32487],{"class":290},[127,162429,162430],{"class":143}," divide",[127,162432,151483],{"class":147},[127,162434,162435,162437,162439,162441,162443],{"class":129,"line":137},[127,162436,3643],{"class":290},[127,162438,11424],{"class":147},[127,162440,3491],{"class":290},[127,162442,4635],{"class":154},[127,162444,4281],{"class":147},[127,162446,162447,162449],{"class":129,"line":151},[127,162448,15294],{"class":290},[127,162450,152562],{"class":154},[127,162452,162453,162455,162457,162459],{"class":129,"line":167},[127,162454,4632],{"class":290},[127,162456,11411],{"class":147},[127,162458,1259],{"class":290},[127,162460,151494],{"class":147},[127,162462,162463],{"class":129,"line":415},[127,162464,2942],{"emptyLinePlaceholder":606},[127,162466,162467],{"class":129,"line":421},[127,162468,2942],{"emptyLinePlaceholder":606},[127,162470,162471,162473,162475,162478,162480,162482,162484],{"class":129,"line":1766},[127,162472,161696],{"class":147},[127,162474,725],{"class":290},[127,162476,162477],{"class":147}," divide(",[127,162479,1121],{"class":154},[127,162481,12977],{"class":147},[127,162483,867],{"class":154},[127,162485,687],{"class":147},[127,162487,162488],{"class":129,"line":1856},[127,162489,2942],{"emptyLinePlaceholder":606},[127,162491,162492,162494,162496,162498,162500],{"class":129,"line":1862},[127,162493,2075],{"class":290},[127,162495,161942],{"class":147},[127,162497,39467],{"class":290},[127,162499,39473],{"class":154},[127,162501,4281],{"class":147},[127,162503,162504,162506,162508,162511],{"class":129,"line":1874},[127,162505,31839],{"class":154},[127,162507,681],{"class":147},[127,162509,162510],{"class":781},"\"除数不能为0\"",[127,162512,687],{"class":147},[127,162514,162515,162517],{"class":129,"line":2155},[127,162516,2244],{"class":290},[127,162518,4281],{"class":147},[127,162520,162521,162523],{"class":129,"line":2160},[127,162522,31839],{"class":154},[127,162524,77114],{"class":147},[14,162526,162528],{"id":162527},"_512-类型提示","5.12 类型提示",[19,162530,162531],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[117,162533,162535],{"className":30918,"code":162534,"language":30920,"meta":122,"style":122},"def add(a: int, b: int) -> int:\n    return a + b\n",[124,162536,162537,162560],{"__ignoreMap":122},[127,162538,162539,162541,162543,162546,162548,162551,162553,162556,162558],{"class":129,"line":130},[127,162540,32487],{"class":290},[127,162542,5751],{"class":143},[127,162544,162545],{"class":147},"(a: ",[127,162547,684],{"class":154},[127,162549,162550],{"class":147},", b: ",[127,162552,684],{"class":154},[127,162554,162555],{"class":147},") -> ",[127,162557,684],{"class":154},[127,162559,4281],{"class":147},[127,162561,162562,162564,162566,162568],{"class":129,"line":137},[127,162563,4632],{"class":290},[127,162565,11411],{"class":147},[127,162567,1156],{"class":290},[127,162569,151494],{"class":147},[19,162571,162572],{},"字符串参数：",[117,162574,162576],{"className":30918,"code":162575,"language":30920,"meta":122,"style":122},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[124,162577,162578,162595],{"__ignoreMap":122},[127,162579,162580,162582,162584,162587,162589,162591,162593],{"class":129,"line":130},[127,162581,32487],{"class":290},[127,162583,161386],{"class":143},[127,162585,162586],{"class":147},"(name: ",[127,162588,1844],{"class":154},[127,162590,162555],{"class":147},[127,162592,96215],{"class":154},[127,162594,4281],{"class":147},[127,162596,162597,162599,162601,162603,162605,162607,162609,162611,162613],{"class":129,"line":137},[127,162598,31839],{"class":154},[127,162600,681],{"class":147},[127,162602,731],{"class":290},[127,162604,157444],{"class":781},[127,162606,1570],{"class":154},[127,162608,80339],{"class":147},[127,162610,1620],{"class":154},[127,162612,926],{"class":781},[127,162614,687],{"class":147},[19,162616,162617],{},"列表参数：",[117,162619,162621],{"className":30918,"code":162620,"language":30920,"meta":122,"style":122},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[124,162622,162623,162642,162650,162662,162671],{"__ignoreMap":122},[127,162624,162625,162627,162630,162633,162635,162638,162640],{"class":129,"line":130},[127,162626,32487],{"class":290},[127,162628,162629],{"class":143}," get_total",[127,162631,162632],{"class":147},"(numbers: list[",[127,162634,684],{"class":154},[127,162636,162637],{"class":147},"]) -> ",[127,162639,684],{"class":154},[127,162641,4281],{"class":147},[127,162643,162644,162646,162648],{"class":129,"line":137},[127,162645,159697],{"class":147},[127,162647,725],{"class":290},[127,162649,47873],{"class":154},[127,162651,162652,162654,162657,162659],{"class":129,"line":151},[127,162653,3743],{"class":290},[127,162655,162656],{"class":147}," number ",[127,162658,26584],{"class":290},[127,162660,162661],{"class":147}," numbers:\n",[127,162663,162664,162666,162668],{"class":129,"line":167},[127,162665,160372],{"class":147},[127,162667,10019],{"class":290},[127,162669,162670],{"class":147}," number\n",[127,162672,162673,162675],{"class":129,"line":415},[127,162674,4632],{"class":290},[127,162676,162677],{"class":147}," total\n",[19,162679,162680],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162682,162684],{"id":162683},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[117,162686,162688],{"className":30918,"code":162687,"language":30920,"meta":122,"style":122},"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",[124,162689,162690,162700,162704,162708,162716,162727,162737,162747,162757,162767,162771,162775,162784,162806,162810,162814,162823,162829,162849,162861,162872,162876,162885,162896,162901,162905,162909,162918,162924,162943,162955,162965,162969,162980,162990,162994,163002,163013,163017,163021,163025,163033,163038,163052,163056,163068,163073,163085,163090,163102,163107,163119,163129,163133,163139],{"__ignoreMap":122},[127,162691,162692,162695,162697],{"class":129,"line":130},[127,162693,162694],{"class":147},"balance ",[127,162696,725],{"class":290},[127,162698,162699],{"class":154}," 1000\n",[127,162701,162702],{"class":129,"line":137},[127,162703,2942],{"emptyLinePlaceholder":606},[127,162705,162706],{"class":129,"line":151},[127,162707,2942],{"emptyLinePlaceholder":606},[127,162709,162710,162712,162714],{"class":129,"line":167},[127,162711,32487],{"class":290},[127,162713,152423],{"class":143},[127,162715,32493],{"class":147},[127,162717,162718,162720,162722,162725],{"class":129,"line":415},[127,162719,31839],{"class":154},[127,162721,681],{"class":147},[127,162723,162724],{"class":781},"\"====== ATM ======\"",[127,162726,687],{"class":147},[127,162728,162729,162731,162733,162735],{"class":129,"line":421},[127,162730,31839],{"class":154},[127,162732,681],{"class":147},[127,162734,161038],{"class":781},[127,162736,687],{"class":147},[127,162738,162739,162741,162743,162745],{"class":129,"line":1766},[127,162740,31839],{"class":154},[127,162742,681],{"class":147},[127,162744,161049],{"class":781},[127,162746,687],{"class":147},[127,162748,162749,162751,162753,162755],{"class":129,"line":1856},[127,162750,31839],{"class":154},[127,162752,681],{"class":147},[127,162754,161060],{"class":781},[127,162756,687],{"class":147},[127,162758,162759,162761,162763,162765],{"class":129,"line":1862},[127,162760,31839],{"class":154},[127,162762,681],{"class":147},[127,162764,161071],{"class":781},[127,162766,687],{"class":147},[127,162768,162769],{"class":129,"line":1874},[127,162770,2942],{"emptyLinePlaceholder":606},[127,162772,162773],{"class":129,"line":2155},[127,162774,2942],{"emptyLinePlaceholder":606},[127,162776,162777,162779,162782],{"class":129,"line":2160},[127,162778,32487],{"class":290},[127,162780,162781],{"class":143}," show_balance",[127,162783,32493],{"class":147},[127,162785,162786,162788,162790,162792,162795,162797,162800,162802,162804],{"class":129,"line":2166},[127,162787,31839],{"class":154},[127,162789,681],{"class":147},[127,162791,731],{"class":290},[127,162793,162794],{"class":781},"\"当前余额:",[127,162796,1570],{"class":154},[127,162798,162799],{"class":147},"balance",[127,162801,1620],{"class":154},[127,162803,157402],{"class":781},[127,162805,687],{"class":147},[127,162807,162808],{"class":129,"line":2171},[127,162809,2942],{"emptyLinePlaceholder":606},[127,162811,162812],{"class":129,"line":2185},[127,162813,2942],{"emptyLinePlaceholder":606},[127,162815,162816,162818,162821],{"class":129,"line":2190},[127,162817,32487],{"class":290},[127,162819,162820],{"class":143}," save_money",[127,162822,32493],{"class":147},[127,162824,162825,162827],{"class":129,"line":2196},[127,162826,162251],{"class":290},[127,162828,150489],{"class":147},[127,162830,162831,162834,162836,162838,162840,162842,162844,162847],{"class":129,"line":2217},[127,162832,162833],{"class":147},"    money ",[127,162835,725],{"class":290},[127,162837,110326],{"class":154},[127,162839,681],{"class":147},[127,162841,54356],{"class":154},[127,162843,681],{"class":147},[127,162845,162846],{"class":781},"\"请输入存款金额:\"",[127,162848,31037],{"class":147},[127,162850,162851,162853,162855,162857,162859],{"class":129,"line":2222},[127,162852,3643],{"class":290},[127,162854,150532],{"class":147},[127,162856,2131],{"class":290},[127,162858,4635],{"class":154},[127,162860,4281],{"class":147},[127,162862,162863,162865,162867,162870],{"class":129,"line":2236},[127,162864,32991],{"class":154},[127,162866,681],{"class":147},[127,162868,162869],{"class":781},"\"金额必须大于0\"",[127,162871,687],{"class":147},[127,162873,162874],{"class":129,"line":2241},[127,162875,152751],{"class":290},[127,162877,162878,162881,162883],{"class":129,"line":2270},[127,162879,162880],{"class":147},"    balance ",[127,162882,10019],{"class":290},[127,162884,150565],{"class":147},[127,162886,162887,162889,162891,162894],{"class":129,"line":2275},[127,162888,31839],{"class":154},[127,162890,681],{"class":147},[127,162892,162893],{"class":781},"\"存款成功\"",[127,162895,687],{"class":147},[127,162897,162898],{"class":129,"line":2292},[127,162899,162900],{"class":147},"    show_balance()\n",[127,162902,162903],{"class":129,"line":2297},[127,162904,2942],{"emptyLinePlaceholder":606},[127,162906,162907],{"class":129,"line":2302},[127,162908,2942],{"emptyLinePlaceholder":606},[127,162910,162911,162913,162916],{"class":129,"line":2307},[127,162912,32487],{"class":290},[127,162914,162915],{"class":143}," withdraw_money",[127,162917,32493],{"class":147},[127,162919,162920,162922],{"class":129,"line":2321},[127,162921,162251],{"class":290},[127,162923,150489],{"class":147},[127,162925,162926,162928,162930,162932,162934,162936,162938,162941],{"class":129,"line":2326},[127,162927,162833],{"class":147},[127,162929,725],{"class":290},[127,162931,110326],{"class":154},[127,162933,681],{"class":147},[127,162935,54356],{"class":154},[127,162937,681],{"class":147},[127,162939,162940],{"class":781},"\"请输入取款金额:\"",[127,162942,31037],{"class":147},[127,162944,162945,162947,162949,162951,162953],{"class":129,"line":3119},[127,162946,3643],{"class":290},[127,162948,150532],{"class":147},[127,162950,2131],{"class":290},[127,162952,4635],{"class":154},[127,162954,4281],{"class":147},[127,162956,162957,162959,162961,162963],{"class":129,"line":3133},[127,162958,32991],{"class":154},[127,162960,681],{"class":147},[127,162962,162869],{"class":781},[127,162964,687],{"class":147},[127,162966,162967],{"class":129,"line":3141},[127,162968,152751],{"class":290},[127,162970,162971,162973,162975,162977],{"class":129,"line":3146},[127,162972,3643],{"class":290},[127,162974,150532],{"class":147},[127,162976,1634],{"class":290},[127,162978,162979],{"class":147}," balance:\n",[127,162981,162982,162984,162986,162988],{"class":129,"line":3152},[127,162983,32991],{"class":154},[127,162985,681],{"class":147},[127,162987,150627],{"class":781},[127,162989,687],{"class":147},[127,162991,162992],{"class":129,"line":3158},[127,162993,152751],{"class":290},[127,162995,162996,162998,163000],{"class":129,"line":3163},[127,162997,162880],{"class":147},[127,162999,150642],{"class":290},[127,163001,150565],{"class":147},[127,163003,163004,163006,163008,163011],{"class":129,"line":8490},[127,163005,31839],{"class":154},[127,163007,681],{"class":147},[127,163009,163010],{"class":781},"\"取款成功\"",[127,163012,687],{"class":147},[127,163014,163015],{"class":129,"line":8514},[127,163016,162900],{"class":147},[127,163018,163019],{"class":129,"line":8519},[127,163020,2942],{"emptyLinePlaceholder":606},[127,163022,163023],{"class":129,"line":8525},[127,163024,2942],{"emptyLinePlaceholder":606},[127,163026,163027,163029,163031],{"class":129,"line":8552},[127,163028,109192],{"class":290},[127,163030,95821],{"class":154},[127,163032,4281],{"class":147},[127,163034,163035],{"class":129,"line":8557},[127,163036,163037],{"class":147},"    show_menu()\n",[127,163039,163040,163042,163044,163046,163048,163050],{"class":129,"line":8563},[127,163041,161082],{"class":147},[127,163043,725],{"class":290},[127,163045,61138],{"class":154},[127,163047,681],{"class":147},[127,163049,153463],{"class":781},[127,163051,687],{"class":147},[127,163053,163054],{"class":129,"line":8575},[127,163055,2942],{"emptyLinePlaceholder":606},[127,163057,163058,163060,163062,163064,163066],{"class":129,"line":8587},[127,163059,3643],{"class":290},[127,163061,153476],{"class":147},[127,163063,3491],{"class":290},[127,163065,153481],{"class":781},[127,163067,4281],{"class":147},[127,163069,163070],{"class":129,"line":8599},[127,163071,163072],{"class":147},"        show_balance()\n",[127,163074,163075,163077,163079,163081,163083],{"class":129,"line":10258},[127,163076,39833],{"class":290},[127,163078,153476],{"class":147},[127,163080,3491],{"class":290},[127,163082,153500],{"class":781},[127,163084,4281],{"class":147},[127,163086,163087],{"class":129,"line":10283},[127,163088,163089],{"class":147},"        save_money()\n",[127,163091,163092,163094,163096,163098,163100],{"class":129,"line":10306},[127,163093,39833],{"class":290},[127,163095,153476],{"class":147},[127,163097,3491],{"class":290},[127,163099,153518],{"class":781},[127,163101,4281],{"class":147},[127,163103,163104],{"class":129,"line":10330},[127,163105,163106],{"class":147},"        withdraw_money()\n",[127,163108,163109,163111,163113,163115,163117],{"class":129,"line":10335},[127,163110,39833],{"class":290},[127,163112,153476],{"class":147},[127,163114,3491],{"class":290},[127,163116,153572],{"class":781},[127,163118,4281],{"class":147},[127,163120,163121,163123,163125,163127],{"class":129,"line":10340},[127,163122,32991],{"class":154},[127,163124,681],{"class":147},[127,163126,153583],{"class":781},[127,163128,687],{"class":147},[127,163130,163131],{"class":129,"line":10345},[127,163132,32167],{"class":290},[127,163134,163135,163137],{"class":129,"line":10354},[127,163136,158412],{"class":290},[127,163138,4281],{"class":147},[127,163140,163141,163143,163145,163147],{"class":129,"line":10359},[127,163142,32991],{"class":154},[127,163144,681],{"class":147},[127,163146,153604],{"class":781},[127,163148,687],{"class":147},[19,163150,163151],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163153,163155],{"id":163154},"_514-易错点","5.14 易错点",[632,163157,163158,163161,163164,163169,163174,163177],{},[635,163159,163160],{},"函数定义后必须调用才会执行。",[635,163162,163163],{},"函数名后面有括号才是调用。",[635,163165,163166,163168],{},[124,163167,17587],{}," 后面的代码不会执行。",[635,163170,163171,163172,28925],{},"没有返回值的函数默认返回 ",[124,163173,96215],{},[635,163175,163176],{},"局部变量不能在函数外部访问。",[635,163178,163179,163180,163182],{},"不要滥用 ",[124,163181,162216],{},"，更好的方式是让函数返回新值。",[19,163184,163185,163186,163188],{},"例如不用 ",[124,163187,162216],{}," 改写存款：",[117,163190,163192],{"className":30918,"code":163191,"language":30920,"meta":122,"style":122},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[124,163193,163194,163203,163214,163218,163222,163230,163243],{"__ignoreMap":122},[127,163195,163196,163198,163200],{"class":129,"line":130},[127,163197,32487],{"class":290},[127,163199,162820],{"class":143},[127,163201,163202],{"class":147},"(balance, money):\n",[127,163204,163205,163207,163210,163212],{"class":129,"line":137},[127,163206,4632],{"class":290},[127,163208,163209],{"class":147}," balance ",[127,163211,1156],{"class":290},[127,163213,150565],{"class":147},[127,163215,163216],{"class":129,"line":151},[127,163217,2942],{"emptyLinePlaceholder":606},[127,163219,163220],{"class":129,"line":167},[127,163221,2942],{"emptyLinePlaceholder":606},[127,163223,163224,163226,163228],{"class":129,"line":415},[127,163225,162694],{"class":147},[127,163227,725],{"class":290},[127,163229,162699],{"class":154},[127,163231,163232,163234,163236,163239,163241],{"class":129,"line":421},[127,163233,162694],{"class":147},[127,163235,725],{"class":290},[127,163237,163238],{"class":147}," save_money(balance, ",[127,163240,2265],{"class":154},[127,163242,687],{"class":147},[127,163244,163245,163247],{"class":129,"line":1766},[127,163246,30955],{"class":154},[127,163248,163249],{"class":147},"(balance)\n",[14,163251,163253],{"id":163252},"_515-本章练习","5.15 本章练习",[632,163255,163256,163263,163269,163275,163281],{},[635,163257,163258,163259,163262],{},"定义函数 ",[124,163260,163261],{},"print_student(name, age)","，输出学生信息。",[635,163264,163258,163265,163268],{},[124,163266,163267],{},"get_max(a, b, c)","，返回三个数中的最大值。",[635,163270,163258,163271,163274],{},[124,163272,163273],{},"is_even(num)","，判断一个数是否为偶数。",[635,163276,163258,163277,163280],{},[124,163278,163279],{},"calculate_bmi(weight, height)","，返回 BMI。",[635,163282,163283],{},"把第 4 章的菜单程序拆分成多个函数。",[575,163285,163286],{},"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":122,"searchDepth":137,"depth":137,"links":163288},[163289,163290,163291,163292,163293,163294,163295,163296,163297,163301,163302,163303,163304,163305,163306],{"id":161309,"depth":137,"text":161310},{"id":161350,"depth":137,"text":161351},{"id":161440,"depth":137,"text":161441},{"id":161521,"depth":137,"text":161522},{"id":161654,"depth":137,"text":161655},{"id":161776,"depth":137,"text":161777},{"id":161898,"depth":137,"text":161899},{"id":161975,"depth":137,"text":161976},{"id":162097,"depth":137,"text":162098,"children":163298},[163299,163300],{"id":162101,"depth":151,"text":162102},{"id":162159,"depth":151,"text":162160},{"id":162288,"depth":137,"text":162289},{"id":162414,"depth":137,"text":162415},{"id":162527,"depth":137,"text":162528},{"id":162683,"depth":137,"text":162684},{"id":163154,"depth":137,"text":163155},{"id":163252,"depth":137,"text":163253},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161301,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163313,"title":163314,"body":163315,"description":603,"extension":604,"meta":166359,"navigation":606,"path":166360,"seo":166361,"stem":166362,"__hash__":166363},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163316,"toc":166340},[163317,163320,163324,163327,163330,163434,163437,163441,163444,163524,163527,163531,163534,163594,163597,163633,163636,163651,163655,163728,163731,163786,163789,163859,163862,163946,163956,164014,164018,164063,164066,164092,164095,164201,164205,164208,164250,164253,164317,164320,164324,164327,164388,164391,164421,164424,164462,164466,164469,164478,164481,164605,164608,164649,164653,164656,164667,164707,164710,164725,164730,164733,164800,164803,164893,164897,164900,164948,164951,164978,164980,165010,165013,165033,165036,165067,165070,165103,165107,165110,165134,165137,165161,165164,165188,165192,165195,165325,165328,165408,165411,165486,165490,165493,165543,165546,165588,165591,165615,165617,165641,165644,165699,165702,165768,165772,165775,165778,165816,165819,165872,165875,165921,165924,165957,165960,165964,166283,166287,166316,166320,166337],[10,163318,163314],{"id":163319},"_6-数据容器",[14,163321,163323],{"id":163322},"_61-什么是数据容器","6.1 什么是数据容器",[19,163325,163326],{},"数据容器用于一次保存多个数据。",[19,163328,163329],{},"常见容器：",[814,163331,163332,163349],{},[817,163333,163334],{},[820,163335,163336,163338,163341,163344,163347],{},[823,163337,26312],{},[823,163339,163340],{},"是否有序",[823,163342,163343],{},"是否可变",[823,163345,163346],{},"是否允许重复",[823,163348,28032],{},[860,163350,163351,163369,163385,163400,163417],{},[820,163352,163353,163356,163359,163362,163365],{},[865,163354,163355],{},"list列表",[865,163357,163358],{},"有序",[865,163360,163361],{},"可变",[865,163363,163364],{},"允许",[865,163366,163367],{},[124,163368,155647],{},[820,163370,163371,163374,163376,163379,163381],{},[865,163372,163373],{},"tuple元组",[865,163375,163358],{},[865,163377,163378],{},"不可变",[865,163380,163364],{},[865,163382,163383],{},[124,163384,155660],{},[820,163386,163387,163390,163392,163394,163396],{},[865,163388,163389],{},"str字符串",[865,163391,163358],{},[865,163393,163378],{},[865,163395,163364],{},[865,163397,163398],{},[124,163399,156270],{},[820,163401,163402,163405,163408,163410,163413],{},[865,163403,163404],{},"set集合",[865,163406,163407],{},"无序",[865,163409,163361],{},[865,163411,163412],{},"不允许",[865,163414,163415],{},[124,163416,155685],{},[820,163418,163419,163422,163424,163426,163429],{},[865,163420,163421],{},"dict字典",[865,163423,163358],{},[865,163425,163361],{},[865,163427,163428],{},"key不允许重复",[865,163430,163431],{},[124,163432,163433],{},"{\"name\": \"小明\"}",[19,163435,163436],{},"Python 3.7 之后，字典保持插入顺序。",[14,163438,163440],{"id":163439},"_62-列表list","6.2 列表list",[19,163442,163443],{},"列表用于保存一组有顺序的数据。",[117,163445,163447],{"className":30918,"code":163446,"language":30920,"meta":122,"style":122},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[124,163448,163449,163469,163494,163515],{"__ignoreMap":122},[127,163450,163451,163453,163455,163457,163459,163461,163463,163465,163467],{"class":129,"line":130},[127,163452,160770],{"class":147},[127,163454,725],{"class":290},[127,163456,52761],{"class":147},[127,163458,150278],{"class":781},[127,163460,12977],{"class":147},[127,163462,151326],{"class":781},[127,163464,12977],{"class":147},[127,163466,160121],{"class":781},[127,163468,33786],{"class":147},[127,163470,163471,163474,163476,163478,163480,163482,163484,163486,163488,163490,163492],{"class":129,"line":137},[127,163472,163473],{"class":147},"numbers ",[127,163475,725],{"class":290},[127,163477,52761],{"class":147},[127,163479,893],{"class":154},[127,163481,12977],{"class":147},[127,163483,530],{"class":154},[127,163485,12977],{"class":147},[127,163487,749],{"class":154},[127,163489,12977],{"class":147},[127,163491,968],{"class":154},[127,163493,33786],{"class":147},[127,163495,163496,163499,163501,163503,163505,163507,163509,163511,163513],{"class":129,"line":151},[127,163497,163498],{"class":147},"mixed ",[127,163500,725],{"class":290},[127,163502,52761],{"class":147},[127,163504,150278],{"class":781},[127,163506,12977],{"class":147},[127,163508,1324],{"class":154},[127,163510,12977],{"class":147},[127,163512,32016],{"class":154},[127,163514,33786],{"class":147},[127,163516,163517,163520,163522],{"class":129,"line":167},[127,163518,163519],{"class":147},"empty ",[127,163521,725],{"class":290},[127,163523,52373],{"class":147},[19,163525,163526],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163528,163530],{"id":163529},"_63-列表索引","6.3 列表索引",[19,163532,163533],{},"正向索引从 0 开始：",[117,163535,163537],{"className":30918,"code":163536,"language":30920,"meta":122,"style":122},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[124,163538,163539,163559,163563,163574,163584],{"__ignoreMap":122},[127,163540,163541,163543,163545,163547,163549,163551,163553,163555,163557],{"class":129,"line":130},[127,163542,160770],{"class":147},[127,163544,725],{"class":290},[127,163546,52761],{"class":147},[127,163548,150278],{"class":781},[127,163550,12977],{"class":147},[127,163552,151326],{"class":781},[127,163554,12977],{"class":147},[127,163556,160121],{"class":781},[127,163558,33786],{"class":147},[127,163560,163561],{"class":129,"line":137},[127,163562,2942],{"emptyLinePlaceholder":606},[127,163564,163565,163567,163570,163572],{"class":129,"line":151},[127,163566,30955],{"class":154},[127,163568,163569],{"class":147},"(names[",[127,163571,867],{"class":154},[127,163573,5199],{"class":147},[127,163575,163576,163578,163580,163582],{"class":129,"line":167},[127,163577,30955],{"class":154},[127,163579,163569],{"class":147},[127,163581,893],{"class":154},[127,163583,5199],{"class":147},[127,163585,163586,163588,163590,163592],{"class":129,"line":415},[127,163587,30955],{"class":154},[127,163589,163569],{"class":147},[127,163591,530],{"class":154},[127,163593,5199],{"class":147},[19,163595,163596],{},"反向索引从 -1 开始：",[117,163598,163600],{"className":30918,"code":163599,"language":30920,"meta":122,"style":122},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[124,163601,163602,163618],{"__ignoreMap":122},[127,163603,163604,163606,163608,163610,163612,163615],{"class":129,"line":130},[127,163605,30955],{"class":154},[127,163607,163569],{"class":147},[127,163609,1207],{"class":290},[127,163611,893],{"class":154},[127,163613,163614],{"class":147},"])  ",[127,163616,163617],{"class":133},"# 小刚\n",[127,163619,163620,163622,163624,163626,163628,163630],{"class":129,"line":137},[127,163621,30955],{"class":154},[127,163623,163569],{"class":147},[127,163625,1207],{"class":290},[127,163627,530],{"class":154},[127,163629,163614],{"class":147},[127,163631,163632],{"class":133},"# 小红\n",[19,163634,163635],{},"索引越界会报错：",[117,163637,163639],{"className":30918,"code":163638,"language":30920,"meta":122,"style":122},"print(names[3])\n",[124,163640,163641],{"__ignoreMap":122},[127,163642,163643,163645,163647,163649],{"class":129,"line":130},[127,163644,30955],{"class":154},[127,163646,163569],{"class":147},[127,163648,749],{"class":154},[127,163650,5199],{"class":147},[14,163652,163654],{"id":163653},"_64-列表常用方法","6.4 列表常用方法",[117,163656,163658],{"className":30918,"code":163657,"language":30920,"meta":122,"style":122},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[124,163659,163660,163676,163680,163689,163703,163717,163721],{"__ignoreMap":122},[127,163661,163662,163664,163666,163668,163670,163672,163674],{"class":129,"line":130},[127,163663,160770],{"class":147},[127,163665,725],{"class":290},[127,163667,52761],{"class":147},[127,163669,150278],{"class":781},[127,163671,12977],{"class":147},[127,163673,151326],{"class":781},[127,163675,33786],{"class":147},[127,163677,163678],{"class":129,"line":137},[127,163679,2942],{"emptyLinePlaceholder":606},[127,163681,163682,163685,163687],{"class":129,"line":151},[127,163683,163684],{"class":147},"names.append(",[127,163686,160121],{"class":781},[127,163688,687],{"class":147},[127,163690,163691,163694,163696,163698,163701],{"class":129,"line":167},[127,163692,163693],{"class":147},"names.insert(",[127,163695,893],{"class":154},[127,163697,12977],{"class":147},[127,163699,163700],{"class":781},"\"小李\"",[127,163702,687],{"class":147},[127,163704,163705,163708,163710,163712,163715],{"class":129,"line":415},[127,163706,163707],{"class":147},"names.extend([",[127,163709,9225],{"class":781},[127,163711,12977],{"class":147},[127,163713,163714],{"class":781},"\"小赵\"",[127,163716,5199],{"class":147},[127,163718,163719],{"class":129,"line":421},[127,163720,2942],{"emptyLinePlaceholder":606},[127,163722,163723,163725],{"class":129,"line":1766},[127,163724,30955],{"class":154},[127,163726,163727],{"class":147},"(names)\n",[19,163729,163730],{},"删除元素：",[117,163732,163734],{"className":30918,"code":163733,"language":30920,"meta":122,"style":122},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[124,163735,163736,163745,163755,163769,163781],{"__ignoreMap":122},[127,163737,163738,163741,163743],{"class":129,"line":130},[127,163739,163740],{"class":147},"names.remove(",[127,163742,151326],{"class":781},[127,163744,687],{"class":147},[127,163746,163747,163750,163752],{"class":129,"line":137},[127,163748,163749],{"class":147},"last ",[127,163751,725],{"class":290},[127,163753,163754],{"class":147}," names.pop()\n",[127,163756,163757,163760,163762,163765,163767],{"class":129,"line":151},[127,163758,163759],{"class":147},"first ",[127,163761,725],{"class":290},[127,163763,163764],{"class":147}," names.pop(",[127,163766,867],{"class":154},[127,163768,687],{"class":147},[127,163770,163771,163774,163777,163779],{"class":129,"line":167},[127,163772,163773],{"class":290},"del",[127,163775,163776],{"class":147}," names[",[127,163778,867],{"class":154},[127,163780,33786],{"class":147},[127,163782,163783],{"class":129,"line":415},[127,163784,163785],{"class":147},"names.clear()\n",[19,163787,163788],{},"查询和统计：",[117,163790,163792],{"className":30918,"code":163791,"language":30920,"meta":122,"style":122},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[124,163793,163794,163822,163826,163837,163848],{"__ignoreMap":122},[127,163795,163796,163798,163800,163802,163804,163806,163808,163810,163812,163814,163816,163818,163820],{"class":129,"line":130},[127,163797,163473],{"class":147},[127,163799,725],{"class":290},[127,163801,52761],{"class":147},[127,163803,893],{"class":154},[127,163805,12977],{"class":147},[127,163807,530],{"class":154},[127,163809,12977],{"class":147},[127,163811,749],{"class":154},[127,163813,12977],{"class":147},[127,163815,530],{"class":154},[127,163817,12977],{"class":147},[127,163819,968],{"class":154},[127,163821,33786],{"class":147},[127,163823,163824],{"class":129,"line":137},[127,163825,2942],{"emptyLinePlaceholder":606},[127,163827,163828,163830,163833,163835],{"class":129,"line":151},[127,163829,30955],{"class":154},[127,163831,163832],{"class":147},"(numbers.index(",[127,163834,749],{"class":154},[127,163836,31037],{"class":147},[127,163838,163839,163841,163844,163846],{"class":129,"line":167},[127,163840,30955],{"class":154},[127,163842,163843],{"class":147},"(numbers.count(",[127,163845,530],{"class":154},[127,163847,31037],{"class":147},[127,163849,163850,163852,163854,163856],{"class":129,"line":415},[127,163851,30955],{"class":154},[127,163853,681],{"class":147},[127,163855,7900],{"class":154},[127,163857,163858],{"class":147},"(numbers))\n",[19,163860,163861],{},"排序：",[117,163863,163865],{"className":30918,"code":163864,"language":30920,"meta":122,"style":122},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[124,163866,163867,163891,163895,163900,163907,163911,163925,163931,163935,163940],{"__ignoreMap":122},[127,163868,163869,163871,163873,163875,163877,163879,163881,163883,163885,163887,163889],{"class":129,"line":130},[127,163870,163473],{"class":147},[127,163872,725],{"class":290},[127,163874,52761],{"class":147},[127,163876,749],{"class":154},[127,163878,12977],{"class":147},[127,163880,893],{"class":154},[127,163882,12977],{"class":147},[127,163884,994],{"class":154},[127,163886,12977],{"class":147},[127,163888,530],{"class":154},[127,163890,33786],{"class":147},[127,163892,163893],{"class":129,"line":137},[127,163894,2942],{"emptyLinePlaceholder":606},[127,163896,163897],{"class":129,"line":151},[127,163898,163899],{"class":147},"numbers.sort()\n",[127,163901,163902,163904],{"class":129,"line":167},[127,163903,30955],{"class":154},[127,163905,163906],{"class":147},"(numbers)\n",[127,163908,163909],{"class":129,"line":415},[127,163910,2942],{"emptyLinePlaceholder":606},[127,163912,163913,163916,163919,163921,163923],{"class":129,"line":421},[127,163914,163915],{"class":147},"numbers.sort(",[127,163917,163918],{"class":5758},"reverse",[127,163920,725],{"class":290},[127,163922,32016],{"class":154},[127,163924,687],{"class":147},[127,163926,163927,163929],{"class":129,"line":1766},[127,163928,30955],{"class":154},[127,163930,163906],{"class":147},[127,163932,163933],{"class":129,"line":1856},[127,163934,2942],{"emptyLinePlaceholder":606},[127,163936,163937],{"class":129,"line":1862},[127,163938,163939],{"class":147},"numbers.reverse()\n",[127,163941,163942,163944],{"class":129,"line":1874},[127,163943,30955],{"class":154},[127,163945,163906],{"class":147},[19,163947,163948,163951,163952,163955],{},[124,163949,163950],{},"sort()"," 会修改原列表，",[124,163953,163954],{},"sorted()"," 返回新列表。",[117,163957,163959],{"className":30918,"code":163958,"language":30920,"meta":122,"style":122},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[124,163960,163961,163985,163997,164001,164007],{"__ignoreMap":122},[127,163962,163963,163965,163967,163969,163971,163973,163975,163977,163979,163981,163983],{"class":129,"line":130},[127,163964,163473],{"class":147},[127,163966,725],{"class":290},[127,163968,52761],{"class":147},[127,163970,749],{"class":154},[127,163972,12977],{"class":147},[127,163974,893],{"class":154},[127,163976,12977],{"class":147},[127,163978,994],{"class":154},[127,163980,12977],{"class":147},[127,163982,530],{"class":154},[127,163984,33786],{"class":147},[127,163986,163987,163990,163992,163995],{"class":129,"line":137},[127,163988,163989],{"class":147},"new_numbers ",[127,163991,725],{"class":290},[127,163993,163994],{"class":154}," sorted",[127,163996,163906],{"class":147},[127,163998,163999],{"class":129,"line":151},[127,164000,2942],{"emptyLinePlaceholder":606},[127,164002,164003,164005],{"class":129,"line":167},[127,164004,30955],{"class":154},[127,164006,163906],{"class":147},[127,164008,164009,164011],{"class":129,"line":415},[127,164010,30955],{"class":154},[127,164012,164013],{"class":147},"(new_numbers)\n",[14,164015,164017],{"id":164016},"_65-列表遍历","6.5 列表遍历",[117,164019,164021],{"className":30918,"code":164020,"language":30920,"meta":122,"style":122},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[124,164022,164023,164043,164047,164057],{"__ignoreMap":122},[127,164024,164025,164027,164029,164031,164033,164035,164037,164039,164041],{"class":129,"line":130},[127,164026,160770],{"class":147},[127,164028,725],{"class":290},[127,164030,52761],{"class":147},[127,164032,150278],{"class":781},[127,164034,12977],{"class":147},[127,164036,151326],{"class":781},[127,164038,12977],{"class":147},[127,164040,160121],{"class":781},[127,164042,33786],{"class":147},[127,164044,164045],{"class":129,"line":137},[127,164046,2942],{"emptyLinePlaceholder":606},[127,164048,164049,164051,164053,164055],{"class":129,"line":151},[127,164050,3567],{"class":290},[127,164052,160806],{"class":147},[127,164054,26584],{"class":290},[127,164056,160811],{"class":147},[127,164058,164059,164061],{"class":129,"line":167},[127,164060,31839],{"class":154},[127,164062,151050],{"class":147},[19,164064,164065],{},"需要索引时：",[117,164067,164069],{"className":30918,"code":164068,"language":30920,"meta":122,"style":122},"for index, name in enumerate(names):\n    print(index, name)\n",[124,164070,164071,164085],{"__ignoreMap":122},[127,164072,164073,164075,164078,164080,164082],{"class":129,"line":130},[127,164074,3567],{"class":290},[127,164076,164077],{"class":147}," index, name ",[127,164079,26584],{"class":290},[127,164081,32146],{"class":154},[127,164083,164084],{"class":147},"(names):\n",[127,164086,164087,164089],{"class":129,"line":137},[127,164088,31839],{"class":154},[127,164090,164091],{"class":147},"(index, name)\n",[19,164093,164094],{},"统计总分：",[117,164096,164098],{"className":30918,"code":164097,"language":30920,"meta":122,"style":122},"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",[124,164099,164100,164125,164133,164137,164148,164156,164160,164177],{"__ignoreMap":122},[127,164101,164102,164105,164107,164109,164111,164113,164115,164117,164119,164121,164123],{"class":129,"line":130},[127,164103,164104],{"class":147},"scores ",[127,164106,725],{"class":290},[127,164108,52761],{"class":147},[127,164110,1536],{"class":154},[127,164112,12977],{"class":147},[127,164114,1410],{"class":154},[127,164116,12977],{"class":147},[127,164118,929],{"class":154},[127,164120,12977],{"class":147},[127,164122,1236],{"class":154},[127,164124,33786],{"class":147},[127,164126,164127,164129,164131],{"class":129,"line":137},[127,164128,157650],{"class":147},[127,164130,725],{"class":290},[127,164132,47873],{"class":154},[127,164134,164135],{"class":129,"line":151},[127,164136,2942],{"emptyLinePlaceholder":606},[127,164138,164139,164141,164143,164145],{"class":129,"line":167},[127,164140,3567],{"class":290},[127,164142,158173],{"class":147},[127,164144,26584],{"class":290},[127,164146,164147],{"class":147}," scores:\n",[127,164149,164150,164152,164154],{"class":129,"line":415},[127,164151,159697],{"class":147},[127,164153,10019],{"class":290},[127,164155,2122],{"class":147},[127,164157,164158],{"class":129,"line":421},[127,164159,2942],{"emptyLinePlaceholder":606},[127,164161,164162,164165,164167,164170,164172,164174],{"class":129,"line":1766},[127,164163,164164],{"class":147},"avg ",[127,164166,725],{"class":290},[127,164168,164169],{"class":147}," total ",[127,164171,1259],{"class":290},[127,164173,7873],{"class":154},[127,164175,164176],{"class":147},"(scores)\n",[127,164178,164179,164181,164183,164185,164188,164190,164193,164195,164197,164199],{"class":129,"line":1856},[127,164180,30955],{"class":154},[127,164182,681],{"class":147},[127,164184,731],{"class":290},[127,164186,164187],{"class":781},"\"平均分:",[127,164189,1570],{"class":154},[127,164191,164192],{"class":147},"avg",[127,164194,157549],{"class":290},[127,164196,1620],{"class":154},[127,164198,926],{"class":781},[127,164200,687],{"class":147},[14,164202,164204],{"id":164203},"_66-元组tuple","6.6 元组tuple",[19,164206,164207],{},"元组和列表类似，但不可修改。",[117,164209,164211],{"className":30918,"code":164210,"language":30920,"meta":122,"style":122},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[124,164212,164213,164230],{"__ignoreMap":122},[127,164214,164215,164218,164220,164222,164224,164226,164228],{"class":129,"line":130},[127,164216,164217],{"class":147},"point ",[127,164219,725],{"class":290},[127,164221,2201],{"class":147},[127,164223,1121],{"class":154},[127,164225,12977],{"class":147},[127,164227,1374],{"class":154},[127,164229,687],{"class":147},[127,164231,164232,164234,164236,164238,164240,164242,164244,164246,164248],{"class":129,"line":137},[127,164233,116843],{"class":147},[127,164235,725],{"class":290},[127,164237,2201],{"class":147},[127,164239,150278],{"class":781},[127,164241,12977],{"class":147},[127,164243,1324],{"class":154},[127,164245,12977],{"class":147},[127,164247,69802],{"class":781},[127,164249,687],{"class":147},[19,164251,164252],{},"单元素元组必须加逗号：",[117,164254,164256],{"className":30918,"code":164255,"language":30920,"meta":122,"style":122},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[124,164257,164258,164272,164285,164289,164303],{"__ignoreMap":122},[127,164259,164260,164263,164265,164267,164269],{"class":129,"line":130},[127,164261,164262],{"class":147},"t1 ",[127,164264,725],{"class":290},[127,164266,2201],{"class":147},[127,164268,1121],{"class":154},[127,164270,164271],{"class":147},",)\n",[127,164273,164274,164277,164279,164281,164283],{"class":129,"line":137},[127,164275,164276],{"class":147},"t2 ",[127,164278,725],{"class":290},[127,164280,2201],{"class":147},[127,164282,1121],{"class":154},[127,164284,687],{"class":147},[127,164286,164287],{"class":129,"line":151},[127,164288,2942],{"emptyLinePlaceholder":606},[127,164290,164291,164293,164295,164297,164300],{"class":129,"line":167},[127,164292,30955],{"class":154},[127,164294,681],{"class":147},[127,164296,103636],{"class":154},[127,164298,164299],{"class":147},"(t1))  ",[127,164301,164302],{"class":133},"# tuple\n",[127,164304,164305,164307,164309,164311,164314],{"class":129,"line":415},[127,164306,30955],{"class":154},[127,164308,681],{"class":147},[127,164310,103636],{"class":154},[127,164312,164313],{"class":147},"(t2))  ",[127,164315,164316],{"class":133},"# int\n",[19,164318,164319],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164321,164323],{"id":164322},"_67-字符串str","6.7 字符串str",[19,164325,164326],{},"字符串也是序列，可以索引、切片和遍历。",[117,164328,164330],{"className":30918,"code":164329,"language":30920,"meta":122,"style":122},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[124,164331,164332,164340,164344,164355,164367,164371,164382],{"__ignoreMap":122},[127,164333,164334,164336,164338],{"class":129,"line":130},[127,164335,156834],{"class":147},[127,164337,725],{"class":290},[127,164339,160071],{"class":781},[127,164341,164342],{"class":129,"line":137},[127,164343,2942],{"emptyLinePlaceholder":606},[127,164345,164346,164348,164351,164353],{"class":129,"line":151},[127,164347,30955],{"class":154},[127,164349,164350],{"class":147},"(text[",[127,164352,867],{"class":154},[127,164354,5199],{"class":147},[127,164356,164357,164359,164361,164363,164365],{"class":129,"line":167},[127,164358,30955],{"class":154},[127,164360,164350],{"class":147},[127,164362,1207],{"class":290},[127,164364,893],{"class":154},[127,164366,5199],{"class":147},[127,164368,164369],{"class":129,"line":415},[127,164370,2942],{"emptyLinePlaceholder":606},[127,164372,164373,164375,164377,164379],{"class":129,"line":421},[127,164374,3567],{"class":290},[127,164376,160082],{"class":147},[127,164378,26584],{"class":290},[127,164380,164381],{"class":147}," text:\n",[127,164383,164384,164386],{"class":129,"line":1766},[127,164385,31839],{"class":154},[127,164387,160093],{"class":147},[19,164389,164390],{},"字符串不可变：",[117,164392,164394],{"className":30918,"code":164393,"language":30920,"meta":122,"style":122},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[124,164395,164396,164404],{"__ignoreMap":122},[127,164397,164398,164400,164402],{"class":129,"line":130},[127,164399,156834],{"class":147},[127,164401,725],{"class":290},[127,164403,160071],{"class":781},[127,164405,164406,164409,164411,164413,164415,164418],{"class":129,"line":137},[127,164407,164408],{"class":147},"text[",[127,164410,867],{"class":154},[127,164412,4985],{"class":147},[127,164414,725],{"class":290},[127,164416,164417],{"class":781}," \"P\"",[127,164419,164420],{"class":133},"  # 报错\n",[19,164422,164423],{},"如果要得到新字符串：",[117,164425,164427],{"className":30918,"code":164426,"language":30920,"meta":122,"style":122},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[124,164428,164429,164437,164455],{"__ignoreMap":122},[127,164430,164431,164433,164435],{"class":129,"line":130},[127,164432,156834],{"class":147},[127,164434,725],{"class":290},[127,164436,160071],{"class":781},[127,164438,164439,164441,164443,164445,164447,164450,164452],{"class":129,"line":137},[127,164440,156834],{"class":147},[127,164442,725],{"class":290},[127,164444,164417],{"class":781},[127,164446,46106],{"class":290},[127,164448,164449],{"class":147}," text[",[127,164451,893],{"class":154},[127,164453,164454],{"class":147},":]\n",[127,164456,164457,164459],{"class":129,"line":151},[127,164458,30955],{"class":154},[127,164460,164461],{"class":147},"(text)\n",[14,164463,164465],{"id":164464},"_68-切片","6.8 切片",[19,164467,164468],{},"切片用于从序列中取一部分。",[117,164470,164472],{"className":30918,"code":164471,"language":30920,"meta":122,"style":122},"序列[开始:结束:步长]\n",[124,164473,164474],{"__ignoreMap":122},[127,164475,164476],{"class":129,"line":130},[127,164477,164471],{"class":147},[19,164479,164480],{},"结束位置不包含。",[117,164482,164484],{"className":30918,"code":164483,"language":30920,"meta":122,"style":122},"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",[124,164485,164486,164523,164527,164546,164561,164575,164589],{"__ignoreMap":122},[127,164487,164488,164491,164493,164495,164497,164499,164501,164503,164505,164507,164509,164511,164513,164515,164517,164519,164521],{"class":129,"line":130},[127,164489,164490],{"class":147},"nums ",[127,164492,725],{"class":290},[127,164494,52761],{"class":147},[127,164496,867],{"class":154},[127,164498,12977],{"class":147},[127,164500,893],{"class":154},[127,164502,12977],{"class":147},[127,164504,530],{"class":154},[127,164506,12977],{"class":147},[127,164508,749],{"class":154},[127,164510,12977],{"class":147},[127,164512,968],{"class":154},[127,164514,12977],{"class":147},[127,164516,994],{"class":154},[127,164518,12977],{"class":147},[127,164520,1019],{"class":154},[127,164522,33786],{"class":147},[127,164524,164525],{"class":129,"line":137},[127,164526,2942],{"emptyLinePlaceholder":606},[127,164528,164529,164531,164534,164536,164538,164540,164543],{"class":129,"line":151},[127,164530,30955],{"class":154},[127,164532,164533],{"class":147},"(nums[",[127,164535,893],{"class":154},[127,164537,1533],{"class":147},[127,164539,968],{"class":154},[127,164541,164542],{"class":147},"])    ",[127,164544,164545],{"class":133},"# [1, 2, 3]\n",[127,164547,164548,164550,164553,164555,164558],{"class":129,"line":167},[127,164549,30955],{"class":154},[127,164551,164552],{"class":147},"(nums[:",[127,164554,749],{"class":154},[127,164556,164557],{"class":147},"])     ",[127,164559,164560],{"class":133},"# [0, 1, 2]\n",[127,164562,164563,164565,164567,164569,164572],{"class":129,"line":415},[127,164564,30955],{"class":154},[127,164566,164533],{"class":147},[127,164568,749],{"class":154},[127,164570,164571],{"class":147},":])     ",[127,164573,164574],{"class":133},"# [3, 4, 5, 6]\n",[127,164576,164577,164579,164582,164584,164586],{"class":129,"line":421},[127,164578,30955],{"class":154},[127,164580,164581],{"class":147},"(nums[::",[127,164583,530],{"class":154},[127,164585,164542],{"class":147},[127,164587,164588],{"class":133},"# [0, 2, 4, 6]\n",[127,164590,164591,164593,164595,164597,164599,164602],{"class":129,"line":1766},[127,164592,30955],{"class":154},[127,164594,164581],{"class":147},[127,164596,1207],{"class":290},[127,164598,893],{"class":154},[127,164600,164601],{"class":147},"])   ",[127,164603,164604],{"class":133},"# 反转\n",[19,164606,164607],{},"字符串切片：",[117,164609,164611],{"className":30918,"code":164610,"language":30920,"meta":122,"style":122},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[124,164612,164613,164622,164636],{"__ignoreMap":122},[127,164614,164615,164617,164619],{"class":129,"line":130},[127,164616,156834],{"class":147},[127,164618,725],{"class":290},[127,164620,164621],{"class":781}," \"abcdef\"\n",[127,164623,164624,164626,164628,164630,164632,164634],{"class":129,"line":137},[127,164625,30955],{"class":154},[127,164627,164350],{"class":147},[127,164629,893],{"class":154},[127,164631,1533],{"class":147},[127,164633,968],{"class":154},[127,164635,5199],{"class":147},[127,164637,164638,164640,164643,164645,164647],{"class":129,"line":151},[127,164639,30955],{"class":154},[127,164641,164642],{"class":147},"(text[::",[127,164644,1207],{"class":290},[127,164646,893],{"class":154},[127,164648,5199],{"class":147},[14,164650,164652],{"id":164651},"_69-集合set","6.9 集合set",[19,164654,164655],{},"集合特点：",[632,164657,164658,164661,164664],{},[635,164659,164660],{},"无序。",[635,164662,164663],{},"元素不重复。",[635,164665,164666],{},"可以做交集、并集、差集。",[117,164668,164670],{"className":30918,"code":164669,"language":30920,"meta":122,"style":122},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[124,164671,164672,164700],{"__ignoreMap":122},[127,164673,164674,164676,164678,164680,164682,164684,164686,164688,164690,164692,164694,164696,164698],{"class":129,"line":130},[127,164675,164490],{"class":147},[127,164677,725],{"class":290},[127,164679,4990],{"class":147},[127,164681,893],{"class":154},[127,164683,12977],{"class":147},[127,164685,530],{"class":154},[127,164687,12977],{"class":147},[127,164689,749],{"class":154},[127,164691,12977],{"class":147},[127,164693,749],{"class":154},[127,164695,12977],{"class":147},[127,164697,968],{"class":154},[127,164699,170],{"class":147},[127,164701,164702,164704],{"class":129,"line":137},[127,164703,30955],{"class":154},[127,164705,164706],{"class":147},"(nums)\n",[19,164708,164709],{},"创建空集合：",[117,164711,164713],{"className":30918,"code":164712,"language":30920,"meta":122,"style":122},"s = set()\n",[124,164714,164715],{"__ignoreMap":122},[127,164716,164717,164719,164721,164723],{"class":129,"line":130},[127,164718,11121],{"class":147},[127,164720,725],{"class":290},[127,164722,120251],{"class":154},[127,164724,2518],{"class":147},[19,164726,9567,164727,164729],{},[124,164728,32999],{}," 是空字典，不是空集合。",[19,164731,164732],{},"集合常用操作：",[117,164734,164736],{"className":30918,"code":164735,"language":30920,"meta":122,"style":122},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[124,164737,164738,164758,164762,164771,164780,164789],{"__ignoreMap":122},[127,164739,164740,164742,164744,164746,164748,164750,164752,164754,164756],{"class":129,"line":130},[127,164741,11121],{"class":147},[127,164743,725],{"class":290},[127,164745,4990],{"class":147},[127,164747,893],{"class":154},[127,164749,12977],{"class":147},[127,164751,530],{"class":154},[127,164753,12977],{"class":147},[127,164755,749],{"class":154},[127,164757,170],{"class":147},[127,164759,164760],{"class":129,"line":137},[127,164761,2942],{"emptyLinePlaceholder":606},[127,164763,164764,164767,164769],{"class":129,"line":151},[127,164765,164766],{"class":147},"s.add(",[127,164768,968],{"class":154},[127,164770,687],{"class":147},[127,164772,164773,164776,164778],{"class":129,"line":167},[127,164774,164775],{"class":147},"s.remove(",[127,164777,530],{"class":154},[127,164779,687],{"class":147},[127,164781,164782,164785,164787],{"class":129,"line":415},[127,164783,164784],{"class":147},"s.discard(",[127,164786,1121],{"class":154},[127,164788,687],{"class":147},[127,164790,164791,164793,164795,164797],{"class":129,"line":421},[127,164792,30955],{"class":154},[127,164794,681],{"class":147},[127,164796,7900],{"class":154},[127,164798,164799],{"class":147},"(s))\n",[19,164801,164802],{},"交并差：",[117,164804,164806],{"className":30918,"code":164805,"language":30920,"meta":122,"style":122},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[124,164807,164808,164828,164848,164852,164867,164880],{"__ignoreMap":122},[127,164809,164810,164812,164814,164816,164818,164820,164822,164824,164826],{"class":129,"line":130},[127,164811,11461],{"class":147},[127,164813,725],{"class":290},[127,164815,4990],{"class":147},[127,164817,893],{"class":154},[127,164819,12977],{"class":147},[127,164821,530],{"class":154},[127,164823,12977],{"class":147},[127,164825,749],{"class":154},[127,164827,170],{"class":147},[127,164829,164830,164832,164834,164836,164838,164840,164842,164844,164846],{"class":129,"line":137},[127,164831,11487],{"class":147},[127,164833,725],{"class":290},[127,164835,4990],{"class":147},[127,164837,749],{"class":154},[127,164839,12977],{"class":147},[127,164841,968],{"class":154},[127,164843,12977],{"class":147},[127,164845,994],{"class":154},[127,164847,170],{"class":147},[127,164849,164850],{"class":129,"line":151},[127,164851,2942],{"emptyLinePlaceholder":606},[127,164853,164854,164856,164859,164861,164864],{"class":129,"line":167},[127,164855,30955],{"class":154},[127,164857,164858],{"class":147},"(a ",[127,164860,1028],{"class":290},[127,164862,164863],{"class":147}," b)  ",[127,164865,164866],{"class":133},"# 交集\n",[127,164868,164869,164871,164873,164875,164877],{"class":129,"line":415},[127,164870,30955],{"class":154},[127,164872,164858],{"class":147},[127,164874,1595],{"class":290},[127,164876,164863],{"class":147},[127,164878,164879],{"class":133},"# 并集\n",[127,164881,164882,164884,164886,164888,164890],{"class":129,"line":421},[127,164883,30955],{"class":154},[127,164885,164858],{"class":147},[127,164887,1207],{"class":290},[127,164889,164863],{"class":147},[127,164891,164892],{"class":133},"# 差集\n",[14,164894,164896],{"id":164895},"_610-字典dict","6.10 字典dict",[19,164898,164899],{},"字典通过 key-value 保存数据。",[117,164901,164903],{"className":30918,"code":164902,"language":30920,"meta":122,"style":122},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[124,164904,164905,164913,164923,164934,164944],{"__ignoreMap":122},[127,164906,164907,164909,164911],{"class":129,"line":130},[127,164908,149871],{"class":147},[127,164910,725],{"class":290},[127,164912,148],{"class":147},[127,164914,164915,164917,164919,164921],{"class":129,"line":137},[127,164916,147410],{"class":781},[127,164918,158],{"class":147},[127,164920,150278],{"class":781},[127,164922,32006],{"class":147},[127,164924,164925,164928,164930,164932],{"class":129,"line":151},[127,164926,164927],{"class":781},"    \"age\"",[127,164929,158],{"class":147},[127,164931,1324],{"class":154},[127,164933,32006],{"class":147},[127,164935,164936,164939,164941],{"class":129,"line":167},[127,164937,164938],{"class":781},"    \"score\"",[127,164940,158],{"class":147},[127,164942,164943],{"class":154},"95\n",[127,164945,164946],{"class":129,"line":415},[127,164947,170],{"class":147},[19,164949,164950],{},"获取值：",[117,164952,164954],{"className":30918,"code":164953,"language":30920,"meta":122,"style":122},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[124,164955,164956,164967],{"__ignoreMap":122},[127,164957,164958,164960,164963,164965],{"class":129,"line":130},[127,164959,30955],{"class":154},[127,164961,164962],{"class":147},"(student[",[127,164964,63212],{"class":781},[127,164966,5199],{"class":147},[127,164968,164969,164971,164974,164976],{"class":129,"line":137},[127,164970,30955],{"class":154},[127,164972,164973],{"class":147},"(student.get(",[127,164975,63212],{"class":781},[127,164977,31037],{"class":147},[19,164979,15930],{},[117,164981,164983],{"className":30918,"code":164982,"language":30920,"meta":122,"style":122},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[124,164984,164985,164998],{"__ignoreMap":122},[127,164986,164987,164989,164992,164995],{"class":129,"line":130},[127,164988,153249],{"class":147},[127,164990,164991],{"class":781},"\"address\"",[127,164993,164994],{"class":147},"]     ",[127,164996,164997],{"class":133},"# key不存在会报错\n",[127,164999,165000,165003,165005,165007],{"class":129,"line":137},[127,165001,165002],{"class":147},"student.get(",[127,165004,164991],{"class":781},[127,165006,14256],{"class":147},[127,165008,165009],{"class":133},"# key不存在返回None\n",[19,165011,165012],{},"设置默认值：",[117,165014,165016],{"className":30918,"code":165015,"language":30920,"meta":122,"style":122},"print(student.get(\"address\", \"未知\"))\n",[124,165017,165018],{"__ignoreMap":122},[127,165019,165020,165022,165024,165026,165028,165031],{"class":129,"line":130},[127,165021,30955],{"class":154},[127,165023,164973],{"class":147},[127,165025,164991],{"class":781},[127,165027,12977],{"class":147},[127,165029,165030],{"class":781},"\"未知\"",[127,165032,31037],{"class":147},[19,165034,165035],{},"新增和修改：",[117,165037,165039],{"className":30918,"code":165038,"language":30920,"meta":122,"style":122},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[124,165040,165041,165054],{"__ignoreMap":122},[127,165042,165043,165045,165047,165049,165051],{"class":129,"line":130},[127,165044,153249],{"class":147},[127,165046,69657],{"class":781},[127,165048,4985],{"class":147},[127,165050,725],{"class":290},[127,165052,165053],{"class":154}," 19\n",[127,165055,165056,165058,165060,165062,165064],{"class":129,"line":137},[127,165057,153249],{"class":147},[127,165059,164991],{"class":781},[127,165061,4985],{"class":147},[127,165063,725],{"class":290},[127,165065,165066],{"class":781}," \"北京\"\n",[19,165068,165069],{},"删除：",[117,165071,165073],{"className":30918,"code":165072,"language":30920,"meta":122,"style":122},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[124,165074,165075,165088,165098],{"__ignoreMap":122},[127,165076,165077,165079,165081,165084,165086],{"class":129,"line":130},[127,165078,155748],{"class":147},[127,165080,725],{"class":290},[127,165082,165083],{"class":147}," student.pop(",[127,165085,151862],{"class":781},[127,165087,687],{"class":147},[127,165089,165090,165092,165094,165096],{"class":129,"line":137},[127,165091,163773],{"class":290},[127,165093,152539],{"class":147},[127,165095,69657],{"class":781},[127,165097,33786],{"class":147},[127,165099,165100],{"class":129,"line":151},[127,165101,165102],{"class":147},"student.clear()\n",[14,165104,165106],{"id":165105},"_611-字典遍历","6.11 字典遍历",[19,165108,165109],{},"遍历 key：",[117,165111,165113],{"className":30918,"code":165112,"language":30920,"meta":122,"style":122},"for key in student:\n    print(key, student[key])\n",[124,165114,165115,165127],{"__ignoreMap":122},[127,165116,165117,165119,165122,165124],{"class":129,"line":130},[127,165118,3567],{"class":290},[127,165120,165121],{"class":147}," key ",[127,165123,26584],{"class":290},[127,165125,165126],{"class":147}," student:\n",[127,165128,165129,165131],{"class":129,"line":137},[127,165130,31839],{"class":154},[127,165132,165133],{"class":147},"(key, student[key])\n",[19,165135,165136],{},"遍历 value：",[117,165138,165140],{"className":30918,"code":165139,"language":30920,"meta":122,"style":122},"for value in student.values():\n    print(value)\n",[124,165141,165142,165154],{"__ignoreMap":122},[127,165143,165144,165146,165149,165151],{"class":129,"line":130},[127,165145,3567],{"class":290},[127,165147,165148],{"class":147}," value ",[127,165150,26584],{"class":290},[127,165152,165153],{"class":147}," student.values():\n",[127,165155,165156,165158],{"class":129,"line":137},[127,165157,31839],{"class":154},[127,165159,165160],{"class":147},"(value)\n",[19,165162,165163],{},"遍历 key 和 value：",[117,165165,165167],{"className":30918,"code":165166,"language":30920,"meta":122,"style":122},"for key, value in student.items():\n    print(key, value)\n",[124,165168,165169,165181],{"__ignoreMap":122},[127,165170,165171,165173,165176,165178],{"class":129,"line":130},[127,165172,3567],{"class":290},[127,165174,165175],{"class":147}," key, value ",[127,165177,26584],{"class":290},[127,165179,165180],{"class":147}," student.items():\n",[127,165182,165183,165185],{"class":129,"line":137},[127,165184,31839],{"class":154},[127,165186,165187],{"class":147},"(key, value)\n",[14,165189,165191],{"id":165190},"_612-嵌套容器","6.12 嵌套容器",[19,165193,165194],{},"列表中保存字典，是项目中最常见的结构之一。",[117,165196,165198],{"className":30918,"code":165197,"language":30920,"meta":122,"style":122},"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",[124,165199,165200,165208,165236,165264,165292,165296,165300,165310],{"__ignoreMap":122},[127,165201,165202,165204,165206],{"class":129,"line":130},[127,165203,160106],{"class":147},[127,165205,725],{"class":290},[127,165207,55981],{"class":147},[127,165209,165210,165212,165214,165216,165218,165220,165222,165224,165226,165228,165230,165232,165234],{"class":129,"line":137},[127,165211,148775],{"class":147},[127,165213,63212],{"class":781},[127,165215,158],{"class":147},[127,165217,150278],{"class":781},[127,165219,12977],{"class":147},[127,165221,69657],{"class":781},[127,165223,158],{"class":147},[127,165225,1324],{"class":154},[127,165227,12977],{"class":147},[127,165229,151862],{"class":781},[127,165231,158],{"class":147},[127,165233,1663],{"class":154},[127,165235,5472],{"class":147},[127,165237,165238,165240,165242,165244,165246,165248,165250,165252,165254,165256,165258,165260,165262],{"class":129,"line":151},[127,165239,148775],{"class":147},[127,165241,63212],{"class":781},[127,165243,158],{"class":147},[127,165245,151326],{"class":781},[127,165247,12977],{"class":147},[127,165249,69657],{"class":781},[127,165251,158],{"class":147},[127,165253,1299],{"class":154},[127,165255,12977],{"class":147},[127,165257,151862],{"class":781},[127,165259,158],{"class":147},[127,165261,1485],{"class":154},[127,165263,5472],{"class":147},[127,165265,165266,165268,165270,165272,165274,165276,165278,165280,165282,165284,165286,165288,165290],{"class":129,"line":167},[127,165267,148775],{"class":147},[127,165269,63212],{"class":781},[127,165271,158],{"class":147},[127,165273,160121],{"class":781},[127,165275,12977],{"class":147},[127,165277,69657],{"class":781},[127,165279,158],{"class":147},[127,165281,1349],{"class":154},[127,165283,12977],{"class":147},[127,165285,151862],{"class":781},[127,165287,158],{"class":147},[127,165289,1081],{"class":154},[127,165291,5472],{"class":147},[127,165293,165294],{"class":129,"line":415},[127,165295,33786],{"class":147},[127,165297,165298],{"class":129,"line":421},[127,165299,2942],{"emptyLinePlaceholder":606},[127,165301,165302,165304,165306,165308],{"class":129,"line":1766},[127,165303,3567],{"class":290},[127,165305,152527],{"class":147},[127,165307,26584],{"class":290},[127,165309,152532],{"class":147},[127,165311,165312,165314,165316,165318,165321,165323],{"class":129,"line":1856},[127,165313,31839],{"class":154},[127,165315,164962],{"class":147},[127,165317,63212],{"class":781},[127,165319,165320],{"class":147},"], student[",[127,165322,151862],{"class":781},[127,165324,5199],{"class":147},[19,165326,165327],{},"统计平均分：",[117,165329,165331],{"className":30918,"code":165330,"language":30920,"meta":122,"style":122},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[124,165332,165333,165341,165345,165355,165367,165371,165386],{"__ignoreMap":122},[127,165334,165335,165337,165339],{"class":129,"line":130},[127,165336,157650],{"class":147},[127,165338,725],{"class":290},[127,165340,47873],{"class":154},[127,165342,165343],{"class":129,"line":137},[127,165344,2942],{"emptyLinePlaceholder":606},[127,165346,165347,165349,165351,165353],{"class":129,"line":151},[127,165348,3567],{"class":290},[127,165350,152527],{"class":147},[127,165352,26584],{"class":290},[127,165354,152532],{"class":147},[127,165356,165357,165359,165361,165363,165365],{"class":129,"line":167},[127,165358,159697],{"class":147},[127,165360,10019],{"class":290},[127,165362,152539],{"class":147},[127,165364,151862],{"class":781},[127,165366,33786],{"class":147},[127,165368,165369],{"class":129,"line":415},[127,165370,2942],{"emptyLinePlaceholder":606},[127,165372,165373,165375,165377,165379,165381,165383],{"class":129,"line":421},[127,165374,164164],{"class":147},[127,165376,725],{"class":290},[127,165378,164169],{"class":147},[127,165380,1259],{"class":290},[127,165382,7873],{"class":154},[127,165384,165385],{"class":147},"(students)\n",[127,165387,165388,165390,165392,165394,165396,165398,165400,165402,165404,165406],{"class":129,"line":1766},[127,165389,30955],{"class":154},[127,165391,681],{"class":147},[127,165393,731],{"class":290},[127,165395,164187],{"class":781},[127,165397,1570],{"class":154},[127,165399,164192],{"class":147},[127,165401,157549],{"class":290},[127,165403,1620],{"class":154},[127,165405,926],{"class":781},[127,165407,687],{"class":147},[19,165409,165410],{},"查找学生：",[117,165412,165414],{"className":30918,"code":165413,"language":30920,"meta":122,"style":122},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[124,165415,165416,165431,165435,165445,165459,165465,165469,165475],{"__ignoreMap":122},[127,165417,165418,165420,165422,165424,165426,165429],{"class":129,"line":130},[127,165419,112107],{"class":147},[127,165421,725],{"class":290},[127,165423,61138],{"class":154},[127,165425,681],{"class":147},[127,165427,165428],{"class":781},"\"请输入学生姓名:\"",[127,165430,687],{"class":147},[127,165432,165433],{"class":129,"line":137},[127,165434,2942],{"emptyLinePlaceholder":606},[127,165436,165437,165439,165441,165443],{"class":129,"line":151},[127,165438,3567],{"class":290},[127,165440,152527],{"class":147},[127,165442,26584],{"class":290},[127,165444,152532],{"class":147},[127,165446,165447,165449,165451,165453,165455,165457],{"class":129,"line":167},[127,165448,3643],{"class":290},[127,165450,152539],{"class":147},[127,165452,63212],{"class":781},[127,165454,4985],{"class":147},[127,165456,3491],{"class":290},[127,165458,160822],{"class":147},[127,165460,165461,165463],{"class":129,"line":415},[127,165462,32991],{"class":154},[127,165464,150432],{"class":147},[127,165466,165467],{"class":129,"line":421},[127,165468,32167],{"class":290},[127,165470,165471,165473],{"class":129,"line":1766},[127,165472,2244],{"class":290},[127,165474,4281],{"class":147},[127,165476,165477,165479,165481,165484],{"class":129,"line":1856},[127,165478,31839],{"class":154},[127,165480,681],{"class":147},[127,165482,165483],{"class":781},"\"没有找到\"",[127,165485,687],{"class":147},[14,165487,165489],{"id":165488},"_613-容器通用操作","6.13 容器通用操作",[19,165491,165492],{},"长度：",[117,165494,165496],{"className":30918,"code":165495,"language":30920,"meta":122,"style":122},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[124,165497,165498,165517,165527],{"__ignoreMap":122},[127,165499,165500,165502,165505,165507,165509,165511,165513,165515],{"class":129,"line":130},[127,165501,7900],{"class":154},[127,165503,165504],{"class":147},"([",[127,165506,893],{"class":154},[127,165508,12977],{"class":147},[127,165510,530],{"class":154},[127,165512,12977],{"class":147},[127,165514,749],{"class":154},[127,165516,5199],{"class":147},[127,165518,165519,165521,165523,165525],{"class":129,"line":137},[127,165520,7900],{"class":154},[127,165522,681],{"class":147},[127,165524,156270],{"class":781},[127,165526,687],{"class":147},[127,165528,165529,165531,165534,165536,165538,165540],{"class":129,"line":151},[127,165530,7900],{"class":154},[127,165532,165533],{"class":147},"({",[127,165535,63212],{"class":781},[127,165537,158],{"class":147},[127,165539,150278],{"class":781},[127,165541,165542],{"class":147},"})\n",[19,165544,165545],{},"最大最小：",[117,165547,165549],{"className":30918,"code":165548,"language":30920,"meta":122,"style":122},"max([1, 2, 3])\nmin([1, 2, 3])\n",[124,165550,165551,165569],{"__ignoreMap":122},[127,165552,165553,165555,165557,165559,165561,165563,165565,165567],{"class":129,"line":130},[127,165554,6557],{"class":154},[127,165556,165504],{"class":147},[127,165558,893],{"class":154},[127,165560,12977],{"class":147},[127,165562,530],{"class":154},[127,165564,12977],{"class":147},[127,165566,749],{"class":154},[127,165568,5199],{"class":147},[127,165570,165571,165574,165576,165578,165580,165582,165584,165586],{"class":129,"line":137},[127,165572,165573],{"class":154},"min",[127,165575,165504],{"class":147},[127,165577,893],{"class":154},[127,165579,12977],{"class":147},[127,165581,530],{"class":154},[127,165583,12977],{"class":147},[127,165585,749],{"class":154},[127,165587,5199],{"class":147},[19,165589,165590],{},"求和：",[117,165592,165594],{"className":30918,"code":165593,"language":30920,"meta":122,"style":122},"sum([1, 2, 3])\n",[124,165595,165596],{"__ignoreMap":122},[127,165597,165598,165601,165603,165605,165607,165609,165611,165613],{"class":129,"line":130},[127,165599,165600],{"class":154},"sum",[127,165602,165504],{"class":147},[127,165604,893],{"class":154},[127,165606,12977],{"class":147},[127,165608,530],{"class":154},[127,165610,12977],{"class":147},[127,165612,749],{"class":154},[127,165614,5199],{"class":147},[19,165616,163861],{},[117,165618,165620],{"className":30918,"code":165619,"language":30920,"meta":122,"style":122},"sorted([3, 1, 2])\n",[124,165621,165622],{"__ignoreMap":122},[127,165623,165624,165627,165629,165631,165633,165635,165637,165639],{"class":129,"line":130},[127,165625,165626],{"class":154},"sorted",[127,165628,165504],{"class":147},[127,165630,749],{"class":154},[127,165632,12977],{"class":147},[127,165634,893],{"class":154},[127,165636,12977],{"class":147},[127,165638,530],{"class":154},[127,165640,5199],{"class":147},[19,165642,165643],{},"类型转换：",[117,165645,165647],{"className":30918,"code":165646,"language":30920,"meta":122,"style":122},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[124,165648,165649,165659,165677],{"__ignoreMap":122},[127,165650,165651,165653,165655,165657],{"class":129,"line":130},[127,165652,154460],{"class":154},[127,165654,681],{"class":147},[127,165656,156270],{"class":781},[127,165658,687],{"class":147},[127,165660,165661,165663,165665,165667,165669,165671,165673,165675],{"class":129,"line":137},[127,165662,155655],{"class":154},[127,165664,165504],{"class":147},[127,165666,893],{"class":154},[127,165668,12977],{"class":147},[127,165670,530],{"class":154},[127,165672,12977],{"class":147},[127,165674,749],{"class":154},[127,165676,5199],{"class":147},[127,165678,165679,165681,165683,165685,165687,165689,165691,165693,165695,165697],{"class":129,"line":151},[127,165680,155680],{"class":154},[127,165682,165504],{"class":147},[127,165684,893],{"class":154},[127,165686,12977],{"class":147},[127,165688,893],{"class":154},[127,165690,12977],{"class":147},[127,165692,530],{"class":154},[127,165694,12977],{"class":147},[127,165696,749],{"class":154},[127,165698,5199],{"class":147},[19,165700,165701],{},"成员判断：",[117,165703,165705],{"className":30918,"code":165704,"language":30920,"meta":122,"style":122},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[124,165706,165707,165724,165748],{"__ignoreMap":122},[127,165708,165709,165711,165713,165716,165719,165722],{"class":129,"line":130},[127,165710,30955],{"class":154},[127,165712,681],{"class":147},[127,165714,165715],{"class":781},"\"a\"",[127,165717,165718],{"class":290}," in",[127,165720,165721],{"class":781}," \"abc\"",[127,165723,687],{"class":147},[127,165725,165726,165728,165730,165732,165734,165736,165738,165740,165742,165744,165746],{"class":129,"line":137},[127,165727,30955],{"class":154},[127,165729,681],{"class":147},[127,165731,893],{"class":154},[127,165733,165718],{"class":290},[127,165735,52761],{"class":147},[127,165737,893],{"class":154},[127,165739,12977],{"class":147},[127,165741,530],{"class":154},[127,165743,12977],{"class":147},[127,165745,749],{"class":154},[127,165747,5199],{"class":147},[127,165749,165750,165752,165754,165756,165758,165760,165762,165764,165766],{"class":129,"line":151},[127,165751,30955],{"class":154},[127,165753,681],{"class":147},[127,165755,63212],{"class":781},[127,165757,165718],{"class":290},[127,165759,4990],{"class":147},[127,165761,63212],{"class":781},[127,165763,158],{"class":147},[127,165765,150278],{"class":781},[127,165767,165542],{"class":147},[14,165769,165771],{"id":165770},"_614-推导式","6.14 推导式",[19,165773,165774],{},"推导式用于快速生成容器。",[19,165776,165777],{},"列表推导式：",[117,165779,165781],{"className":30918,"code":165780,"language":30920,"meta":122,"style":122},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[124,165782,165783,165810],{"__ignoreMap":122},[127,165784,165785,165787,165789,165792,165794,165796,165798,165800,165802,165804,165806,165808],{"class":129,"line":130},[127,165786,164490],{"class":147},[127,165788,725],{"class":290},[127,165790,165791],{"class":147}," [i ",[127,165793,3567],{"class":290},[127,165795,9980],{"class":147},[127,165797,26584],{"class":290},[127,165799,32983],{"class":154},[127,165801,681],{"class":147},[127,165803,893],{"class":154},[127,165805,12977],{"class":147},[127,165807,1019],{"class":154},[127,165809,97829],{"class":147},[127,165811,165812,165814],{"class":129,"line":137},[127,165813,30955],{"class":154},[127,165815,164706],{"class":147},[19,165817,165818],{},"带条件：",[117,165820,165822],{"className":30918,"code":165821,"language":30920,"meta":122,"style":122},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[124,165823,165824,165865],{"__ignoreMap":122},[127,165825,165826,165829,165831,165833,165835,165837,165839,165841,165843,165845,165847,165849,165851,165853,165855,165857,165859,165861,165863],{"class":129,"line":130},[127,165827,165828],{"class":147},"even_nums ",[127,165830,725],{"class":290},[127,165832,165791],{"class":147},[127,165834,3567],{"class":290},[127,165836,9980],{"class":147},[127,165838,26584],{"class":290},[127,165840,32983],{"class":154},[127,165842,681],{"class":147},[127,165844,893],{"class":154},[127,165846,12977],{"class":147},[127,165848,1012],{"class":154},[127,165850,14256],{"class":147},[127,165852,2075],{"class":290},[127,165854,9980],{"class":147},[127,165856,1003],{"class":290},[127,165858,15297],{"class":154},[127,165860,102088],{"class":290},[127,165862,4635],{"class":154},[127,165864,33786],{"class":147},[127,165866,165867,165869],{"class":129,"line":137},[127,165868,30955],{"class":154},[127,165870,165871],{"class":147},"(even_nums)\n",[19,165873,165874],{},"字典推导式：",[117,165876,165878],{"className":30918,"code":165877,"language":30920,"meta":122,"style":122},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[124,165879,165880,165914],{"__ignoreMap":122},[127,165881,165882,165885,165887,165890,165892,165894,165897,165899,165901,165903,165905,165907,165909,165911],{"class":129,"line":130},[127,165883,165884],{"class":147},"squares ",[127,165886,725],{"class":290},[127,165888,165889],{"class":147}," {i: i ",[127,165891,11203],{"class":290},[127,165893,15297],{"class":154},[127,165895,165896],{"class":290}," for",[127,165898,9980],{"class":147},[127,165900,26584],{"class":290},[127,165902,32983],{"class":154},[127,165904,681],{"class":147},[127,165906,893],{"class":154},[127,165908,12977],{"class":147},[127,165910,1019],{"class":154},[127,165912,165913],{"class":147},")}\n",[127,165915,165916,165918],{"class":129,"line":137},[127,165917,30955],{"class":154},[127,165919,165920],{"class":147},"(squares)\n",[19,165922,165923],{},"集合推导式：",[117,165925,165927],{"className":30918,"code":165926,"language":30920,"meta":122,"style":122},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[124,165928,165929,165950],{"__ignoreMap":122},[127,165930,165931,165934,165936,165939,165941,165943,165945,165948],{"class":129,"line":130},[127,165932,165933],{"class":147},"chars ",[127,165935,725],{"class":290},[127,165937,165938],{"class":147}," {ch ",[127,165940,3567],{"class":290},[127,165942,160082],{"class":147},[127,165944,26584],{"class":290},[127,165946,165947],{"class":781}," \"hello\"",[127,165949,170],{"class":147},[127,165951,165952,165954],{"class":129,"line":137},[127,165953,30955],{"class":154},[127,165955,165956],{"class":147},"(chars)\n",[19,165958,165959],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165961,165963],{"id":165962},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[117,165965,165967],{"className":30918,"code":165966,"language":30920,"meta":122,"style":122},"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",[124,165968,165969,165977,165997,166017,166037,166057,166061,166065,166073,166087,166096,166100,166110,166122,166126,166146,166155,166159,166175,166180,166184,166198,166202,166224,166260],{"__ignoreMap":122},[127,165970,165971,165973,165975],{"class":129,"line":130},[127,165972,160106],{"class":147},[127,165974,725],{"class":290},[127,165976,55981],{"class":147},[127,165978,165979,165981,165983,165985,165987,165989,165991,165993,165995],{"class":129,"line":137},[127,165980,148775],{"class":147},[127,165982,63212],{"class":781},[127,165984,158],{"class":147},[127,165986,150278],{"class":781},[127,165988,12977],{"class":147},[127,165990,151862],{"class":781},[127,165992,158],{"class":147},[127,165994,1663],{"class":154},[127,165996,5472],{"class":147},[127,165998,165999,166001,166003,166005,166007,166009,166011,166013,166015],{"class":129,"line":151},[127,166000,148775],{"class":147},[127,166002,63212],{"class":781},[127,166004,158],{"class":147},[127,166006,151326],{"class":781},[127,166008,12977],{"class":147},[127,166010,151862],{"class":781},[127,166012,158],{"class":147},[127,166014,1485],{"class":154},[127,166016,5472],{"class":147},[127,166018,166019,166021,166023,166025,166027,166029,166031,166033,166035],{"class":129,"line":167},[127,166020,148775],{"class":147},[127,166022,63212],{"class":781},[127,166024,158],{"class":147},[127,166026,160121],{"class":781},[127,166028,12977],{"class":147},[127,166030,151862],{"class":781},[127,166032,158],{"class":147},[127,166034,1081],{"class":154},[127,166036,5472],{"class":147},[127,166038,166039,166041,166043,166045,166047,166049,166051,166053,166055],{"class":129,"line":415},[127,166040,148775],{"class":147},[127,166042,63212],{"class":781},[127,166044,158],{"class":147},[127,166046,163700],{"class":781},[127,166048,12977],{"class":147},[127,166050,151862],{"class":781},[127,166052,158],{"class":147},[127,166054,1556],{"class":154},[127,166056,5472],{"class":147},[127,166058,166059],{"class":129,"line":421},[127,166060,33786],{"class":147},[127,166062,166063],{"class":129,"line":1766},[127,166064,2942],{"emptyLinePlaceholder":606},[127,166066,166067,166069,166071],{"class":129,"line":1856},[127,166068,157650],{"class":147},[127,166070,725],{"class":290},[127,166072,47873],{"class":154},[127,166074,166075,166078,166080,166083,166085],{"class":129,"line":1862},[127,166076,166077],{"class":147},"max_student ",[127,166079,725],{"class":290},[127,166081,166082],{"class":147}," students[",[127,166084,867],{"class":154},[127,166086,33786],{"class":147},[127,166088,166089,166092,166094],{"class":129,"line":1874},[127,166090,166091],{"class":147},"passed ",[127,166093,725],{"class":290},[127,166095,52373],{"class":147},[127,166097,166098],{"class":129,"line":2155},[127,166099,2942],{"emptyLinePlaceholder":606},[127,166101,166102,166104,166106,166108],{"class":129,"line":2160},[127,166103,3567],{"class":290},[127,166105,152527],{"class":147},[127,166107,26584],{"class":290},[127,166109,152532],{"class":147},[127,166111,166112,166114,166116,166118,166120],{"class":129,"line":2166},[127,166113,159697],{"class":147},[127,166115,10019],{"class":290},[127,166117,152539],{"class":147},[127,166119,151862],{"class":781},[127,166121,33786],{"class":147},[127,166123,166124],{"class":129,"line":2171},[127,166125,2942],{"emptyLinePlaceholder":606},[127,166127,166128,166130,166132,166134,166136,166138,166141,166143],{"class":129,"line":2185},[127,166129,3643],{"class":290},[127,166131,152539],{"class":147},[127,166133,151862],{"class":781},[127,166135,4985],{"class":147},[127,166137,1634],{"class":290},[127,166139,166140],{"class":147}," max_student[",[127,166142,151862],{"class":781},[127,166144,166145],{"class":147},"]:\n",[127,166147,166148,166151,166153],{"class":129,"line":2190},[127,166149,166150],{"class":147},"        max_student ",[127,166152,725],{"class":290},[127,166154,152555],{"class":147},[127,166156,166157],{"class":129,"line":2196},[127,166158,2942],{"emptyLinePlaceholder":606},[127,166160,166161,166163,166165,166167,166169,166171,166173],{"class":129,"line":2217},[127,166162,3643],{"class":290},[127,166164,152539],{"class":147},[127,166166,151862],{"class":781},[127,166168,4985],{"class":147},[127,166170,2253],{"class":290},[127,166172,158227],{"class":154},[127,166174,4281],{"class":147},[127,166176,166177],{"class":129,"line":2222},[127,166178,166179],{"class":147},"        passed.append(student)\n",[127,166181,166182],{"class":129,"line":2236},[127,166183,2942],{"emptyLinePlaceholder":606},[127,166185,166186,166188,166190,166192,166194,166196],{"class":129,"line":2241},[127,166187,164164],{"class":147},[127,166189,725],{"class":290},[127,166191,164169],{"class":147},[127,166193,1259],{"class":290},[127,166195,7873],{"class":154},[127,166197,165385],{"class":147},[127,166199,166200],{"class":129,"line":2270},[127,166201,2942],{"emptyLinePlaceholder":606},[127,166203,166204,166206,166208,166210,166212,166214,166216,166218,166220,166222],{"class":129,"line":2275},[127,166205,30955],{"class":154},[127,166207,681],{"class":147},[127,166209,731],{"class":290},[127,166211,164187],{"class":781},[127,166213,1570],{"class":154},[127,166215,164192],{"class":147},[127,166217,157549],{"class":290},[127,166219,1620],{"class":154},[127,166221,926],{"class":781},[127,166223,687],{"class":147},[127,166225,166226,166228,166230,166232,166235,166237,166240,166242,166244,166246,166248,166250,166252,166254,166256,166258],{"class":129,"line":2292},[127,166227,30955],{"class":154},[127,166229,681],{"class":147},[127,166231,731],{"class":290},[127,166233,166234],{"class":781},"\"最高分学生:",[127,166236,1570],{"class":154},[127,166238,166239],{"class":147},"max_student[",[127,166241,153272],{"class":781},[127,166243,1614],{"class":147},[127,166245,1620],{"class":154},[127,166247,4990],{"class":154},[127,166249,166239],{"class":147},[127,166251,153310],{"class":781},[127,166253,1614],{"class":147},[127,166255,1620],{"class":154},[127,166257,926],{"class":781},[127,166259,687],{"class":147},[127,166261,166262,166264,166266,166268,166271,166274,166277,166279,166281],{"class":129,"line":2297},[127,166263,30955],{"class":154},[127,166265,681],{"class":147},[127,166267,731],{"class":290},[127,166269,166270],{"class":781},"\"及格人数:",[127,166272,166273],{"class":154},"{len",[127,166275,166276],{"class":147},"(passed)",[127,166278,1620],{"class":154},[127,166280,926],{"class":781},[127,166282,687],{"class":147},[14,166284,166286],{"id":166285},"_616-易错点","6.16 易错点",[632,166288,166289,166292,166295,166298,166304,166313],{},[635,166290,166291],{},"列表可变，元组和字符串不可变。",[635,166293,166294],{},"切片结束位置不包含。",[635,166296,166297],{},"字典通过 key 取值，不是通过索引。",[635,166299,166300,166301,28925],{},"空集合要用 ",[124,166302,166303],{},"set()",[635,166305,104895,166306,166309,166310,28925],{},[124,166307,166308],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[124,166311,166312],{},"get()",[635,166314,166315],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166317,166319],{"id":166318},"_617-本章练习","6.17 本章练习",[632,166321,166322,166325,166328,166331,166334],{},[635,166323,166324],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[635,166326,166327],{},"输入一句话，统计每个字符出现次数。",[635,166329,166330],{},"使用集合去除列表中的重复元素。",[635,166332,166333],{},"使用字典保存一个学生的信息，并实现修改成绩。",[635,166335,166336],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[575,166338,166339],{},"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":122,"searchDepth":137,"depth":137,"links":166341},[166342,166343,166344,166345,166346,166347,166348,166349,166350,166351,166352,166353,166354,166355,166356,166357,166358],{"id":163322,"depth":137,"text":163323},{"id":163439,"depth":137,"text":163440},{"id":163529,"depth":137,"text":163530},{"id":163653,"depth":137,"text":163654},{"id":164016,"depth":137,"text":164017},{"id":164203,"depth":137,"text":164204},{"id":164322,"depth":137,"text":164323},{"id":164464,"depth":137,"text":164465},{"id":164651,"depth":137,"text":164652},{"id":164895,"depth":137,"text":164896},{"id":165105,"depth":137,"text":165106},{"id":165190,"depth":137,"text":165191},{"id":165488,"depth":137,"text":165489},{"id":165770,"depth":137,"text":165771},{"id":165962,"depth":137,"text":165963},{"id":166285,"depth":137,"text":166286},{"id":166318,"depth":137,"text":166319},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163314,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166365,"title":166366,"body":166367,"description":603,"extension":604,"meta":168539,"navigation":606,"path":168540,"seo":168541,"stem":168542,"__hash__":168543},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166368,"toc":168514},[166369,166372,166376,166379,166459,166462,166483,166486,166490,166493,166555,166558,166575,166579,166582,166627,166629,166637,166641,166644,166726,166729,166732,166757,166760,166783,166787,166790,166792,166854,166857,166859,166910,166914,166918,166924,167029,167033,167039,167110,167114,167117,167185,167188,167268,167272,167278,167314,167317,167320,167430,167436,167440,167443,167515,167518,167522,167526,167531,167593,167597,167602,167670,167674,167679,167795,167799,167802,167882,167885,167889,167892,167996,167998,168013,168016,168020,168158,168166,168170,168172,168183,168185,168443,168447,168479,168483,168511],[10,166370,166366],{"id":166371},"_7-函数进阶",[14,166373,166375],{"id":166374},"_71-多返回值","7.1 多返回值",[19,166377,166378],{},"Python 函数可以返回多个值，本质上返回的是元组。",[117,166380,166382],{"className":30918,"code":166381,"language":30920,"meta":122,"style":122},"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",[124,166383,166384,166393,166401,166409,166418,166425,166429,166433,166442,166448],{"__ignoreMap":122},[127,166385,166386,166388,166391],{"class":129,"line":130},[127,166387,32487],{"class":290},[127,166389,166390],{"class":143}," get_info",[127,166392,32493],{"class":147},[127,166394,166395,166397,166399],{"class":129,"line":137},[127,166396,152760],{"class":147},[127,166398,725],{"class":290},[127,166400,149743],{"class":781},[127,166402,166403,166405,166407],{"class":129,"line":151},[127,166404,152776],{"class":147},[127,166406,725],{"class":290},[127,166408,146941],{"class":154},[127,166410,166411,166413,166415],{"class":129,"line":167},[127,166412,152791],{"class":147},[127,166414,725],{"class":290},[127,166416,166417],{"class":154}," 95\n",[127,166419,166420,166422],{"class":129,"line":415},[127,166421,4632],{"class":290},[127,166423,166424],{"class":147}," name, age, score\n",[127,166426,166427],{"class":129,"line":421},[127,166428,2942],{"emptyLinePlaceholder":606},[127,166430,166431],{"class":129,"line":1766},[127,166432,2942],{"emptyLinePlaceholder":606},[127,166434,166435,166437,166439],{"class":129,"line":1856},[127,166436,161696],{"class":147},[127,166438,725],{"class":290},[127,166440,166441],{"class":147}," get_info()\n",[127,166443,166444,166446],{"class":129,"line":1862},[127,166445,30955],{"class":154},[127,166447,77114],{"class":147},[127,166449,166450,166452,166454,166456],{"class":129,"line":1874},[127,166451,30955],{"class":154},[127,166453,681],{"class":147},[127,166455,103636],{"class":154},[127,166457,166458],{"class":147},"(result))\n",[19,166460,166461],{},"可以直接解包：",[117,166463,166465],{"className":30918,"code":166464,"language":30920,"meta":122,"style":122},"name, age, score = get_info()\nprint(name, age, score)\n",[124,166466,166467,166476],{"__ignoreMap":122},[127,166468,166469,166472,166474],{"class":129,"line":130},[127,166470,166471],{"class":147},"name, age, score ",[127,166473,725],{"class":290},[127,166475,166441],{"class":147},[127,166477,166478,166480],{"class":129,"line":137},[127,166479,30955],{"class":154},[127,166481,166482],{"class":147},"(name, age, score)\n",[19,166484,166485],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166487,166489],{"id":166488},"_72-位置参数","7.2 位置参数",[19,166491,166492],{},"位置参数按顺序传递。",[117,166494,166496],{"className":30918,"code":166495,"language":30920,"meta":122,"style":122},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[124,166497,166498,166506,166534,166538,166542],{"__ignoreMap":122},[127,166499,166500,166502,166504],{"class":129,"line":130},[127,166501,32487],{"class":290},[127,166503,149762],{"class":143},[127,166505,149765],{"class":147},[127,166507,166508,166510,166512,166514,166516,166518,166520,166522,166524,166526,166528,166530,166532],{"class":129,"line":137},[127,166509,31839],{"class":154},[127,166511,681],{"class":147},[127,166513,731],{"class":290},[127,166515,149776],{"class":781},[127,166517,1570],{"class":154},[127,166519,80339],{"class":147},[127,166521,1620],{"class":154},[127,166523,149785],{"class":781},[127,166525,1570],{"class":154},[127,166527,70754],{"class":147},[127,166529,1620],{"class":154},[127,166531,149794],{"class":781},[127,166533,687],{"class":147},[127,166535,166536],{"class":129,"line":151},[127,166537,2942],{"emptyLinePlaceholder":606},[127,166539,166540],{"class":129,"line":167},[127,166541,2942],{"emptyLinePlaceholder":606},[127,166543,166544,166547,166549,166551,166553],{"class":129,"line":415},[127,166545,166546],{"class":147},"introduce(",[127,166548,150278],{"class":781},[127,166550,12977],{"class":147},[127,166552,1324],{"class":154},[127,166554,687],{"class":147},[19,166556,166557],{},"顺序错了就会得到错误含义：",[117,166559,166561],{"className":30918,"code":166560,"language":30920,"meta":122,"style":122},"introduce(18, \"小明\")\n",[124,166562,166563],{"__ignoreMap":122},[127,166564,166565,166567,166569,166571,166573],{"class":129,"line":130},[127,166566,166546],{"class":147},[127,166568,1324],{"class":154},[127,166570,12977],{"class":147},[127,166572,150278],{"class":781},[127,166574,687],{"class":147},[14,166576,166578],{"id":166577},"_73-关键字参数","7.3 关键字参数",[19,166580,166581],{},"关键字参数按参数名传递。",[117,166583,166585],{"className":30918,"code":166584,"language":30920,"meta":122,"style":122},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[124,166586,166587,166607],{"__ignoreMap":122},[127,166588,166589,166591,166593,166595,166597,166599,166601,166603,166605],{"class":129,"line":130},[127,166590,166546],{"class":147},[127,166592,80339],{"class":5758},[127,166594,725],{"class":290},[127,166596,150278],{"class":781},[127,166598,12977],{"class":147},[127,166600,70754],{"class":5758},[127,166602,725],{"class":290},[127,166604,1324],{"class":154},[127,166606,687],{"class":147},[127,166608,166609,166611,166613,166615,166617,166619,166621,166623,166625],{"class":129,"line":137},[127,166610,166546],{"class":147},[127,166612,70754],{"class":5758},[127,166614,725],{"class":290},[127,166616,1324],{"class":154},[127,166618,12977],{"class":147},[127,166620,80339],{"class":5758},[127,166622,725],{"class":290},[127,166624,150278],{"class":781},[127,166626,687],{"class":147},[19,166628,118463],{},[632,166630,166631,166634],{},[635,166632,166633],{},"顺序不容易错。",[635,166635,166636],{},"调用时可读性更强。",[14,166638,166640],{"id":166639},"_74-默认参数","7.4 默认参数",[19,166642,166643],{},"默认参数给参数设置默认值。",[117,166645,166647],{"className":30918,"code":166646,"language":30920,"meta":122,"style":122},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[124,166648,166649,166665,166695,166699,166703,166713],{"__ignoreMap":122},[127,166650,166651,166653,166655,166658,166660,166663],{"class":129,"line":130},[127,166652,32487],{"class":290},[127,166654,122622],{"class":143},[127,166656,166657],{"class":147},"(host, port",[127,166659,725],{"class":290},[127,166661,166662],{"class":154},"3306",[127,166664,31326],{"class":147},[127,166666,166667,166669,166671,166673,166676,166678,166680,166682,166684,166686,166689,166691,166693],{"class":129,"line":137},[127,166668,31839],{"class":154},[127,166670,681],{"class":147},[127,166672,731],{"class":290},[127,166674,166675],{"class":781},"\"连接",[127,166677,1570],{"class":154},[127,166679,27935],{"class":147},[127,166681,1620],{"class":154},[127,166683,1533],{"class":781},[127,166685,1570],{"class":154},[127,166687,166688],{"class":147},"port",[127,166690,1620],{"class":154},[127,166692,926],{"class":781},[127,166694,687],{"class":147},[127,166696,166697],{"class":129,"line":151},[127,166698,2942],{"emptyLinePlaceholder":606},[127,166700,166701],{"class":129,"line":167},[127,166702,2942],{"emptyLinePlaceholder":606},[127,166704,166705,166708,166711],{"class":129,"line":415},[127,166706,166707],{"class":147},"connect(",[127,166709,166710],{"class":781},"\"localhost\"",[127,166712,687],{"class":147},[127,166714,166715,166717,166719,166721,166724],{"class":129,"line":421},[127,166716,166707],{"class":147},[127,166718,166710],{"class":781},[127,166720,12977],{"class":147},[127,166722,166723],{"class":154},"6379",[127,166725,687],{"class":147},[19,166727,166728],{},"注意：默认参数必须放在非默认参数后面。",[19,166730,166731],{},"错误：",[117,166733,166735],{"className":30918,"code":166734,"language":30920,"meta":122,"style":122},"def connect(port=3306, host):\n    pass\n",[124,166736,166737,166753],{"__ignoreMap":122},[127,166738,166739,166741,166743,166746,166748,166750],{"class":129,"line":130},[127,166740,32487],{"class":290},[127,166742,122622],{"class":143},[127,166744,166745],{"class":147},"(port",[127,166747,725],{"class":290},[127,166749,166662],{"class":154},[127,166751,166752],{"class":147},", host):\n",[127,166754,166755],{"class":129,"line":137},[127,166756,149927],{"class":290},[19,166758,166759],{},"正确：",[117,166761,166763],{"className":30918,"code":166762,"language":30920,"meta":122,"style":122},"def connect(host, port=3306):\n    pass\n",[124,166764,166765,166779],{"__ignoreMap":122},[127,166766,166767,166769,166771,166773,166775,166777],{"class":129,"line":130},[127,166768,32487],{"class":290},[127,166770,122622],{"class":143},[127,166772,166657],{"class":147},[127,166774,725],{"class":290},[127,166776,166662],{"class":154},[127,166778,31326],{"class":147},[127,166780,166781],{"class":129,"line":137},[127,166782,149927],{"class":290},[14,166784,166786],{"id":166785},"_75-默认参数的坑","7.5 默认参数的坑",[19,166788,166789],{},"不要使用可变对象作为默认参数。",[19,166791,158013],{},[117,166793,166795],{"className":30918,"code":166794,"language":30920,"meta":122,"style":122},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[124,166796,166797,166812,166817,166824,166828,166832,166843],{"__ignoreMap":122},[127,166798,166799,166801,166804,166807,166809],{"class":129,"line":130},[127,166800,32487],{"class":290},[127,166802,166803],{"class":143}," add_item",[127,166805,166806],{"class":147},"(item, items",[127,166808,725],{"class":290},[127,166810,166811],{"class":147},"[]):\n",[127,166813,166814],{"class":129,"line":137},[127,166815,166816],{"class":147},"    items.append(item)\n",[127,166818,166819,166821],{"class":129,"line":151},[127,166820,4632],{"class":290},[127,166822,166823],{"class":147}," items\n",[127,166825,166826],{"class":129,"line":167},[127,166827,2942],{"emptyLinePlaceholder":606},[127,166829,166830],{"class":129,"line":415},[127,166831,2942],{"emptyLinePlaceholder":606},[127,166833,166834,166836,166839,166841],{"class":129,"line":421},[127,166835,30955],{"class":154},[127,166837,166838],{"class":147},"(add_item(",[127,166840,165715],{"class":781},[127,166842,31037],{"class":147},[127,166844,166845,166847,166849,166852],{"class":129,"line":1766},[127,166846,30955],{"class":154},[127,166848,166838],{"class":147},[127,166850,166851],{"class":781},"\"b\"",[127,166853,31037],{"class":147},[19,166855,166856],{},"第二次调用会复用第一次的列表。",[19,166858,156278],{},[117,166860,166862],{"className":30918,"code":166861,"language":30920,"meta":122,"style":122},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[124,166863,166864,166878,166891,166900,166904],{"__ignoreMap":122},[127,166865,166866,166868,166870,166872,166874,166876],{"class":129,"line":130},[127,166867,32487],{"class":290},[127,166869,166803],{"class":143},[127,166871,166806],{"class":147},[127,166873,725],{"class":290},[127,166875,96215],{"class":154},[127,166877,31326],{"class":147},[127,166879,166880,166882,166885,166887,166889],{"class":129,"line":137},[127,166881,3643],{"class":290},[127,166883,166884],{"class":147}," items ",[127,166886,39467],{"class":290},[127,166888,39473],{"class":154},[127,166890,4281],{"class":147},[127,166892,166893,166896,166898],{"class":129,"line":151},[127,166894,166895],{"class":147},"        items ",[127,166897,725],{"class":290},[127,166899,52373],{"class":147},[127,166901,166902],{"class":129,"line":167},[127,166903,166816],{"class":147},[127,166905,166906,166908],{"class":129,"line":415},[127,166907,4632],{"class":290},[127,166909,166823],{"class":147},[14,166911,166913],{"id":166912},"_76-不定长参数","7.6 不定长参数",[62,166915,166917],{"id":166916},"_761-args","7.6.1 *args",[19,166919,166920,166923],{},[124,166921,166922],{},"*args"," 接收任意数量的位置参数，得到元组。",[117,166925,166927],{"className":30918,"code":166926,"language":30920,"meta":122,"style":122},"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",[124,166928,166929,166942,166950,166961,166970,166976,166980,166984,167003],{"__ignoreMap":122},[127,166930,166931,166933,166935,166937,166939],{"class":129,"line":130},[127,166932,32487],{"class":290},[127,166934,5751],{"class":143},[127,166936,681],{"class":147},[127,166938,1130],{"class":290},[127,166940,166941],{"class":147},"args):\n",[127,166943,166944,166946,166948],{"class":129,"line":137},[127,166945,159697],{"class":147},[127,166947,725],{"class":290},[127,166949,47873],{"class":154},[127,166951,166952,166954,166956,166958],{"class":129,"line":151},[127,166953,3743],{"class":290},[127,166955,156570],{"class":147},[127,166957,26584],{"class":290},[127,166959,166960],{"class":147}," args:\n",[127,166962,166963,166965,166967],{"class":129,"line":167},[127,166964,160372],{"class":147},[127,166966,10019],{"class":290},[127,166968,166969],{"class":147}," num\n",[127,166971,166972,166974],{"class":129,"line":415},[127,166973,4632],{"class":290},[127,166975,162677],{"class":147},[127,166977,166978],{"class":129,"line":421},[127,166979,2942],{"emptyLinePlaceholder":606},[127,166981,166982],{"class":129,"line":1766},[127,166983,2942],{"emptyLinePlaceholder":606},[127,166985,166986,166988,166991,166993,166995,166997,166999,167001],{"class":129,"line":1856},[127,166987,30955],{"class":154},[127,166989,166990],{"class":147},"(add(",[127,166992,893],{"class":154},[127,166994,12977],{"class":147},[127,166996,530],{"class":154},[127,166998,12977],{"class":147},[127,167000,749],{"class":154},[127,167002,31037],{"class":147},[127,167004,167005,167007,167009,167011,167013,167015,167017,167019,167021,167023,167025,167027],{"class":129,"line":1862},[127,167006,30955],{"class":154},[127,167008,166990],{"class":147},[127,167010,893],{"class":154},[127,167012,12977],{"class":147},[127,167014,530],{"class":154},[127,167016,12977],{"class":147},[127,167018,749],{"class":154},[127,167020,12977],{"class":147},[127,167022,968],{"class":154},[127,167024,12977],{"class":147},[127,167026,994],{"class":154},[127,167028,31037],{"class":147},[62,167030,167032],{"id":167031},"_762-kwargs","7.6.2 **kwargs",[19,167034,167035,167038],{},[124,167036,167037],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[117,167040,167042],{"className":30918,"code":167041,"language":30920,"meta":122,"style":122},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[124,167043,167044,167057,167068,167074,167078,167082],{"__ignoreMap":122},[127,167045,167046,167048,167050,167052,167054],{"class":129,"line":130},[127,167047,32487],{"class":290},[127,167049,162335],{"class":143},[127,167051,681],{"class":147},[127,167053,11203],{"class":290},[127,167055,167056],{"class":147},"kwargs):\n",[127,167058,167059,167061,167063,167065],{"class":129,"line":137},[127,167060,3743],{"class":290},[127,167062,165175],{"class":147},[127,167064,26584],{"class":290},[127,167066,167067],{"class":147}," kwargs.items():\n",[127,167069,167070,167072],{"class":129,"line":151},[127,167071,32991],{"class":154},[127,167073,165187],{"class":147},[127,167075,167076],{"class":129,"line":167},[127,167077,2942],{"emptyLinePlaceholder":606},[127,167079,167080],{"class":129,"line":415},[127,167081,2942],{"emptyLinePlaceholder":606},[127,167083,167084,167086,167088,167090,167092,167094,167096,167098,167100,167102,167104,167106,167108],{"class":129,"line":421},[127,167085,162400],{"class":147},[127,167087,80339],{"class":5758},[127,167089,725],{"class":290},[127,167091,150278],{"class":781},[127,167093,12977],{"class":147},[127,167095,70754],{"class":5758},[127,167097,725],{"class":290},[127,167099,1324],{"class":154},[127,167101,12977],{"class":147},[127,167103,70805],{"class":5758},[127,167105,725],{"class":290},[127,167107,69802],{"class":781},[127,167109,687],{"class":147},[14,167111,167113],{"id":167112},"_77-参数解包","7.7 参数解包",[19,167115,167116],{},"列表或元组解包为位置参数：",[117,167118,167120],{"className":30918,"code":167119,"language":30920,"meta":122,"style":122},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[124,167121,167122,167131,167146,167150,167154,167174],{"__ignoreMap":122},[127,167123,167124,167126,167128],{"class":129,"line":130},[127,167125,32487],{"class":290},[127,167127,5751],{"class":143},[127,167129,167130],{"class":147},"(a, b, c):\n",[127,167132,167133,167135,167137,167139,167141,167143],{"class":129,"line":137},[127,167134,4632],{"class":290},[127,167136,11411],{"class":147},[127,167138,1156],{"class":290},[127,167140,11424],{"class":147},[127,167142,1156],{"class":290},[127,167144,167145],{"class":147}," c\n",[127,167147,167148],{"class":129,"line":151},[127,167149,2942],{"emptyLinePlaceholder":606},[127,167151,167152],{"class":129,"line":167},[127,167153,2942],{"emptyLinePlaceholder":606},[127,167155,167156,167158,167160,167162,167164,167166,167168,167170,167172],{"class":129,"line":415},[127,167157,164490],{"class":147},[127,167159,725],{"class":290},[127,167161,52761],{"class":147},[127,167163,893],{"class":154},[127,167165,12977],{"class":147},[127,167167,530],{"class":154},[127,167169,12977],{"class":147},[127,167171,749],{"class":154},[127,167173,33786],{"class":147},[127,167175,167176,167178,167180,167182],{"class":129,"line":421},[127,167177,30955],{"class":154},[127,167179,166990],{"class":147},[127,167181,1130],{"class":290},[127,167183,167184],{"class":147},"nums))\n",[19,167186,167187],{},"字典解包为关键字参数：",[117,167189,167191],{"className":30918,"code":167190,"language":30920,"meta":122,"style":122},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[124,167192,167193,167201,167227,167231,167235,167259],{"__ignoreMap":122},[127,167194,167195,167197,167199],{"class":129,"line":130},[127,167196,32487],{"class":290},[127,167198,149762],{"class":143},[127,167200,149765],{"class":147},[127,167202,167203,167205,167207,167209,167211,167213,167215,167217,167219,167221,167223,167225],{"class":129,"line":137},[127,167204,31839],{"class":154},[127,167206,681],{"class":147},[127,167208,731],{"class":290},[127,167210,926],{"class":781},[127,167212,1570],{"class":154},[127,167214,80339],{"class":147},[127,167216,1620],{"class":154},[127,167218,4990],{"class":154},[127,167220,70754],{"class":147},[127,167222,1620],{"class":154},[127,167224,926],{"class":781},[127,167226,687],{"class":147},[127,167228,167229],{"class":129,"line":151},[127,167230,2942],{"emptyLinePlaceholder":606},[127,167232,167233],{"class":129,"line":167},[127,167234,2942],{"emptyLinePlaceholder":606},[127,167236,167237,167239,167241,167243,167245,167247,167249,167251,167253,167255,167257],{"class":129,"line":415},[127,167238,116843],{"class":147},[127,167240,725],{"class":290},[127,167242,4990],{"class":147},[127,167244,63212],{"class":781},[127,167246,158],{"class":147},[127,167248,150278],{"class":781},[127,167250,12977],{"class":147},[127,167252,69657],{"class":781},[127,167254,158],{"class":147},[127,167256,1324],{"class":154},[127,167258,170],{"class":147},[127,167260,167261,167263,167265],{"class":129,"line":421},[127,167262,166546],{"class":147},[127,167264,11203],{"class":290},[127,167266,167267],{"class":147},"info)\n",[14,167269,167271],{"id":167270},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167273,167274,167277],{},[124,167275,167276],{},"lambda"," 用于定义简单匿名函数。",[117,167279,167281],{"className":30918,"code":167280,"language":30920,"meta":122,"style":122},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[124,167282,167283,167300],{"__ignoreMap":122},[127,167284,167285,167288,167290,167293,167296,167298],{"class":129,"line":130},[127,167286,167287],{"class":147},"add ",[127,167289,725],{"class":290},[127,167291,167292],{"class":290}," lambda",[127,167294,167295],{"class":147}," a, b: a ",[127,167297,1156],{"class":290},[127,167299,151494],{"class":147},[127,167301,167302,167304,167306,167308,167310,167312],{"class":129,"line":137},[127,167303,30955],{"class":154},[127,167305,166990],{"class":147},[127,167307,893],{"class":154},[127,167309,12977],{"class":147},[127,167311,530],{"class":154},[127,167313,31037],{"class":147},[19,167315,167316],{},"常和排序、过滤等函数一起使用。",[19,167318,167319],{},"按分数排序：",[117,167321,167323],{"className":30918,"code":167322,"language":30920,"meta":122,"style":122},"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",[124,167324,167325,167333,167353,167373,167393,167397,167401,167424],{"__ignoreMap":122},[127,167326,167327,167329,167331],{"class":129,"line":130},[127,167328,160106],{"class":147},[127,167330,725],{"class":290},[127,167332,55981],{"class":147},[127,167334,167335,167337,167339,167341,167343,167345,167347,167349,167351],{"class":129,"line":137},[127,167336,148775],{"class":147},[127,167338,63212],{"class":781},[127,167340,158],{"class":147},[127,167342,150278],{"class":781},[127,167344,12977],{"class":147},[127,167346,151862],{"class":781},[127,167348,158],{"class":147},[127,167350,1663],{"class":154},[127,167352,5472],{"class":147},[127,167354,167355,167357,167359,167361,167363,167365,167367,167369,167371],{"class":129,"line":151},[127,167356,148775],{"class":147},[127,167358,63212],{"class":781},[127,167360,158],{"class":147},[127,167362,151326],{"class":781},[127,167364,12977],{"class":147},[127,167366,151862],{"class":781},[127,167368,158],{"class":147},[127,167370,1485],{"class":154},[127,167372,5472],{"class":147},[127,167374,167375,167377,167379,167381,167383,167385,167387,167389,167391],{"class":129,"line":167},[127,167376,148775],{"class":147},[127,167378,63212],{"class":781},[127,167380,158],{"class":147},[127,167382,160121],{"class":781},[127,167384,12977],{"class":147},[127,167386,151862],{"class":781},[127,167388,158],{"class":147},[127,167390,1081],{"class":154},[127,167392,5472],{"class":147},[127,167394,167395],{"class":129,"line":415},[127,167396,33786],{"class":147},[127,167398,167399],{"class":129,"line":421},[127,167400,2942],{"emptyLinePlaceholder":606},[127,167402,167403,167406,167408,167410,167412,167414,167416,167418,167420,167422],{"class":129,"line":1766},[127,167404,167405],{"class":147},"students.sort(",[127,167407,154336],{"class":5758},[127,167409,154339],{"class":290},[127,167411,154342],{"class":147},[127,167413,151862],{"class":781},[127,167415,112731],{"class":147},[127,167417,163918],{"class":5758},[127,167419,725],{"class":290},[127,167421,32016],{"class":154},[127,167423,687],{"class":147},[127,167425,167426,167428],{"class":129,"line":1856},[127,167427,30955],{"class":154},[127,167429,165385],{"class":147},[19,167431,167432,167433,167435],{},"如果逻辑复杂，不要硬写 ",[124,167434,167276],{},"，定义普通函数更清晰。",[14,167437,167439],{"id":167438},"_79-函数作为参数","7.9 函数作为参数",[19,167441,167442],{},"函数可以作为参数传给另一个函数。",[117,167444,167446],{"className":30918,"code":167445,"language":30920,"meta":122,"style":122},"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",[124,167447,167448,167456,167466,167470,167474,167484,167491,167495,167499],{"__ignoreMap":122},[127,167449,167450,167452,167454],{"class":129,"line":130},[127,167451,32487],{"class":290},[127,167453,5751],{"class":143},[127,167455,151483],{"class":147},[127,167457,167458,167460,167462,167464],{"class":129,"line":137},[127,167459,4632],{"class":290},[127,167461,11411],{"class":147},[127,167463,1156],{"class":290},[127,167465,151494],{"class":147},[127,167467,167468],{"class":129,"line":151},[127,167469,2942],{"emptyLinePlaceholder":606},[127,167471,167472],{"class":129,"line":167},[127,167473,2942],{"emptyLinePlaceholder":606},[127,167475,167476,167478,167481],{"class":129,"line":415},[127,167477,32487],{"class":290},[127,167479,167480],{"class":143}," calculate",[127,167482,167483],{"class":147},"(a, b, func):\n",[127,167485,167486,167488],{"class":129,"line":421},[127,167487,4632],{"class":290},[127,167489,167490],{"class":147}," func(a, b)\n",[127,167492,167493],{"class":129,"line":1766},[127,167494,2942],{"emptyLinePlaceholder":606},[127,167496,167497],{"class":129,"line":1856},[127,167498,2942],{"emptyLinePlaceholder":606},[127,167500,167501,167503,167506,167508,167510,167512],{"class":129,"line":1862},[127,167502,30955],{"class":154},[127,167504,167505],{"class":147},"(calculate(",[127,167507,1121],{"class":154},[127,167509,12977],{"class":147},[127,167511,1374],{"class":154},[127,167513,167514],{"class":147},", add))\n",[19,167516,167517],{},"这种思想在排序、回调、框架中经常出现。",[14,167519,167521],{"id":167520},"_710-mapfiltersorted","7.10 map、filter、sorted",[62,167523,167525],{"id":167524},"_7101-map","7.10.1 map",[19,167527,167528,167530],{},[124,167529,74573],{}," 对每个元素执行函数。",[117,167532,167534],{"className":30918,"code":167533,"language":30920,"meta":122,"style":122},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[124,167535,167536,167560,167583],{"__ignoreMap":122},[127,167537,167538,167540,167542,167544,167546,167548,167550,167552,167554,167556,167558],{"class":129,"line":130},[127,167539,164490],{"class":147},[127,167541,725],{"class":290},[127,167543,52761],{"class":147},[127,167545,893],{"class":154},[127,167547,12977],{"class":147},[127,167549,530],{"class":154},[127,167551,12977],{"class":147},[127,167553,749],{"class":154},[127,167555,12977],{"class":147},[127,167557,968],{"class":154},[127,167559,33786],{"class":147},[127,167561,167562,167564,167566,167569,167571,167573,167576,167578,167580],{"class":129,"line":137},[127,167563,161696],{"class":147},[127,167565,725],{"class":290},[127,167567,167568],{"class":154}," map",[127,167570,681],{"class":147},[127,167572,167276],{"class":290},[127,167574,167575],{"class":147}," x: x ",[127,167577,1130],{"class":290},[127,167579,15297],{"class":154},[127,167581,167582],{"class":147},", nums)\n",[127,167584,167585,167587,167589,167591],{"class":129,"line":151},[127,167586,30955],{"class":154},[127,167588,681],{"class":147},[127,167590,154460],{"class":154},[127,167592,166458],{"class":147},[62,167594,167596],{"id":167595},"_7102-filter","7.10.2 filter",[19,167598,167599,167601],{},[124,167600,80580],{}," 保留满足条件的元素。",[117,167603,167605],{"className":30918,"code":167604,"language":30920,"meta":122,"style":122},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[124,167606,167607,167635,167660],{"__ignoreMap":122},[127,167608,167609,167611,167613,167615,167617,167619,167621,167623,167625,167627,167629,167631,167633],{"class":129,"line":130},[127,167610,164490],{"class":147},[127,167612,725],{"class":290},[127,167614,52761],{"class":147},[127,167616,893],{"class":154},[127,167618,12977],{"class":147},[127,167620,530],{"class":154},[127,167622,12977],{"class":147},[127,167624,749],{"class":154},[127,167626,12977],{"class":147},[127,167628,968],{"class":154},[127,167630,12977],{"class":147},[127,167632,994],{"class":154},[127,167634,33786],{"class":147},[127,167636,167637,167639,167641,167644,167646,167648,167650,167652,167654,167656,167658],{"class":129,"line":137},[127,167638,161696],{"class":147},[127,167640,725],{"class":290},[127,167642,167643],{"class":154}," filter",[127,167645,681],{"class":147},[127,167647,167276],{"class":290},[127,167649,167575],{"class":147},[127,167651,1003],{"class":290},[127,167653,15297],{"class":154},[127,167655,102088],{"class":290},[127,167657,4635],{"class":154},[127,167659,167582],{"class":147},[127,167661,167662,167664,167666,167668],{"class":129,"line":151},[127,167663,30955],{"class":154},[127,167665,681],{"class":147},[127,167667,154460],{"class":154},[127,167669,166458],{"class":147},[62,167671,167673],{"id":167672},"_7103-sorted","7.10.3 sorted",[19,167675,167676,167678],{},[124,167677,165626],{}," 返回排序后的新列表。",[117,167680,167682],{"className":30918,"code":167681,"language":30920,"meta":122,"style":122},"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",[124,167683,167684,167692,167712,167732,167752,167756,167760,167789],{"__ignoreMap":122},[127,167685,167686,167688,167690],{"class":129,"line":130},[127,167687,160106],{"class":147},[127,167689,725],{"class":290},[127,167691,55981],{"class":147},[127,167693,167694,167696,167698,167700,167702,167704,167706,167708,167710],{"class":129,"line":137},[127,167695,148775],{"class":147},[127,167697,63212],{"class":781},[127,167699,158],{"class":147},[127,167701,150278],{"class":781},[127,167703,12977],{"class":147},[127,167705,151862],{"class":781},[127,167707,158],{"class":147},[127,167709,1663],{"class":154},[127,167711,5472],{"class":147},[127,167713,167714,167716,167718,167720,167722,167724,167726,167728,167730],{"class":129,"line":151},[127,167715,148775],{"class":147},[127,167717,63212],{"class":781},[127,167719,158],{"class":147},[127,167721,151326],{"class":781},[127,167723,12977],{"class":147},[127,167725,151862],{"class":781},[127,167727,158],{"class":147},[127,167729,1485],{"class":154},[127,167731,5472],{"class":147},[127,167733,167734,167736,167738,167740,167742,167744,167746,167748,167750],{"class":129,"line":167},[127,167735,148775],{"class":147},[127,167737,63212],{"class":781},[127,167739,158],{"class":147},[127,167741,160121],{"class":781},[127,167743,12977],{"class":147},[127,167745,151862],{"class":781},[127,167747,158],{"class":147},[127,167749,1081],{"class":154},[127,167751,5472],{"class":147},[127,167753,167754],{"class":129,"line":415},[127,167755,33786],{"class":147},[127,167757,167758],{"class":129,"line":421},[127,167759,2942],{"emptyLinePlaceholder":606},[127,167761,167762,167764,167766,167768,167771,167773,167775,167777,167779,167781,167783,167785,167787],{"class":129,"line":1766},[127,167763,161696],{"class":147},[127,167765,725],{"class":290},[127,167767,163994],{"class":154},[127,167769,167770],{"class":147},"(students, ",[127,167772,154336],{"class":5758},[127,167774,154339],{"class":290},[127,167776,154342],{"class":147},[127,167778,151862],{"class":781},[127,167780,112731],{"class":147},[127,167782,163918],{"class":5758},[127,167784,725],{"class":290},[127,167786,32016],{"class":154},[127,167788,687],{"class":147},[127,167790,167791,167793],{"class":129,"line":1856},[127,167792,30955],{"class":154},[127,167794,77114],{"class":147},[14,167796,167798],{"id":167797},"_711-闭包入门","7.11 闭包入门",[19,167800,167801],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[117,167803,167805],{"className":30918,"code":167804,"language":30920,"meta":122,"style":122},"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",[124,167806,167807,167817,167827,167838,167842,167849,167853,167857,167871],{"__ignoreMap":122},[127,167808,167809,167811,167814],{"class":129,"line":130},[127,167810,32487],{"class":290},[127,167812,167813],{"class":143}," outer",[127,167815,167816],{"class":147},"(base):\n",[127,167818,167819,167821,167824],{"class":129,"line":137},[127,167820,31341],{"class":290},[127,167822,167823],{"class":143}," inner",[127,167825,167826],{"class":147},"(num):\n",[127,167828,167829,167831,167834,167836],{"class":129,"line":151},[127,167830,15294],{"class":290},[127,167832,167833],{"class":147}," base ",[127,167835,1156],{"class":290},[127,167837,166969],{"class":147},[127,167839,167840],{"class":129,"line":167},[127,167841,2942],{"emptyLinePlaceholder":606},[127,167843,167844,167846],{"class":129,"line":415},[127,167845,4632],{"class":290},[127,167847,167848],{"class":147}," inner\n",[127,167850,167851],{"class":129,"line":421},[127,167852,2942],{"emptyLinePlaceholder":606},[127,167854,167855],{"class":129,"line":1766},[127,167856,2942],{"emptyLinePlaceholder":606},[127,167858,167859,167862,167864,167867,167869],{"class":129,"line":1856},[127,167860,167861],{"class":147},"add_10 ",[127,167863,725],{"class":290},[127,167865,167866],{"class":147}," outer(",[127,167868,1121],{"class":154},[127,167870,687],{"class":147},[127,167872,167873,167875,167878,167880],{"class":129,"line":1862},[127,167874,30955],{"class":154},[127,167876,167877],{"class":147},"(add_10(",[127,167879,994],{"class":154},[127,167881,31037],{"class":147},[19,167883,167884],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167886,167888],{"id":167887},"_712-装饰器入门","7.12 装饰器入门",[19,167890,167891],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[117,167893,167895],{"className":30918,"code":167894,"language":30920,"meta":122,"style":122},"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",[124,167896,167897,167906,167915,167926,167931,167942,167946,167953,167957,167961,167966,167974,167984,167988,167992],{"__ignoreMap":122},[127,167898,167899,167901,167903],{"class":129,"line":130},[127,167900,32487],{"class":290},[127,167902,87720],{"class":143},[127,167904,167905],{"class":147},"(func):\n",[127,167907,167908,167910,167913],{"class":129,"line":137},[127,167909,31341],{"class":290},[127,167911,167912],{"class":143}," wrapper",[127,167914,32493],{"class":147},[127,167916,167917,167919,167921,167924],{"class":129,"line":151},[127,167918,32991],{"class":154},[127,167920,681],{"class":147},[127,167922,167923],{"class":781},"\"函数开始执行\"",[127,167925,687],{"class":147},[127,167927,167928],{"class":129,"line":167},[127,167929,167930],{"class":147},"        func()\n",[127,167932,167933,167935,167937,167940],{"class":129,"line":415},[127,167934,32991],{"class":154},[127,167936,681],{"class":147},[127,167938,167939],{"class":781},"\"函数执行结束\"",[127,167941,687],{"class":147},[127,167943,167944],{"class":129,"line":421},[127,167945,2942],{"emptyLinePlaceholder":606},[127,167947,167948,167950],{"class":129,"line":1766},[127,167949,4632],{"class":290},[127,167951,167952],{"class":147}," wrapper\n",[127,167954,167955],{"class":129,"line":1856},[127,167956,2942],{"emptyLinePlaceholder":606},[127,167958,167959],{"class":129,"line":1862},[127,167960,2942],{"emptyLinePlaceholder":606},[127,167962,167963],{"class":129,"line":1874},[127,167964,167965],{"class":143},"@log\n",[127,167967,167968,167970,167972],{"class":129,"line":2155},[127,167969,32487],{"class":290},[127,167971,161386],{"class":143},[127,167973,32493],{"class":147},[127,167975,167976,167978,167980,167982],{"class":129,"line":2160},[127,167977,31839],{"class":154},[127,167979,681],{"class":147},[127,167981,6386],{"class":781},[127,167983,687],{"class":147},[127,167985,167986],{"class":129,"line":2166},[127,167987,2942],{"emptyLinePlaceholder":606},[127,167989,167990],{"class":129,"line":2171},[127,167991,2942],{"emptyLinePlaceholder":606},[127,167993,167994],{"class":129,"line":2185},[127,167995,161421],{"class":147},[19,167997,158664],{},[117,167999,168001],{"className":30918,"code":168000,"language":30920,"meta":122,"style":122},"say_hello = log(say_hello)\n",[124,168002,168003],{"__ignoreMap":122},[127,168004,168005,168008,168010],{"class":129,"line":130},[127,168006,168007],{"class":147},"say_hello ",[127,168009,725],{"class":290},[127,168011,168012],{"class":147}," log(say_hello)\n",[19,168014,168015],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168017,168019],{"id":168018},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[117,168021,168023],{"className":30918,"code":168022,"language":30920,"meta":122,"style":122},"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",[124,168024,168025,168033,168050,168060,168079,168089,168096,168100,168106,168110,168114,168118,168126,168136,168140,168144],{"__ignoreMap":122},[127,168026,168027,168029,168031],{"class":129,"line":130},[127,168028,32487],{"class":290},[127,168030,87720],{"class":143},[127,168032,167905],{"class":147},[127,168034,168035,168037,168039,168041,168043,168046,168048],{"class":129,"line":137},[127,168036,31341],{"class":290},[127,168038,167912],{"class":143},[127,168040,681],{"class":147},[127,168042,1130],{"class":290},[127,168044,168045],{"class":147},"args, ",[127,168047,11203],{"class":290},[127,168049,167056],{"class":147},[127,168051,168052,168054,168056,168058],{"class":129,"line":151},[127,168053,32991],{"class":154},[127,168055,681],{"class":147},[127,168057,167923],{"class":781},[127,168059,687],{"class":147},[127,168061,168062,168065,168067,168070,168072,168074,168076],{"class":129,"line":167},[127,168063,168064],{"class":147},"        result ",[127,168066,725],{"class":290},[127,168068,168069],{"class":147}," func(",[127,168071,1130],{"class":290},[127,168073,168045],{"class":147},[127,168075,11203],{"class":290},[127,168077,168078],{"class":147},"kwargs)\n",[127,168080,168081,168083,168085,168087],{"class":129,"line":415},[127,168082,32991],{"class":154},[127,168084,681],{"class":147},[127,168086,167939],{"class":781},[127,168088,687],{"class":147},[127,168090,168091,168093],{"class":129,"line":421},[127,168092,15294],{"class":290},[127,168094,168095],{"class":147}," result\n",[127,168097,168098],{"class":129,"line":1766},[127,168099,2942],{"emptyLinePlaceholder":606},[127,168101,168102,168104],{"class":129,"line":1856},[127,168103,4632],{"class":290},[127,168105,167952],{"class":147},[127,168107,168108],{"class":129,"line":1862},[127,168109,2942],{"emptyLinePlaceholder":606},[127,168111,168112],{"class":129,"line":1874},[127,168113,2942],{"emptyLinePlaceholder":606},[127,168115,168116],{"class":129,"line":2155},[127,168117,167965],{"class":143},[127,168119,168120,168122,168124],{"class":129,"line":2160},[127,168121,32487],{"class":290},[127,168123,5751],{"class":143},[127,168125,151483],{"class":147},[127,168127,168128,168130,168132,168134],{"class":129,"line":2166},[127,168129,4632],{"class":290},[127,168131,11411],{"class":147},[127,168133,1156],{"class":290},[127,168135,151494],{"class":147},[127,168137,168138],{"class":129,"line":2171},[127,168139,2942],{"emptyLinePlaceholder":606},[127,168141,168142],{"class":129,"line":2185},[127,168143,2942],{"emptyLinePlaceholder":606},[127,168145,168146,168148,168150,168152,168154,168156],{"class":129,"line":2190},[127,168147,30955],{"class":154},[127,168149,166990],{"class":147},[127,168151,1121],{"class":154},[127,168153,12977],{"class":147},[127,168155,1374],{"class":154},[127,168157,31037],{"class":147},[19,168159,168160,168161,101547,168163,168165],{},"这个写法使用 ",[124,168162,166922],{},[124,168164,167037],{}," 接收原函数的所有参数。",[14,168167,168169],{"id":168168},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168171,123821],{},[632,168173,168174,168177,168180],{},[635,168175,168176],{},"给定一组学生数据。",[635,168178,168179],{},"封装函数，根据传入规则筛选学生。",[635,168181,168182],{},"筛选及格、优秀、未成年学生。",[19,168184,10577],{},[117,168186,168188],{"className":30918,"code":168187,"language":30920,"meta":122,"style":122},"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",[124,168189,168190,168198,168226,168254,168282,168286,168290,168294,168304,168312,168322,168329,168334,168340,168344,168348,168372,168395,168418,168422,168429,168436],{"__ignoreMap":122},[127,168191,168192,168194,168196],{"class":129,"line":130},[127,168193,160106],{"class":147},[127,168195,725],{"class":290},[127,168197,55981],{"class":147},[127,168199,168200,168202,168204,168206,168208,168210,168212,168214,168216,168218,168220,168222,168224],{"class":129,"line":137},[127,168201,148775],{"class":147},[127,168203,63212],{"class":781},[127,168205,158],{"class":147},[127,168207,150278],{"class":781},[127,168209,12977],{"class":147},[127,168211,69657],{"class":781},[127,168213,158],{"class":147},[127,168215,1324],{"class":154},[127,168217,12977],{"class":147},[127,168219,151862],{"class":781},[127,168221,158],{"class":147},[127,168223,1663],{"class":154},[127,168225,5472],{"class":147},[127,168227,168228,168230,168232,168234,168236,168238,168240,168242,168244,168246,168248,168250,168252],{"class":129,"line":151},[127,168229,148775],{"class":147},[127,168231,63212],{"class":781},[127,168233,158],{"class":147},[127,168235,151326],{"class":781},[127,168237,12977],{"class":147},[127,168239,69657],{"class":781},[127,168241,158],{"class":147},[127,168243,1299],{"class":154},[127,168245,12977],{"class":147},[127,168247,151862],{"class":781},[127,168249,158],{"class":147},[127,168251,1485],{"class":154},[127,168253,5472],{"class":147},[127,168255,168256,168258,168260,168262,168264,168266,168268,168270,168272,168274,168276,168278,168280],{"class":129,"line":167},[127,168257,148775],{"class":147},[127,168259,63212],{"class":781},[127,168261,158],{"class":147},[127,168263,160121],{"class":781},[127,168265,12977],{"class":147},[127,168267,69657],{"class":781},[127,168269,158],{"class":147},[127,168271,1349],{"class":154},[127,168273,12977],{"class":147},[127,168275,151862],{"class":781},[127,168277,158],{"class":147},[127,168279,1556],{"class":154},[127,168281,5472],{"class":147},[127,168283,168284],{"class":129,"line":415},[127,168285,33786],{"class":147},[127,168287,168288],{"class":129,"line":421},[127,168289,2942],{"emptyLinePlaceholder":606},[127,168291,168292],{"class":129,"line":1766},[127,168293,2942],{"emptyLinePlaceholder":606},[127,168295,168296,168298,168301],{"class":129,"line":1856},[127,168297,32487],{"class":290},[127,168299,168300],{"class":143}," filter_students",[127,168302,168303],{"class":147},"(students, condition):\n",[127,168305,168306,168308,168310],{"class":129,"line":1862},[127,168307,161613],{"class":147},[127,168309,725],{"class":290},[127,168311,52373],{"class":147},[127,168313,168314,168316,168318,168320],{"class":129,"line":1874},[127,168315,3743],{"class":290},[127,168317,152527],{"class":147},[127,168319,26584],{"class":290},[127,168321,152532],{"class":147},[127,168323,168324,168326],{"class":129,"line":2155},[127,168325,3039],{"class":290},[127,168327,168328],{"class":147}," condition(student):\n",[127,168330,168331],{"class":129,"line":2160},[127,168332,168333],{"class":147},"            result.append(student)\n",[127,168335,168336,168338],{"class":129,"line":2166},[127,168337,4632],{"class":290},[127,168339,168095],{"class":147},[127,168341,168342],{"class":129,"line":2171},[127,168343,2942],{"emptyLinePlaceholder":606},[127,168345,168346],{"class":129,"line":2185},[127,168347,2942],{"emptyLinePlaceholder":606},[127,168349,168350,168352,168354,168357,168359,168362,168364,168366,168368,168370],{"class":129,"line":2190},[127,168351,166091],{"class":147},[127,168353,725],{"class":290},[127,168355,168356],{"class":147}," filter_students(students, ",[127,168358,167276],{"class":290},[127,168360,168361],{"class":147}," s: s[",[127,168363,151862],{"class":781},[127,168365,4985],{"class":147},[127,168367,2253],{"class":290},[127,168369,158227],{"class":154},[127,168371,687],{"class":147},[127,168373,168374,168377,168379,168381,168383,168385,168387,168389,168391,168393],{"class":129,"line":2196},[127,168375,168376],{"class":147},"excellent ",[127,168378,725],{"class":290},[127,168380,168356],{"class":147},[127,168382,167276],{"class":290},[127,168384,168361],{"class":147},[127,168386,151862],{"class":781},[127,168388,4985],{"class":147},[127,168390,2253],{"class":290},[127,168392,158178],{"class":154},[127,168394,687],{"class":147},[127,168396,168397,168400,168402,168404,168406,168408,168410,168412,168414,168416],{"class":129,"line":2217},[127,168398,168399],{"class":147},"under_age ",[127,168401,725],{"class":290},[127,168403,168356],{"class":147},[127,168405,167276],{"class":290},[127,168407,168361],{"class":147},[127,168409,69657],{"class":781},[127,168411,4985],{"class":147},[127,168413,1584],{"class":290},[127,168415,156675],{"class":154},[127,168417,687],{"class":147},[127,168419,168420],{"class":129,"line":2222},[127,168421,2942],{"emptyLinePlaceholder":606},[127,168423,168424,168426],{"class":129,"line":2236},[127,168425,30955],{"class":154},[127,168427,168428],{"class":147},"(passed)\n",[127,168430,168431,168433],{"class":129,"line":2241},[127,168432,30955],{"class":154},[127,168434,168435],{"class":147},"(excellent)\n",[127,168437,168438,168440],{"class":129,"line":2270},[127,168439,30955],{"class":154},[127,168441,168442],{"class":147},"(under_age)\n",[14,168444,168446],{"id":168445},"_715-易错点","7.15 易错点",[632,168448,168449,168452,168460,168465,168476],{},[635,168450,168451],{},"默认参数不要写可变对象。",[635,168453,168454,168456,168457,168459],{},[124,168455,166922],{}," 是元组，",[124,168458,167037],{}," 是字典。",[635,168461,168462,168464],{},[124,168463,167276],{}," 只适合简单表达式。",[635,168466,168467,101547,168469,168471,168472,168475],{},[124,168468,74573],{},[124,168470,80580],{}," 的结果是迭代器，常用 ",[124,168473,168474],{},"list()"," 转换查看。",[635,168477,168478],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168480,168482],{"id":168481},"_716-本章练习","7.16 本章练习",[632,168484,168485,168492,168498,168503,168508],{},[635,168486,168487,168488,168491],{},"写函数 ",[124,168489,168490],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[635,168493,168487,168494,168497],{},[124,168495,168496],{},"print_user(**kwargs)","，输出用户所有字段。",[635,168499,104895,168500,168502],{},[124,168501,167276],{}," 对学生列表按年龄排序。",[635,168504,104895,168505,168507],{},[124,168506,80580],{}," 找出成绩不及格的学生。",[635,168509,168510],{},"写一个装饰器，统计函数执行前后的提示信息。",[575,168512,168513],{},"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":122,"searchDepth":137,"depth":137,"links":168515},[168516,168517,168518,168519,168520,168521,168525,168526,168527,168528,168533,168534,168535,168536,168537,168538],{"id":166374,"depth":137,"text":166375},{"id":166488,"depth":137,"text":166489},{"id":166577,"depth":137,"text":166578},{"id":166639,"depth":137,"text":166640},{"id":166785,"depth":137,"text":166786},{"id":166912,"depth":137,"text":166913,"children":168522},[168523,168524],{"id":166916,"depth":151,"text":166917},{"id":167031,"depth":151,"text":167032},{"id":167112,"depth":137,"text":167113},{"id":167270,"depth":137,"text":167271},{"id":167438,"depth":137,"text":167439},{"id":167520,"depth":137,"text":167521,"children":168529},[168530,168531,168532],{"id":167524,"depth":151,"text":167525},{"id":167595,"depth":151,"text":167596},{"id":167672,"depth":151,"text":167673},{"id":167797,"depth":137,"text":167798},{"id":167887,"depth":137,"text":167888},{"id":168018,"depth":137,"text":168019},{"id":168168,"depth":137,"text":168169},{"id":168445,"depth":137,"text":168446},{"id":168481,"depth":137,"text":168482},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166366,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168545,"title":168546,"body":168547,"description":603,"extension":604,"meta":171066,"navigation":606,"path":171067,"seo":171068,"stem":171069,"__hash__":171070},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168548,"toc":171041},[168549,168552,168556,168559,168562,168593,168597,168601,168604,168631,168635,168638,168689,168692,168707,168710,168745,168749,168751,168775,168778,168838,168842,168846,168849,168906,168909,168929,168933,168936,168999,169003,169006,169062,169069,169093,169097,169100,169163,169167,169172,169223,169226,169230,169235,169302,169305,169387,169391,169396,169447,169450,169454,169457,169460,169468,169471,169517,169520,169566,169570,169576,169620,169623,169669,169672,169712,169715,169776,169780,169783,169873,169876,170018,170021,170088,170092,170095,170098,170239,170242,170320,170323,170499,170503,170505,170516,170518,170717,170721,170965,170969,171003,171007,171038],[10,168550,168546],{"id":168551},"_8-文件操作",[14,168553,168555],{"id":168554},"_81-文件操作的意义","8.1 文件操作的意义",[19,168557,168558],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168560,168561],{},"常见文件类型：",[632,168563,168564,168570,168576,168582,168588],{},[635,168565,168566,168569],{},[124,168567,168568],{},".txt","：普通文本。",[635,168571,168572,168575],{},[124,168573,168574],{},".csv","：表格文本。",[635,168577,168578,168581],{},[124,168579,168580],{},".json","：结构化数据。",[635,168583,168584,168587],{},[124,168585,168586],{},".log","：日志文件。",[635,168589,168590,168592],{},[124,168591,146742],{},"：Python 源代码。",[14,168594,168596],{"id":168595},"_82-路径","8.2 路径",[62,168598,168600],{"id":168599},"_821-相对路径","8.2.1 相对路径",[19,168602,168603],{},"相对当前运行目录：",[117,168605,168607],{"className":30918,"code":168606,"language":30920,"meta":122,"style":122},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[124,168608,168609],{"__ignoreMap":122},[127,168610,168611,168613,168615,168617,168619,168621,168623,168625,168627,168629],{"class":129,"line":130},[127,168612,87444],{"class":154},[127,168614,681],{"class":147},[127,168616,147186],{"class":781},[127,168618,12977],{"class":147},[127,168620,147191],{"class":781},[127,168622,12977],{"class":147},[127,168624,147196],{"class":5758},[127,168626,725],{"class":290},[127,168628,147201],{"class":781},[127,168630,687],{"class":147},[62,168632,168634],{"id":168633},"_822-绝对路径","8.2.2 绝对路径",[19,168636,168637],{},"从根目录或盘符开始：",[117,168639,168641],{"className":30918,"code":168640,"language":30920,"meta":122,"style":122},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[124,168642,168643,168666],{"__ignoreMap":122},[127,168644,168645,168647,168649,168652,168654,168656,168658,168660,168662,168664],{"class":129,"line":130},[127,168646,87444],{"class":154},[127,168648,681],{"class":147},[127,168650,168651],{"class":781},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[127,168653,12977],{"class":147},[127,168655,147191],{"class":781},[127,168657,12977],{"class":147},[127,168659,147196],{"class":5758},[127,168661,725],{"class":290},[127,168663,147201],{"class":781},[127,168665,687],{"class":147},[127,168667,168668,168670,168672,168675,168677,168679,168681,168683,168685,168687],{"class":129,"line":137},[127,168669,87444],{"class":154},[127,168671,681],{"class":147},[127,168673,168674],{"class":781},"\"D:\u002Fdata\u002Fdata.txt\"",[127,168676,12977],{"class":147},[127,168678,147191],{"class":781},[127,168680,12977],{"class":147},[127,168682,147196],{"class":5758},[127,168684,725],{"class":290},[127,168686,147201],{"class":781},[127,168688,687],{"class":147},[19,168690,168691],{},"Windows 路径建议写成：",[117,168693,168695],{"className":30918,"code":168694,"language":30920,"meta":122,"style":122},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[124,168696,168697],{"__ignoreMap":122},[127,168698,168699,168702,168704],{"class":129,"line":130},[127,168700,168701],{"class":147},"path ",[127,168703,725],{"class":290},[127,168705,168706],{"class":781}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168708,168709],{},"或原始字符串：",[117,168711,168713],{"className":30918,"code":168712,"language":30920,"meta":122,"style":122},"path = r\"D:\\data\\data.txt\"\n",[124,168714,168715],{"__ignoreMap":122},[127,168716,168717,168719,168721,168723,168725,168728,168731,168734,168736,168738,168740,168743],{"class":129,"line":130},[127,168718,168701],{"class":147},[127,168720,725],{"class":290},[127,168722,17662],{"class":290},[127,168724,926],{"class":781},[127,168726,168727],{"class":48517},"D:",[127,168729,168730],{"class":154},"\\d",[127,168732,168733],{"class":48517},"ata",[127,168735,168730],{"class":154},[127,168737,168733],{"class":48517},[127,168739,1233],{"class":154},[127,168741,168742],{"class":48517},"txt",[127,168744,25674],{"class":781},[14,168746,168748],{"id":168747},"_83-open函数","8.3 open函数",[19,168750,5723],{},[117,168752,168754],{"className":30918,"code":168753,"language":30920,"meta":122,"style":122},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[124,168755,168756],{"__ignoreMap":122},[127,168757,168758,168760,168762,168764,168767,168769,168771,168773],{"class":129,"line":130},[127,168759,45894],{"class":5758},[127,168761,14106],{"class":290},[127,168763,147181],{"class":154},[127,168765,168766],{"class":147},"(文件路径, 打开模式, ",[127,168768,147196],{"class":5758},[127,168770,725],{"class":290},[127,168772,147201],{"class":781},[127,168774,687],{"class":147},[19,168776,168777],{},"常见模式：",[814,168779,168780,168789],{},[817,168781,168782],{},[820,168783,168784,168787],{},[823,168785,168786],{},"模式",[823,168788,26410],{},[860,168790,168791,168800,168809,168818,168828],{},[820,168792,168793,168797],{},[865,168794,168795],{},[124,168796,1344],{},[865,168798,168799],{},"只读，文件不存在会报错",[820,168801,168802,168806],{},[865,168803,168804],{},[124,168805,1469],{},[865,168807,168808],{},"只写，文件不存在会创建，存在会清空",[820,168810,168811,168815],{},[865,168812,168813],{},[124,168814,457],{},[865,168816,168817],{},"追加，文件不存在会创建",[820,168819,168820,168825],{},[865,168821,168822],{},[124,168823,168824],{},"rb",[865,168826,168827],{},"二进制只读",[820,168829,168830,168835],{},[865,168831,168832],{},[124,168833,168834],{},"wb",[865,168836,168837],{},"二进制只写",[14,168839,168841],{"id":168840},"_84-读取文件","8.4 读取文件",[62,168843,168845],{"id":168844},"_841-read","8.4.1 read",[19,168847,168848],{},"一次读取全部内容：",[117,168850,168852],{"className":30918,"code":168851,"language":30920,"meta":122,"style":122},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[124,168853,168854,168880,168892,168899],{"__ignoreMap":122},[127,168855,168856,168858,168860,168862,168864,168866,168868,168870,168872,168874,168876,168878],{"class":129,"line":130},[127,168857,45894],{"class":5758},[127,168859,14106],{"class":290},[127,168861,147181],{"class":154},[127,168863,681],{"class":147},[127,168865,147186],{"class":781},[127,168867,12977],{"class":147},[127,168869,147191],{"class":781},[127,168871,12977],{"class":147},[127,168873,147196],{"class":5758},[127,168875,725],{"class":290},[127,168877,147201],{"class":781},[127,168879,687],{"class":147},[127,168881,168882,168885,168887,168889],{"class":129,"line":137},[127,168883,168884],{"class":147},"content ",[127,168886,725],{"class":290},[127,168888,148543],{"class":5758},[127,168890,168891],{"class":147},".read()\n",[127,168893,168894,168896],{"class":129,"line":151},[127,168895,30955],{"class":154},[127,168897,168898],{"class":147},"(content)\n",[127,168900,168901,168903],{"class":129,"line":167},[127,168902,45894],{"class":5758},[127,168904,168905],{"class":147},".close()\n",[19,168907,168908],{},"可以指定读取字符数：",[117,168910,168912],{"className":30918,"code":168911,"language":30920,"meta":122,"style":122},"content = file.read(10)\n",[124,168913,168914],{"__ignoreMap":122},[127,168915,168916,168918,168920,168922,168925,168927],{"class":129,"line":130},[127,168917,168884],{"class":147},[127,168919,725],{"class":290},[127,168921,148543],{"class":5758},[127,168923,168924],{"class":147},".read(",[127,168926,1121],{"class":154},[127,168928,687],{"class":147},[62,168930,168932],{"id":168931},"_842-readline","8.4.2 readline",[19,168934,168935],{},"一次读取一行：",[117,168937,168939],{"className":30918,"code":168938,"language":30920,"meta":122,"style":122},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[124,168940,168941,168967,168971,168982,168989,168993],{"__ignoreMap":122},[127,168942,168943,168945,168947,168949,168951,168953,168955,168957,168959,168961,168963,168965],{"class":129,"line":130},[127,168944,45894],{"class":5758},[127,168946,14106],{"class":290},[127,168948,147181],{"class":154},[127,168950,681],{"class":147},[127,168952,147186],{"class":781},[127,168954,12977],{"class":147},[127,168956,147191],{"class":781},[127,168958,12977],{"class":147},[127,168960,147196],{"class":5758},[127,168962,725],{"class":290},[127,168964,147201],{"class":781},[127,168966,687],{"class":147},[127,168968,168969],{"class":129,"line":137},[127,168970,2942],{"emptyLinePlaceholder":606},[127,168972,168973,168975,168977,168979],{"class":129,"line":151},[127,168974,147642],{"class":147},[127,168976,725],{"class":290},[127,168978,148543],{"class":5758},[127,168980,168981],{"class":147},".readline()\n",[127,168983,168984,168986],{"class":129,"line":167},[127,168985,30955],{"class":154},[127,168987,168988],{"class":147},"(line)\n",[127,168990,168991],{"class":129,"line":415},[127,168992,2942],{"emptyLinePlaceholder":606},[127,168994,168995,168997],{"class":129,"line":421},[127,168996,45894],{"class":5758},[127,168998,168905],{"class":147},[62,169000,169002],{"id":169001},"_843-readlines","8.4.3 readlines",[19,169004,169005],{},"读取所有行，返回列表：",[117,169007,169009],{"className":30918,"code":169008,"language":30920,"meta":122,"style":122},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[124,169010,169011,169037,169049,169056],{"__ignoreMap":122},[127,169012,169013,169015,169017,169019,169021,169023,169025,169027,169029,169031,169033,169035],{"class":129,"line":130},[127,169014,45894],{"class":5758},[127,169016,14106],{"class":290},[127,169018,147181],{"class":154},[127,169020,681],{"class":147},[127,169022,147186],{"class":781},[127,169024,12977],{"class":147},[127,169026,147191],{"class":781},[127,169028,12977],{"class":147},[127,169030,147196],{"class":5758},[127,169032,725],{"class":290},[127,169034,147201],{"class":781},[127,169036,687],{"class":147},[127,169038,169039,169042,169044,169046],{"class":129,"line":137},[127,169040,169041],{"class":147},"lines ",[127,169043,725],{"class":290},[127,169045,148543],{"class":5758},[127,169047,169048],{"class":147},".readlines()\n",[127,169050,169051,169053],{"class":129,"line":151},[127,169052,30955],{"class":154},[127,169054,169055],{"class":147},"(lines)\n",[127,169057,169058,169060],{"class":129,"line":167},[127,169059,45894],{"class":5758},[127,169061,168905],{"class":147},[19,169063,169064,169065,169068],{},"每一行通常带有换行符，可以用 ",[124,169066,169067],{},"strip()"," 去掉：",[117,169070,169072],{"className":30918,"code":169071,"language":30920,"meta":122,"style":122},"for line in lines:\n    print(line.strip())\n",[124,169073,169074,169086],{"__ignoreMap":122},[127,169075,169076,169078,169081,169083],{"class":129,"line":130},[127,169077,3567],{"class":290},[127,169079,169080],{"class":147}," line ",[127,169082,26584],{"class":290},[127,169084,169085],{"class":147}," lines:\n",[127,169087,169088,169090],{"class":129,"line":137},[127,169089,31839],{"class":154},[127,169091,169092],{"class":147},"(line.strip())\n",[62,169094,169096],{"id":169095},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169098,169099],{},"推荐读取大文件时使用：",[117,169101,169103],{"className":30918,"code":169102,"language":30920,"meta":122,"style":122},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[124,169104,169105,169131,169135,169147,169153,169157],{"__ignoreMap":122},[127,169106,169107,169109,169111,169113,169115,169117,169119,169121,169123,169125,169127,169129],{"class":129,"line":130},[127,169108,45894],{"class":5758},[127,169110,14106],{"class":290},[127,169112,147181],{"class":154},[127,169114,681],{"class":147},[127,169116,147186],{"class":781},[127,169118,12977],{"class":147},[127,169120,147191],{"class":781},[127,169122,12977],{"class":147},[127,169124,147196],{"class":5758},[127,169126,725],{"class":290},[127,169128,147201],{"class":781},[127,169130,687],{"class":147},[127,169132,169133],{"class":129,"line":137},[127,169134,2942],{"emptyLinePlaceholder":606},[127,169136,169137,169139,169141,169143,169145],{"class":129,"line":151},[127,169138,3567],{"class":290},[127,169140,169080],{"class":147},[127,169142,26584],{"class":290},[127,169144,148543],{"class":5758},[127,169146,4281],{"class":147},[127,169148,169149,169151],{"class":129,"line":167},[127,169150,31839],{"class":154},[127,169152,169092],{"class":147},[127,169154,169155],{"class":129,"line":415},[127,169156,2942],{"emptyLinePlaceholder":606},[127,169158,169159,169161],{"class":129,"line":421},[127,169160,45894],{"class":5758},[127,169162,168905],{"class":147},[14,169164,169166],{"id":169165},"_85-with语句","8.5 with语句",[19,169168,169169,169171],{},[124,169170,108362],{}," 会自动关闭文件，推荐使用。",[117,169173,169175],{"className":30918,"code":169174,"language":30920,"meta":122,"style":122},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[124,169176,169177,169207,169217],{"__ignoreMap":122},[127,169178,169179,169181,169183,169185,169187,169189,169191,169193,169195,169197,169199,169201,169203,169205],{"class":129,"line":130},[127,169180,108362],{"class":290},[127,169182,147181],{"class":154},[127,169184,681],{"class":147},[127,169186,147186],{"class":781},[127,169188,12977],{"class":147},[127,169190,147191],{"class":781},[127,169192,12977],{"class":147},[127,169194,147196],{"class":5758},[127,169196,725],{"class":290},[127,169198,147201],{"class":781},[127,169200,14256],{"class":147},[127,169202,31923],{"class":290},[127,169204,148543],{"class":5758},[127,169206,4281],{"class":147},[127,169208,169209,169211,169213,169215],{"class":129,"line":137},[127,169210,147213],{"class":147},[127,169212,725],{"class":290},[127,169214,148543],{"class":5758},[127,169216,168891],{"class":147},[127,169218,169219,169221],{"class":129,"line":151},[127,169220,31839],{"class":154},[127,169222,168898],{"class":147},[19,169224,169225],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169227,169229],{"id":169228},"_86-写入文件","8.6 写入文件",[19,169231,169232,169234],{},[124,169233,1469],{}," 模式会清空原文件。",[117,169236,169238],{"className":30918,"code":169237,"language":30920,"meta":122,"style":122},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[124,169239,169240,169270,169287],{"__ignoreMap":122},[127,169241,169242,169244,169246,169248,169250,169252,169254,169256,169258,169260,169262,169264,169266,169268],{"class":129,"line":130},[127,169243,108362],{"class":290},[127,169245,147181],{"class":154},[127,169247,681],{"class":147},[127,169249,147186],{"class":781},[127,169251,12977],{"class":147},[127,169253,152366],{"class":781},[127,169255,12977],{"class":147},[127,169257,147196],{"class":5758},[127,169259,725],{"class":290},[127,169261,147201],{"class":781},[127,169263,14256],{"class":147},[127,169265,31923],{"class":290},[127,169267,148543],{"class":5758},[127,169269,4281],{"class":147},[127,169271,169272,169275,169278,169281,169283,169285],{"class":129,"line":137},[127,169273,169274],{"class":5758},"    file",[127,169276,169277],{"class":147},".write(",[127,169279,169280],{"class":781},"\"hello",[127,169282,156915],{"class":154},[127,169284,926],{"class":781},[127,169286,687],{"class":147},[127,169288,169289,169291,169293,169296,169298,169300],{"class":129,"line":151},[127,169290,169274],{"class":5758},[127,169292,169277],{"class":147},[127,169294,169295],{"class":781},"\"python",[127,169297,156915],{"class":154},[127,169299,926],{"class":781},[127,169301,687],{"class":147},[19,169303,169304],{},"写入多行：",[117,169306,169308],{"className":30918,"code":169307,"language":30920,"meta":122,"style":122},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[124,169309,169310,169345,169349,169380],{"__ignoreMap":122},[127,169311,169312,169314,169316,169318,169321,169323,169325,169327,169330,169332,169334,169336,169339,169341,169343],{"class":129,"line":130},[127,169313,169041],{"class":147},[127,169315,725],{"class":290},[127,169317,52761],{"class":147},[127,169319,169320],{"class":781},"\"小明,18",[127,169322,156915],{"class":154},[127,169324,926],{"class":781},[127,169326,12977],{"class":147},[127,169328,169329],{"class":781},"\"小红,17",[127,169331,156915],{"class":154},[127,169333,926],{"class":781},[127,169335,12977],{"class":147},[127,169337,169338],{"class":781},"\"小刚,19",[127,169340,156915],{"class":154},[127,169342,926],{"class":781},[127,169344,33786],{"class":147},[127,169346,169347],{"class":129,"line":137},[127,169348,2942],{"emptyLinePlaceholder":606},[127,169350,169351,169353,169355,169357,169360,169362,169364,169366,169368,169370,169372,169374,169376,169378],{"class":129,"line":151},[127,169352,108362],{"class":290},[127,169354,147181],{"class":154},[127,169356,681],{"class":147},[127,169358,169359],{"class":781},"\"students.txt\"",[127,169361,12977],{"class":147},[127,169363,152366],{"class":781},[127,169365,12977],{"class":147},[127,169367,147196],{"class":5758},[127,169369,725],{"class":290},[127,169371,147201],{"class":781},[127,169373,14256],{"class":147},[127,169375,31923],{"class":290},[127,169377,148543],{"class":5758},[127,169379,4281],{"class":147},[127,169381,169382,169384],{"class":129,"line":167},[127,169383,169274],{"class":5758},[127,169385,169386],{"class":147},".writelines(lines)\n",[14,169388,169390],{"id":169389},"_87-追加文件","8.7 追加文件",[19,169392,169393,169395],{},[124,169394,457],{}," 模式不会清空原内容，而是在末尾追加。",[117,169397,169399],{"className":30918,"code":169398,"language":30920,"meta":122,"style":122},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[124,169400,169401,169432],{"__ignoreMap":122},[127,169402,169403,169405,169407,169409,169412,169414,169416,169418,169420,169422,169424,169426,169428,169430],{"class":129,"line":130},[127,169404,108362],{"class":290},[127,169406,147181],{"class":154},[127,169408,681],{"class":147},[127,169410,169411],{"class":781},"\"log.txt\"",[127,169413,12977],{"class":147},[127,169415,165715],{"class":781},[127,169417,12977],{"class":147},[127,169419,147196],{"class":5758},[127,169421,725],{"class":290},[127,169423,147201],{"class":781},[127,169425,14256],{"class":147},[127,169427,31923],{"class":290},[127,169429,148543],{"class":5758},[127,169431,4281],{"class":147},[127,169433,169434,169436,169438,169441,169443,169445],{"class":129,"line":137},[127,169435,169274],{"class":5758},[127,169437,169277],{"class":147},[127,169439,169440],{"class":781},"\"程序启动",[127,169442,156915],{"class":154},[127,169444,926],{"class":781},[127,169446,687],{"class":147},[19,169448,169449],{},"日志类文件常用追加模式。",[14,169451,169453],{"id":169452},"_88-文件编码","8.8 文件编码",[19,169455,169456],{},"编码决定文字如何保存为字节。",[19,169458,169459],{},"常见编码：",[632,169461,169462,169465],{},[635,169463,169464],{},"UTF-8：推荐。",[635,169466,169467],{},"GBK：部分 Windows 中文文件常见。",[19,169469,169470],{},"读取文件乱码时，可以尝试：",[117,169472,169474],{"className":30918,"code":169473,"language":30920,"meta":122,"style":122},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[124,169475,169476,169507],{"__ignoreMap":122},[127,169477,169478,169480,169482,169484,169486,169488,169490,169492,169494,169496,169499,169501,169503,169505],{"class":129,"line":130},[127,169479,108362],{"class":290},[127,169481,147181],{"class":154},[127,169483,681],{"class":147},[127,169485,147186],{"class":781},[127,169487,12977],{"class":147},[127,169489,147191],{"class":781},[127,169491,12977],{"class":147},[127,169493,147196],{"class":5758},[127,169495,725],{"class":290},[127,169497,169498],{"class":781},"\"gbk\"",[127,169500,14256],{"class":147},[127,169502,31923],{"class":290},[127,169504,148543],{"class":5758},[127,169506,4281],{"class":147},[127,169508,169509,169511,169513,169515],{"class":129,"line":137},[127,169510,147213],{"class":147},[127,169512,725],{"class":290},[127,169514,148543],{"class":5758},[127,169516,168891],{"class":147},[19,169518,169519],{},"写文件时建议统一 UTF-8：",[117,169521,169523],{"className":30918,"code":169522,"language":30920,"meta":122,"style":122},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[124,169524,169525,169555],{"__ignoreMap":122},[127,169526,169527,169529,169531,169533,169535,169537,169539,169541,169543,169545,169547,169549,169551,169553],{"class":129,"line":130},[127,169528,108362],{"class":290},[127,169530,147181],{"class":154},[127,169532,681],{"class":147},[127,169534,147186],{"class":781},[127,169536,12977],{"class":147},[127,169538,152366],{"class":781},[127,169540,12977],{"class":147},[127,169542,147196],{"class":5758},[127,169544,725],{"class":290},[127,169546,147201],{"class":781},[127,169548,14256],{"class":147},[127,169550,31923],{"class":290},[127,169552,148543],{"class":5758},[127,169554,4281],{"class":147},[127,169556,169557,169559,169561,169564],{"class":129,"line":137},[127,169558,169274],{"class":5758},[127,169560,169277],{"class":147},[127,169562,169563],{"class":781},"\"中文内容\"",[127,169565,687],{"class":147},[14,169567,169569],{"id":169568},"_89-pathlib","8.9 pathlib",[19,169571,169572,169575],{},[124,169573,169574],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[117,169577,169579],{"className":30918,"code":169578,"language":30920,"meta":122,"style":122},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[124,169580,169581,169591,169595,169613],{"__ignoreMap":122},[127,169582,169583,169585,169587,169589],{"class":129,"line":130},[127,169584,31277],{"class":290},[127,169586,108840],{"class":147},[127,169588,30932],{"class":290},[127,169590,108845],{"class":147},[127,169592,169593],{"class":129,"line":137},[127,169594,2942],{"emptyLinePlaceholder":606},[127,169596,169597,169599,169601,169603,169606,169608,169610],{"class":129,"line":151},[127,169598,168701],{"class":147},[127,169600,725],{"class":290},[127,169602,109074],{"class":147},[127,169604,169605],{"class":781},"\"data\"",[127,169607,14256],{"class":147},[127,169609,1259],{"class":290},[127,169611,169612],{"class":781}," \"students.txt\"\n",[127,169614,169615,169617],{"class":129,"line":167},[127,169616,30955],{"class":154},[127,169618,169619],{"class":147},"(path)\n",[19,169621,169622],{},"创建目录：",[117,169624,169626],{"className":30918,"code":169625,"language":30920,"meta":122,"style":122},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[124,169627,169628,169638,169642,169655],{"__ignoreMap":122},[127,169629,169630,169632,169634,169636],{"class":129,"line":130},[127,169631,31277],{"class":290},[127,169633,108840],{"class":147},[127,169635,30932],{"class":290},[127,169637,108845],{"class":147},[127,169639,169640],{"class":129,"line":137},[127,169641,2942],{"emptyLinePlaceholder":606},[127,169643,169644,169647,169649,169651,169653],{"class":129,"line":151},[127,169645,169646],{"class":147},"data_dir ",[127,169648,725],{"class":290},[127,169650,109074],{"class":147},[127,169652,169605],{"class":781},[127,169654,687],{"class":147},[127,169656,169657,169660,169663,169665,169667],{"class":129,"line":167},[127,169658,169659],{"class":147},"data_dir.mkdir(",[127,169661,169662],{"class":5758},"exist_ok",[127,169664,725],{"class":290},[127,169666,32016],{"class":154},[127,169668,687],{"class":147},[19,169670,169671],{},"判断文件是否存在：",[117,169673,169675],{"className":30918,"code":169674,"language":30920,"meta":122,"style":122},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[124,169676,169677,169690,169694,169701],{"__ignoreMap":122},[127,169678,169679,169681,169683,169685,169688],{"class":129,"line":130},[127,169680,168701],{"class":147},[127,169682,725],{"class":290},[127,169684,109074],{"class":147},[127,169686,169687],{"class":781},"\"data\u002Fstudents.txt\"",[127,169689,687],{"class":147},[127,169691,169692],{"class":129,"line":137},[127,169693,2942],{"emptyLinePlaceholder":606},[127,169695,169696,169698],{"class":129,"line":151},[127,169697,2075],{"class":290},[127,169699,169700],{"class":147}," path.exists():\n",[127,169702,169703,169705,169707,169710],{"class":129,"line":167},[127,169704,31839],{"class":154},[127,169706,681],{"class":147},[127,169708,169709],{"class":781},"\"文件存在\"",[127,169711,687],{"class":147},[19,169713,169714],{},"读写文本：",[117,169716,169718],{"className":30918,"code":169717,"language":30920,"meta":122,"style":122},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[124,169719,169720,169732,169736,169753,169770],{"__ignoreMap":122},[127,169721,169722,169724,169726,169728,169730],{"class":129,"line":130},[127,169723,168701],{"class":147},[127,169725,725],{"class":290},[127,169727,109074],{"class":147},[127,169729,147186],{"class":781},[127,169731,687],{"class":147},[127,169733,169734],{"class":129,"line":137},[127,169735,2942],{"emptyLinePlaceholder":606},[127,169737,169738,169741,169743,169745,169747,169749,169751],{"class":129,"line":151},[127,169739,169740],{"class":147},"path.write_text(",[127,169742,146266],{"class":781},[127,169744,12977],{"class":147},[127,169746,147196],{"class":5758},[127,169748,725],{"class":290},[127,169750,147201],{"class":781},[127,169752,687],{"class":147},[127,169754,169755,169757,169759,169762,169764,169766,169768],{"class":129,"line":167},[127,169756,168884],{"class":147},[127,169758,725],{"class":290},[127,169760,169761],{"class":147}," path.read_text(",[127,169763,147196],{"class":5758},[127,169765,725],{"class":290},[127,169767,147201],{"class":781},[127,169769,687],{"class":147},[127,169771,169772,169774],{"class":129,"line":415},[127,169773,30955],{"class":154},[127,169775,168898],{"class":147},[14,169777,169779],{"id":169778},"_810-json文件","8.10 JSON文件",[19,169781,169782],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[117,169784,169786],{"className":30918,"code":169785,"language":30920,"meta":122,"style":122},"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",[124,169787,169788,169794,169798,169806,169816,169826,169834,169838,169842,169867],{"__ignoreMap":122},[127,169789,169790,169792],{"class":129,"line":130},[127,169791,30932],{"class":290},[127,169793,147481],{"class":147},[127,169795,169796],{"class":129,"line":137},[127,169797,2942],{"emptyLinePlaceholder":606},[127,169799,169800,169802,169804],{"class":129,"line":151},[127,169801,149871],{"class":147},[127,169803,725],{"class":290},[127,169805,148],{"class":147},[127,169807,169808,169810,169812,169814],{"class":129,"line":167},[127,169809,147410],{"class":781},[127,169811,158],{"class":147},[127,169813,150278],{"class":781},[127,169815,32006],{"class":147},[127,169817,169818,169820,169822,169824],{"class":129,"line":415},[127,169819,164927],{"class":781},[127,169821,158],{"class":147},[127,169823,1324],{"class":154},[127,169825,32006],{"class":147},[127,169827,169828,169830,169832],{"class":129,"line":421},[127,169829,164938],{"class":781},[127,169831,158],{"class":147},[127,169833,164943],{"class":154},[127,169835,169836],{"class":129,"line":1766},[127,169837,170],{"class":147},[127,169839,169840],{"class":129,"line":1856},[127,169841,2942],{"emptyLinePlaceholder":606},[127,169843,169844,169846,169848,169851,169853,169855,169857,169859,169861,169863,169865],{"class":129,"line":1862},[127,169845,156834],{"class":147},[127,169847,725],{"class":290},[127,169849,169850],{"class":147}," json.dumps(student, ",[127,169852,147527],{"class":5758},[127,169854,725],{"class":290},[127,169856,34527],{"class":154},[127,169858,12977],{"class":147},[127,169860,152402],{"class":5758},[127,169862,725],{"class":290},[127,169864,530],{"class":154},[127,169866,687],{"class":147},[127,169868,169869,169871],{"class":129,"line":1874},[127,169870,30955],{"class":154},[127,169872,164461],{"class":147},[19,169874,169875],{},"写入 JSON 文件：",[117,169877,169879],{"className":30918,"code":169878,"language":30920,"meta":122,"style":122},"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",[124,169880,169881,169887,169891,169899,169927,169955,169959,169963,169993],{"__ignoreMap":122},[127,169882,169883,169885],{"class":129,"line":130},[127,169884,30932],{"class":290},[127,169886,147481],{"class":147},[127,169888,169889],{"class":129,"line":137},[127,169890,2942],{"emptyLinePlaceholder":606},[127,169892,169893,169895,169897],{"class":129,"line":151},[127,169894,160106],{"class":147},[127,169896,725],{"class":290},[127,169898,55981],{"class":147},[127,169900,169901,169903,169905,169907,169909,169911,169913,169915,169917,169919,169921,169923,169925],{"class":129,"line":167},[127,169902,148775],{"class":147},[127,169904,63212],{"class":781},[127,169906,158],{"class":147},[127,169908,150278],{"class":781},[127,169910,12977],{"class":147},[127,169912,69657],{"class":781},[127,169914,158],{"class":147},[127,169916,1324],{"class":154},[127,169918,12977],{"class":147},[127,169920,151862],{"class":781},[127,169922,158],{"class":147},[127,169924,1663],{"class":154},[127,169926,5472],{"class":147},[127,169928,169929,169931,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953],{"class":129,"line":415},[127,169930,148775],{"class":147},[127,169932,63212],{"class":781},[127,169934,158],{"class":147},[127,169936,151326],{"class":781},[127,169938,12977],{"class":147},[127,169940,69657],{"class":781},[127,169942,158],{"class":147},[127,169944,1299],{"class":154},[127,169946,12977],{"class":147},[127,169948,151862],{"class":781},[127,169950,158],{"class":147},[127,169952,1485],{"class":154},[127,169954,5472],{"class":147},[127,169956,169957],{"class":129,"line":421},[127,169958,33786],{"class":147},[127,169960,169961],{"class":129,"line":1766},[127,169962,2942],{"emptyLinePlaceholder":606},[127,169964,169965,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991],{"class":129,"line":1856},[127,169966,108362],{"class":290},[127,169968,147181],{"class":154},[127,169970,681],{"class":147},[127,169972,152221],{"class":781},[127,169974,12977],{"class":147},[127,169976,152366],{"class":781},[127,169978,12977],{"class":147},[127,169980,147196],{"class":5758},[127,169982,725],{"class":290},[127,169984,147201],{"class":781},[127,169986,14256],{"class":147},[127,169988,31923],{"class":290},[127,169990,148543],{"class":5758},[127,169992,4281],{"class":147},[127,169994,169995,169998,170000,170002,170004,170006,170008,170010,170012,170014,170016],{"class":129,"line":1862},[127,169996,169997],{"class":147},"    json.dump(students, ",[127,169999,45894],{"class":5758},[127,170001,12977],{"class":147},[127,170003,147527],{"class":5758},[127,170005,725],{"class":290},[127,170007,34527],{"class":154},[127,170009,12977],{"class":147},[127,170011,152402],{"class":5758},[127,170013,725],{"class":290},[127,170015,530],{"class":154},[127,170017,687],{"class":147},[19,170019,170020],{},"读取 JSON 文件：",[117,170022,170024],{"className":30918,"code":170023,"language":30920,"meta":122,"style":122},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[124,170025,170026,170032,170036,170066,170078,170082],{"__ignoreMap":122},[127,170027,170028,170030],{"class":129,"line":130},[127,170029,30932],{"class":290},[127,170031,147481],{"class":147},[127,170033,170034],{"class":129,"line":137},[127,170035,2942],{"emptyLinePlaceholder":606},[127,170037,170038,170040,170042,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062,170064],{"class":129,"line":151},[127,170039,108362],{"class":290},[127,170041,147181],{"class":154},[127,170043,681],{"class":147},[127,170045,152221],{"class":781},[127,170047,12977],{"class":147},[127,170049,147191],{"class":781},[127,170051,12977],{"class":147},[127,170053,147196],{"class":5758},[127,170055,725],{"class":290},[127,170057,147201],{"class":781},[127,170059,14256],{"class":147},[127,170061,31923],{"class":290},[127,170063,148543],{"class":5758},[127,170065,4281],{"class":147},[127,170067,170068,170070,170072,170074,170076],{"class":129,"line":167},[127,170069,153427],{"class":147},[127,170071,725],{"class":290},[127,170073,148554],{"class":147},[127,170075,45894],{"class":5758},[127,170077,687],{"class":147},[127,170079,170080],{"class":129,"line":415},[127,170081,2942],{"emptyLinePlaceholder":606},[127,170083,170084,170086],{"class":129,"line":421},[127,170085,30955],{"class":154},[127,170087,165385],{"class":147},[14,170089,170091],{"id":170090},"_811-csv文件","8.11 CSV文件",[19,170093,170094],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170096,170097],{},"写入 CSV：",[117,170099,170101],{"className":30918,"code":170100,"language":30920,"meta":122,"style":122},"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",[124,170102,170103,170110,170114,170122,170140,170156,170172,170176,170180,170220,170234],{"__ignoreMap":122},[127,170104,170105,170107],{"class":129,"line":130},[127,170106,30932],{"class":290},[127,170108,170109],{"class":147}," csv\n",[127,170111,170112],{"class":129,"line":137},[127,170113,2942],{"emptyLinePlaceholder":606},[127,170115,170116,170118,170120],{"class":129,"line":151},[127,170117,160106],{"class":147},[127,170119,725],{"class":290},[127,170121,55981],{"class":147},[127,170123,170124,170127,170129,170131,170133,170135,170138],{"class":129,"line":167},[127,170125,170126],{"class":147},"    [",[127,170128,73628],{"class":781},[127,170130,12977],{"class":147},[127,170132,73661],{"class":781},[127,170134,12977],{"class":147},[127,170136,170137],{"class":781},"\"成绩\"",[127,170139,88365],{"class":147},[127,170141,170142,170144,170146,170148,170150,170152,170154],{"class":129,"line":415},[127,170143,170126],{"class":147},[127,170145,150278],{"class":781},[127,170147,12977],{"class":147},[127,170149,1324],{"class":154},[127,170151,12977],{"class":147},[127,170153,1663],{"class":154},[127,170155,88365],{"class":147},[127,170157,170158,170160,170162,170164,170166,170168,170170],{"class":129,"line":421},[127,170159,170126],{"class":147},[127,170161,151326],{"class":781},[127,170163,12977],{"class":147},[127,170165,1299],{"class":154},[127,170167,12977],{"class":147},[127,170169,1485],{"class":154},[127,170171,88365],{"class":147},[127,170173,170174],{"class":129,"line":1766},[127,170175,33786],{"class":147},[127,170177,170178],{"class":129,"line":1856},[127,170179,2942],{"emptyLinePlaceholder":606},[127,170181,170182,170184,170186,170188,170191,170193,170195,170197,170199,170201,170203,170205,170208,170210,170212,170214,170216,170218],{"class":129,"line":1862},[127,170183,108362],{"class":290},[127,170185,147181],{"class":154},[127,170187,681],{"class":147},[127,170189,170190],{"class":781},"\"students.csv\"",[127,170192,12977],{"class":147},[127,170194,152366],{"class":781},[127,170196,12977],{"class":147},[127,170198,147196],{"class":5758},[127,170200,725],{"class":290},[127,170202,147201],{"class":781},[127,170204,12977],{"class":147},[127,170206,170207],{"class":5758},"newline",[127,170209,725],{"class":290},[127,170211,8194],{"class":781},[127,170213,14256],{"class":147},[127,170215,31923],{"class":290},[127,170217,148543],{"class":5758},[127,170219,4281],{"class":147},[127,170221,170222,170225,170227,170230,170232],{"class":129,"line":1874},[127,170223,170224],{"class":147},"    writer ",[127,170226,725],{"class":290},[127,170228,170229],{"class":147}," csv.writer(",[127,170231,45894],{"class":5758},[127,170233,687],{"class":147},[127,170235,170236],{"class":129,"line":2155},[127,170237,170238],{"class":147},"    writer.writerows(students)\n",[19,170240,170241],{},"读取 CSV：",[117,170243,170245],{"className":30918,"code":170244,"language":30920,"meta":122,"style":122},"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",[124,170246,170247,170253,170257,170287,170301,170313],{"__ignoreMap":122},[127,170248,170249,170251],{"class":129,"line":130},[127,170250,30932],{"class":290},[127,170252,170109],{"class":147},[127,170254,170255],{"class":129,"line":137},[127,170256,2942],{"emptyLinePlaceholder":606},[127,170258,170259,170261,170263,170265,170267,170269,170271,170273,170275,170277,170279,170281,170283,170285],{"class":129,"line":151},[127,170260,108362],{"class":290},[127,170262,147181],{"class":154},[127,170264,681],{"class":147},[127,170266,170190],{"class":781},[127,170268,12977],{"class":147},[127,170270,147191],{"class":781},[127,170272,12977],{"class":147},[127,170274,147196],{"class":5758},[127,170276,725],{"class":290},[127,170278,147201],{"class":781},[127,170280,14256],{"class":147},[127,170282,31923],{"class":290},[127,170284,148543],{"class":5758},[127,170286,4281],{"class":147},[127,170288,170289,170292,170294,170297,170299],{"class":129,"line":167},[127,170290,170291],{"class":147},"    reader ",[127,170293,725],{"class":290},[127,170295,170296],{"class":147}," csv.reader(",[127,170298,45894],{"class":5758},[127,170300,687],{"class":147},[127,170302,170303,170305,170308,170310],{"class":129,"line":415},[127,170304,3743],{"class":290},[127,170306,170307],{"class":147}," row ",[127,170309,26584],{"class":290},[127,170311,170312],{"class":147}," reader:\n",[127,170314,170315,170317],{"class":129,"line":421},[127,170316,32991],{"class":154},[127,170318,170319],{"class":147},"(row)\n",[19,170321,170322],{},"使用字典写入：",[117,170324,170326],{"className":30918,"code":170325,"language":30920,"meta":122,"style":122},"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",[124,170327,170328,170334,170338,170346,170374,170402,170406,170410,170448,170469,170490,170495],{"__ignoreMap":122},[127,170329,170330,170332],{"class":129,"line":130},[127,170331,30932],{"class":290},[127,170333,170109],{"class":147},[127,170335,170336],{"class":129,"line":137},[127,170337,2942],{"emptyLinePlaceholder":606},[127,170339,170340,170342,170344],{"class":129,"line":151},[127,170341,160106],{"class":147},[127,170343,725],{"class":290},[127,170345,55981],{"class":147},[127,170347,170348,170350,170352,170354,170356,170358,170360,170362,170364,170366,170368,170370,170372],{"class":129,"line":167},[127,170349,148775],{"class":147},[127,170351,63212],{"class":781},[127,170353,158],{"class":147},[127,170355,150278],{"class":781},[127,170357,12977],{"class":147},[127,170359,69657],{"class":781},[127,170361,158],{"class":147},[127,170363,1324],{"class":154},[127,170365,12977],{"class":147},[127,170367,151862],{"class":781},[127,170369,158],{"class":147},[127,170371,1663],{"class":154},[127,170373,5472],{"class":147},[127,170375,170376,170378,170380,170382,170384,170386,170388,170390,170392,170394,170396,170398,170400],{"class":129,"line":415},[127,170377,148775],{"class":147},[127,170379,63212],{"class":781},[127,170381,158],{"class":147},[127,170383,151326],{"class":781},[127,170385,12977],{"class":147},[127,170387,69657],{"class":781},[127,170389,158],{"class":147},[127,170391,1299],{"class":154},[127,170393,12977],{"class":147},[127,170395,151862],{"class":781},[127,170397,158],{"class":147},[127,170399,1485],{"class":154},[127,170401,5472],{"class":147},[127,170403,170404],{"class":129,"line":421},[127,170405,33786],{"class":147},[127,170407,170408],{"class":129,"line":1766},[127,170409,2942],{"emptyLinePlaceholder":606},[127,170411,170412,170414,170416,170418,170420,170422,170424,170426,170428,170430,170432,170434,170436,170438,170440,170442,170444,170446],{"class":129,"line":1856},[127,170413,108362],{"class":290},[127,170415,147181],{"class":154},[127,170417,681],{"class":147},[127,170419,170190],{"class":781},[127,170421,12977],{"class":147},[127,170423,152366],{"class":781},[127,170425,12977],{"class":147},[127,170427,147196],{"class":5758},[127,170429,725],{"class":290},[127,170431,147201],{"class":781},[127,170433,12977],{"class":147},[127,170435,170207],{"class":5758},[127,170437,725],{"class":290},[127,170439,8194],{"class":781},[127,170441,14256],{"class":147},[127,170443,31923],{"class":290},[127,170445,148543],{"class":5758},[127,170447,4281],{"class":147},[127,170449,170450,170453,170455,170457,170459,170461,170463,170465,170467],{"class":129,"line":1862},[127,170451,170452],{"class":147},"    fieldnames ",[127,170454,725],{"class":290},[127,170456,52761],{"class":147},[127,170458,63212],{"class":781},[127,170460,12977],{"class":147},[127,170462,69657],{"class":781},[127,170464,12977],{"class":147},[127,170466,151862],{"class":781},[127,170468,33786],{"class":147},[127,170470,170471,170473,170475,170478,170480,170482,170485,170487],{"class":129,"line":1874},[127,170472,170224],{"class":147},[127,170474,725],{"class":290},[127,170476,170477],{"class":147}," csv.DictWriter(",[127,170479,45894],{"class":5758},[127,170481,12977],{"class":147},[127,170483,170484],{"class":5758},"fieldnames",[127,170486,725],{"class":290},[127,170488,170489],{"class":147},"fieldnames)\n",[127,170491,170492],{"class":129,"line":2155},[127,170493,170494],{"class":147},"    writer.writeheader()\n",[127,170496,170497],{"class":129,"line":2160},[127,170498,170238],{"class":147},[14,170500,170502],{"id":170501},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170504,123821],{},[632,170506,170507,170510,170513],{},[635,170508,170509],{},"读取文本文件。",[635,170511,170512],{},"统计每个单词出现次数。",[635,170514,170515],{},"输出出现次数最多的前 10 个单词。",[19,170517,10577],{},[117,170519,170521],{"className":30918,"code":170520,"language":30920,"meta":122,"style":122},"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",[124,170522,170523,170533,170537,170550,170566,170570,170580,170589,170593,170605,170625,170634,170638,170656,170660,170690,170694,170710],{"__ignoreMap":122},[127,170524,170525,170527,170529,170531],{"class":129,"line":130},[127,170526,31277],{"class":290},[127,170528,108840],{"class":147},[127,170530,30932],{"class":290},[127,170532,108845],{"class":147},[127,170534,170535],{"class":129,"line":137},[127,170536,2942],{"emptyLinePlaceholder":606},[127,170538,170539,170541,170543,170545,170548],{"class":129,"line":151},[127,170540,168701],{"class":147},[127,170542,725],{"class":290},[127,170544,109074],{"class":147},[127,170546,170547],{"class":781},"\"article.txt\"",[127,170549,687],{"class":147},[127,170551,170552,170554,170556,170558,170560,170562,170564],{"class":129,"line":167},[127,170553,168884],{"class":147},[127,170555,725],{"class":290},[127,170557,169761],{"class":147},[127,170559,147196],{"class":5758},[127,170561,725],{"class":290},[127,170563,147201],{"class":781},[127,170565,687],{"class":147},[127,170567,170568],{"class":129,"line":415},[127,170569,2942],{"emptyLinePlaceholder":606},[127,170571,170572,170575,170577],{"class":129,"line":421},[127,170573,170574],{"class":147},"words ",[127,170576,725],{"class":290},[127,170578,170579],{"class":147}," content.lower().split()\n",[127,170581,170582,170585,170587],{"class":129,"line":1766},[127,170583,170584],{"class":147},"counter ",[127,170586,725],{"class":290},[127,170588,88397],{"class":147},[127,170590,170591],{"class":129,"line":1856},[127,170592,2942],{"emptyLinePlaceholder":606},[127,170594,170595,170597,170600,170602],{"class":129,"line":1862},[127,170596,3567],{"class":290},[127,170598,170599],{"class":147}," word ",[127,170601,26584],{"class":290},[127,170603,170604],{"class":147}," words:\n",[127,170606,170607,170610,170612,170615,170618,170620,170623],{"class":129,"line":1874},[127,170608,170609],{"class":147},"    word ",[127,170611,725],{"class":290},[127,170613,170614],{"class":147}," word.strip(",[127,170616,170617],{"class":781},"\".,!?;:",[127,170619,156885],{"class":154},[127,170621,170622],{"class":781},"'()[]\"",[127,170624,687],{"class":147},[127,170626,170627,170629,170631],{"class":129,"line":2155},[127,170628,3643],{"class":290},[127,170630,39470],{"class":290},[127,170632,170633],{"class":147}," word:\n",[127,170635,170636],{"class":129,"line":2160},[127,170637,148902],{"class":290},[127,170639,170640,170643,170645,170648,170650,170652,170654],{"class":129,"line":2166},[127,170641,170642],{"class":147},"    counter[word] ",[127,170644,725],{"class":290},[127,170646,170647],{"class":147}," counter.get(word, ",[127,170649,867],{"class":154},[127,170651,14256],{"class":147},[127,170653,1156],{"class":290},[127,170655,56233],{"class":154},[127,170657,170658],{"class":129,"line":2171},[127,170659,2942],{"emptyLinePlaceholder":606},[127,170661,170662,170665,170667,170669,170672,170674,170676,170678,170680,170682,170684,170686,170688],{"class":129,"line":2185},[127,170663,170664],{"class":147},"items ",[127,170666,725],{"class":290},[127,170668,163994],{"class":154},[127,170670,170671],{"class":147},"(counter.items(), ",[127,170673,154336],{"class":5758},[127,170675,154339],{"class":290},[127,170677,154342],{"class":147},[127,170679,893],{"class":154},[127,170681,112731],{"class":147},[127,170683,163918],{"class":5758},[127,170685,725],{"class":290},[127,170687,32016],{"class":154},[127,170689,687],{"class":147},[127,170691,170692],{"class":129,"line":2190},[127,170693,2942],{"emptyLinePlaceholder":606},[127,170695,170696,170698,170701,170703,170706,170708],{"class":129,"line":2196},[127,170697,3567],{"class":290},[127,170699,170700],{"class":147}," word, count ",[127,170702,26584],{"class":290},[127,170704,170705],{"class":147}," items[:",[127,170707,1121],{"class":154},[127,170709,166145],{"class":147},[127,170711,170712,170714],{"class":129,"line":2217},[127,170713,31839],{"class":154},[127,170715,170716],{"class":147},"(word, count)\n",[14,170718,170720],{"id":170719},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[117,170722,170724],{"className":30918,"code":170723,"language":30920,"meta":122,"style":122},"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",[124,170725,170726,170732,170742,170746,170758,170762,170766,170774,170784,170790,170794,170824,170834,170838,170842,170850,170880,170904,170908,170912,170920,170949,170954],{"__ignoreMap":122},[127,170727,170728,170730],{"class":129,"line":130},[127,170729,30932],{"class":290},[127,170731,147481],{"class":147},[127,170733,170734,170736,170738,170740],{"class":129,"line":137},[127,170735,31277],{"class":290},[127,170737,108840],{"class":147},[127,170739,30932],{"class":290},[127,170741,108845],{"class":147},[127,170743,170744],{"class":129,"line":151},[127,170745,2942],{"emptyLinePlaceholder":606},[127,170747,170748,170750,170752,170754,170756],{"class":129,"line":167},[127,170749,152214],{"class":154},[127,170751,14106],{"class":290},[127,170753,109074],{"class":147},[127,170755,152221],{"class":781},[127,170757,687],{"class":147},[127,170759,170760],{"class":129,"line":415},[127,170761,2942],{"emptyLinePlaceholder":606},[127,170763,170764],{"class":129,"line":421},[127,170765,2942],{"emptyLinePlaceholder":606},[127,170767,170768,170770,170772],{"class":129,"line":1766},[127,170769,32487],{"class":290},[127,170771,152238],{"class":143},[127,170773,32493],{"class":147},[127,170775,170776,170778,170780,170782],{"class":129,"line":1856},[127,170777,3643],{"class":290},[127,170779,39470],{"class":290},[127,170781,152249],{"class":154},[127,170783,152252],{"class":147},[127,170785,170786,170788],{"class":129,"line":1862},[127,170787,15294],{"class":290},[127,170789,52373],{"class":147},[127,170791,170792],{"class":129,"line":1874},[127,170793,2942],{"emptyLinePlaceholder":606},[127,170795,170796,170798,170800,170802,170804,170806,170808,170810,170812,170814,170816,170818,170820,170822],{"class":129,"line":2155},[127,170797,34718],{"class":290},[127,170799,147181],{"class":154},[127,170801,681],{"class":147},[127,170803,152214],{"class":154},[127,170805,12977],{"class":147},[127,170807,147191],{"class":781},[127,170809,12977],{"class":147},[127,170811,147196],{"class":5758},[127,170813,725],{"class":290},[127,170815,147201],{"class":781},[127,170817,14256],{"class":147},[127,170819,31923],{"class":290},[127,170821,148543],{"class":5758},[127,170823,4281],{"class":147},[127,170825,170826,170828,170830,170832],{"class":129,"line":2160},[127,170827,15294],{"class":290},[127,170829,148554],{"class":147},[127,170831,45894],{"class":5758},[127,170833,687],{"class":147},[127,170835,170836],{"class":129,"line":2166},[127,170837,2942],{"emptyLinePlaceholder":606},[127,170839,170840],{"class":129,"line":2171},[127,170841,2942],{"emptyLinePlaceholder":606},[127,170843,170844,170846,170848],{"class":129,"line":2185},[127,170845,32487],{"class":290},[127,170847,152348],{"class":143},[127,170849,152351],{"class":147},[127,170851,170852,170854,170856,170858,170860,170862,170864,170866,170868,170870,170872,170874,170876,170878],{"class":129,"line":2190},[127,170853,34718],{"class":290},[127,170855,147181],{"class":154},[127,170857,681],{"class":147},[127,170859,152214],{"class":154},[127,170861,12977],{"class":147},[127,170863,152366],{"class":781},[127,170865,12977],{"class":147},[127,170867,147196],{"class":5758},[127,170869,725],{"class":290},[127,170871,147201],{"class":781},[127,170873,14256],{"class":147},[127,170875,31923],{"class":290},[127,170877,148543],{"class":5758},[127,170879,4281],{"class":147},[127,170881,170882,170884,170886,170888,170890,170892,170894,170896,170898,170900,170902],{"class":129,"line":2196},[127,170883,152387],{"class":147},[127,170885,45894],{"class":5758},[127,170887,12977],{"class":147},[127,170889,147527],{"class":5758},[127,170891,725],{"class":290},[127,170893,34527],{"class":154},[127,170895,12977],{"class":147},[127,170897,152402],{"class":5758},[127,170899,725],{"class":290},[127,170901,530],{"class":154},[127,170903,687],{"class":147},[127,170905,170906],{"class":129,"line":2217},[127,170907,2942],{"emptyLinePlaceholder":606},[127,170909,170910],{"class":129,"line":2222},[127,170911,2942],{"emptyLinePlaceholder":606},[127,170913,170914,170916,170918],{"class":129,"line":2236},[127,170915,160106],{"class":147},[127,170917,725],{"class":290},[127,170919,153432],{"class":147},[127,170921,170922,170925,170927,170929,170931,170933,170935,170937,170939,170941,170943,170945,170947],{"class":129,"line":2241},[127,170923,170924],{"class":147},"students.append({",[127,170926,63212],{"class":781},[127,170928,158],{"class":147},[127,170930,150278],{"class":781},[127,170932,12977],{"class":147},[127,170934,69657],{"class":781},[127,170936,158],{"class":147},[127,170938,1324],{"class":154},[127,170940,12977],{"class":147},[127,170942,151862],{"class":781},[127,170944,158],{"class":147},[127,170946,1663],{"class":154},[127,170948,165542],{"class":147},[127,170950,170951],{"class":129,"line":2270},[127,170952,170953],{"class":147},"save_students(students)\n",[127,170955,170956,170958,170960,170963],{"class":129,"line":2275},[127,170957,30955],{"class":154},[127,170959,681],{"class":147},[127,170961,170962],{"class":781},"\"保存成功\"",[127,170964,687],{"class":147},[14,170966,170968],{"id":170967},"_814-易错点","8.14 易错点",[632,170970,170971,170975,170981,170986,170993,171000],{},[635,170972,170973,169234],{},[124,170974,1469],{},[635,170976,170977,170978,28925],{},"读写中文要指定 ",[124,170979,170980],{},"encoding=\"utf-8\"",[635,170982,170983,170984,28925],{},"打开文件后要关闭，推荐使用 ",[124,170985,108362],{},[635,170987,170988,170989,170992],{},"读取大文件不要直接 ",[124,170990,170991],{},"read()"," 全部内容。",[635,170994,170995,170996,170999],{},"Windows 写 CSV 时建议加 ",[124,170997,170998],{},"newline=\"\"","，避免空行。",[635,171001,171002],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171004,171006],{"id":171005},"_815-本章练习","8.15 本章练习",[632,171008,171009,171016,171021,171024,171027],{},[635,171010,171011,171012,171015],{},"写入一个 ",[124,171013,171014],{},"students.txt","，每行保存一个学生姓名。",[635,171017,104884,171018,171020],{},[124,171019,171014],{}," 并输出所有学生。",[635,171022,171023],{},"把学生列表保存为 JSON 文件。",[635,171025,171026],{},"从 JSON 文件读取学生数据，计算平均分。",[635,171028,171029,171030,171033,171034,171037],{},"写一个日志函数 ",[124,171031,171032],{},"write_log(message)","，每次调用向 ",[124,171035,171036],{},"app.log"," 追加一行。",[575,171039,171040],{},"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":122,"searchDepth":137,"depth":137,"links":171042},[171043,171044,171048,171049,171055,171056,171057,171058,171059,171060,171061,171062,171063,171064,171065],{"id":168554,"depth":137,"text":168555},{"id":168595,"depth":137,"text":168596,"children":171045},[171046,171047],{"id":168599,"depth":151,"text":168600},{"id":168633,"depth":151,"text":168634},{"id":168747,"depth":137,"text":168748},{"id":168840,"depth":137,"text":168841,"children":171050},[171051,171052,171053,171054],{"id":168844,"depth":151,"text":168845},{"id":168931,"depth":151,"text":168932},{"id":169001,"depth":151,"text":169002},{"id":169095,"depth":151,"text":169096},{"id":169165,"depth":137,"text":169166},{"id":169228,"depth":137,"text":169229},{"id":169389,"depth":137,"text":169390},{"id":169452,"depth":137,"text":169453},{"id":169568,"depth":137,"text":169569},{"id":169778,"depth":137,"text":169779},{"id":170090,"depth":137,"text":170091},{"id":170501,"depth":137,"text":170502},{"id":170719,"depth":137,"text":170720},{"id":170967,"depth":137,"text":170968},{"id":171005,"depth":137,"text":171006},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168546,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171072,"title":171073,"body":171074,"description":603,"extension":604,"meta":173260,"navigation":606,"path":173261,"seo":173262,"stem":173263,"__hash__":173264},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171075,"toc":173227},[171076,171079,171083,171086,171089,171181,171183,171202,171207,171211,171214,171217,171246,171253,171256,171260,171263,171292,171294,171346,171352,171405,171409,171507,171510,171577,171581,171638,171640,171646,171650,171655,171661,171752,171757,171761,171764,171842,171845,171883,171887,172005,172008,172012,172015,172060,172063,172067,172072,172078,172128,172131,172162,172166,172170,172200,172204,172239,172243,172278,172318,172322,172338,172341,172345,172349,172428,172432,172473,172477,172532,172536,172570,172574,172604,172613,172620,172626,172683,172686,172694,172697,172701,172708,172711,172717,172720,172737,172742,172746,172752,172765,172768,172805,172808,172819,172822,172836,172839,172853,172857,172864,172897,172900,172902,172908,172911,172915,172917,172923,172928,173101,173105,173168,173172,173196,173200,173224],[10,171077,171073],{"id":171078},"_9-异常模块与包",[14,171080,171082],{"id":171081},"_91-什么是异常","9.1 什么是异常",[19,171084,171085],{},"异常是程序运行过程中出现的错误。",[19,171087,171088],{},"常见异常：",[814,171090,171091,171100],{},[817,171092,171093],{},[820,171094,171095,171098],{},[823,171096,171097],{},"异常",[823,171099,26410],{},[860,171101,171102,171112,171122,171131,171141,171151,171161,171171],{},[820,171103,171104,171109],{},[865,171105,171106],{},[124,171107,171108],{},"NameError",[865,171110,171111],{},"使用了未定义变量",[820,171113,171114,171119],{},[865,171115,171116],{},[124,171117,171118],{},"TypeError",[865,171120,171121],{},"类型不匹配",[820,171123,171124,171128],{},[865,171125,171126],{},[124,171127,155224],{},[865,171129,171130],{},"值不合法",[820,171132,171133,171138],{},[865,171134,171135],{},[124,171136,171137],{},"IndexError",[865,171139,171140],{},"列表索引越界",[820,171142,171143,171148],{},[865,171144,171145],{},[124,171146,171147],{},"KeyError",[865,171149,171150],{},"字典 key 不存在",[820,171152,171153,171158],{},[865,171154,171155],{},[124,171156,171157],{},"FileNotFoundError",[865,171159,171160],{},"文件不存在",[820,171162,171163,171168],{},[865,171164,171165],{},[124,171166,171167],{},"ZeroDivisionError",[865,171169,171170],{},"除数为 0",[820,171172,171173,171178],{},[865,171174,171175],{},[124,171176,171177],{},"ImportError",[865,171179,171180],{},"导入失败",[19,171182,15677],{},[117,171184,171186],{"className":30918,"code":171185,"language":30920,"meta":122,"style":122},"num = int(\"abc\")\n",[124,171187,171188],{"__ignoreMap":122},[127,171189,171190,171192,171194,171196,171198,171200],{"class":129,"line":130},[127,171191,156177],{"class":147},[127,171193,725],{"class":290},[127,171195,2924],{"class":154},[127,171197,681],{"class":147},[127,171199,156270],{"class":781},[127,171201,687],{"class":147},[19,171203,171204,171205,28925],{},"会触发 ",[124,171206,155224],{},[14,171208,171210],{"id":171209},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171212,171213],{},"如果不处理异常，程序会直接终止。",[19,171215,171216],{},"例如用户输入年龄：",[117,171218,171220],{"className":30918,"code":171219,"language":30920,"meta":122,"style":122},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[124,171221,171222,171240],{"__ignoreMap":122},[127,171223,171224,171226,171228,171230,171232,171234,171236,171238],{"class":129,"line":130},[127,171225,146936],{"class":147},[127,171227,725],{"class":290},[127,171229,2924],{"class":154},[127,171231,681],{"class":147},[127,171233,54356],{"class":154},[127,171235,681],{"class":147},[127,171237,152784],{"class":781},[127,171239,31037],{"class":147},[127,171241,171242,171244],{"class":129,"line":137},[127,171243,30955],{"class":154},[127,171245,156151],{"class":147},[19,171247,171248,171249,171252],{},"用户输入 ",[124,171250,171251],{},"abc","，程序就会报错退出。",[19,171254,171255],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171257,171259],{"id":171258},"_93-try-except","9.3 try except",[19,171261,171262],{},"基础语法：",[117,171264,171266],{"className":30918,"code":171265,"language":30920,"meta":122,"style":122},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[124,171267,171268,171275,171280,171287],{"__ignoreMap":122},[127,171269,171270,171273],{"class":129,"line":130},[127,171271,171272],{"class":290},"try",[127,171274,4281],{"class":147},[127,171276,171277],{"class":129,"line":137},[127,171278,171279],{"class":147},"    可能出错的代码\n",[127,171281,171282,171285],{"class":129,"line":151},[127,171283,171284],{"class":290},"except",[127,171286,4281],{"class":147},[127,171288,171289],{"class":129,"line":167},[127,171290,171291],{"class":147},"    出错后的处理代码\n",[19,171293,15677],{},[117,171295,171297],{"className":30918,"code":171296,"language":30920,"meta":122,"style":122},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[124,171298,171299,171305,171323,171329,171335],{"__ignoreMap":122},[127,171300,171301,171303],{"class":129,"line":130},[127,171302,171272],{"class":290},[127,171304,4281],{"class":147},[127,171306,171307,171309,171311,171313,171315,171317,171319,171321],{"class":129,"line":137},[127,171308,152776],{"class":147},[127,171310,725],{"class":290},[127,171312,2924],{"class":154},[127,171314,681],{"class":147},[127,171316,54356],{"class":154},[127,171318,681],{"class":147},[127,171320,152784],{"class":781},[127,171322,31037],{"class":147},[127,171324,171325,171327],{"class":129,"line":151},[127,171326,31839],{"class":154},[127,171328,156151],{"class":147},[127,171330,171331,171333],{"class":129,"line":167},[127,171332,171284],{"class":290},[127,171334,4281],{"class":147},[127,171336,171337,171339,171341,171344],{"class":129,"line":415},[127,171338,31839],{"class":154},[127,171340,681],{"class":147},[127,171342,171343],{"class":781},"\"年龄必须是数字\"",[127,171345,687],{"class":147},[19,171347,171348,171349,171351],{},"不建议裸写 ",[124,171350,171284],{},"，最好指定异常类型。",[117,171353,171355],{"className":30918,"code":171354,"language":30920,"meta":122,"style":122},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[124,171356,171357,171363,171381,171387,171395],{"__ignoreMap":122},[127,171358,171359,171361],{"class":129,"line":130},[127,171360,171272],{"class":290},[127,171362,4281],{"class":147},[127,171364,171365,171367,171369,171371,171373,171375,171377,171379],{"class":129,"line":137},[127,171366,152776],{"class":147},[127,171368,725],{"class":290},[127,171370,2924],{"class":154},[127,171372,681],{"class":147},[127,171374,54356],{"class":154},[127,171376,681],{"class":147},[127,171378,152784],{"class":781},[127,171380,31037],{"class":147},[127,171382,171383,171385],{"class":129,"line":151},[127,171384,31839],{"class":154},[127,171386,156151],{"class":147},[127,171388,171389,171391,171393],{"class":129,"line":167},[127,171390,171284],{"class":290},[127,171392,152616],{"class":154},[127,171394,4281],{"class":147},[127,171396,171397,171399,171401,171403],{"class":129,"line":415},[127,171398,31839],{"class":154},[127,171400,681],{"class":147},[127,171402,171343],{"class":781},[127,171404,687],{"class":147},[14,171406,171408],{"id":171407},"_94-捕获多个异常","9.4 捕获多个异常",[117,171410,171412],{"className":30918,"code":171411,"language":30920,"meta":122,"style":122},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[124,171413,171414,171420,171441,171461,171468,171476,171487,171496],{"__ignoreMap":122},[127,171415,171416,171418],{"class":129,"line":130},[127,171417,171272],{"class":290},[127,171419,4281],{"class":147},[127,171421,171422,171425,171427,171429,171431,171433,171435,171437,171439],{"class":129,"line":137},[127,171423,171424],{"class":147},"    nums ",[127,171426,725],{"class":290},[127,171428,52761],{"class":147},[127,171430,893],{"class":154},[127,171432,12977],{"class":147},[127,171434,530],{"class":154},[127,171436,12977],{"class":147},[127,171438,749],{"class":154},[127,171440,33786],{"class":147},[127,171442,171443,171446,171448,171450,171452,171454,171456,171459],{"class":129,"line":151},[127,171444,171445],{"class":147},"    index ",[127,171447,725],{"class":290},[127,171449,2924],{"class":154},[127,171451,681],{"class":147},[127,171453,54356],{"class":154},[127,171455,681],{"class":147},[127,171457,171458],{"class":781},"\"请输入索引:\"",[127,171460,31037],{"class":147},[127,171462,171463,171465],{"class":129,"line":167},[127,171464,31839],{"class":154},[127,171466,171467],{"class":147},"(nums[index])\n",[127,171469,171470,171472,171474],{"class":129,"line":415},[127,171471,171284],{"class":290},[127,171473,152616],{"class":154},[127,171475,4281],{"class":147},[127,171477,171478,171480,171482,171485],{"class":129,"line":421},[127,171479,31839],{"class":154},[127,171481,681],{"class":147},[127,171483,171484],{"class":781},"\"索引必须是整数\"",[127,171486,687],{"class":147},[127,171488,171489,171491,171494],{"class":129,"line":1766},[127,171490,171284],{"class":290},[127,171492,171493],{"class":154}," IndexError",[127,171495,4281],{"class":147},[127,171497,171498,171500,171502,171505],{"class":129,"line":1856},[127,171499,31839],{"class":154},[127,171501,681],{"class":147},[127,171503,171504],{"class":781},"\"索引越界\"",[127,171506,687],{"class":147},[19,171508,171509],{},"多个异常使用相同处理逻辑：",[117,171511,171513],{"className":30918,"code":171512,"language":30920,"meta":122,"style":122},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[124,171514,171515,171521,171539,171552,171566],{"__ignoreMap":122},[127,171516,171517,171519],{"class":129,"line":130},[127,171518,171272],{"class":290},[127,171520,4281],{"class":147},[127,171522,171523,171525,171527,171529,171531,171533,171535,171537],{"class":129,"line":137},[127,171524,46133],{"class":147},[127,171526,725],{"class":290},[127,171528,2924],{"class":154},[127,171530,681],{"class":147},[127,171532,54356],{"class":154},[127,171534,681],{"class":147},[127,171536,156186],{"class":781},[127,171538,31037],{"class":147},[127,171540,171541,171543,171545,171547,171549],{"class":129,"line":151},[127,171542,31839],{"class":154},[127,171544,681],{"class":147},[127,171546,1121],{"class":154},[127,171548,156436],{"class":290},[127,171550,171551],{"class":147}," num)\n",[127,171553,171554,171556,171558,171560,171562,171564],{"class":129,"line":167},[127,171555,171284],{"class":290},[127,171557,2201],{"class":147},[127,171559,155224],{"class":154},[127,171561,12977],{"class":147},[127,171563,171167],{"class":154},[127,171565,31326],{"class":147},[127,171567,171568,171570,171572,171575],{"class":129,"line":415},[127,171569,31839],{"class":154},[127,171571,681],{"class":147},[127,171573,171574],{"class":781},"\"输入不合法\"",[127,171576,687],{"class":147},[14,171578,171580],{"id":171579},"_95-获取异常信息","9.5 获取异常信息",[117,171582,171584],{"className":30918,"code":171583,"language":30920,"meta":122,"style":122},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[124,171585,171586,171592,171606,171617],{"__ignoreMap":122},[127,171587,171588,171590],{"class":129,"line":130},[127,171589,171272],{"class":290},[127,171591,4281],{"class":147},[127,171593,171594,171596,171598,171600,171602,171604],{"class":129,"line":137},[127,171595,46133],{"class":147},[127,171597,725],{"class":290},[127,171599,2924],{"class":154},[127,171601,681],{"class":147},[127,171603,156270],{"class":781},[127,171605,687],{"class":147},[127,171607,171608,171610,171612,171614],{"class":129,"line":151},[127,171609,171284],{"class":290},[127,171611,152616],{"class":154},[127,171613,65137],{"class":290},[127,171615,171616],{"class":147}," e:\n",[127,171618,171619,171621,171623,171625,171628,171630,171632,171634,171636],{"class":129,"line":167},[127,171620,31839],{"class":154},[127,171622,681],{"class":147},[127,171624,731],{"class":290},[127,171626,171627],{"class":781},"\"出错了:",[127,171629,1570],{"class":154},[127,171631,752],{"class":147},[127,171633,1620],{"class":154},[127,171635,926],{"class":781},[127,171637,687],{"class":147},[19,171639,146847],{},[117,171641,171644],{"className":171642,"code":171643,"language":5729,"meta":122},[5727],"出错了:invalid literal for int() with base 10: 'abc'\n",[124,171645,171643],{"__ignoreMap":122},[14,171647,171649],{"id":171648},"_96-else和finally","9.6 else和finally",[19,171651,171652,171654],{},[124,171653,2244],{},"：没有异常时执行。",[19,171656,171657,171660],{},[124,171658,171659],{},"finally","：无论是否异常都会执行。",[117,171662,171664],{"className":30918,"code":171663,"language":30920,"meta":122,"style":122},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[124,171665,171666,171672,171690,171698,171708,171714,171735,171741],{"__ignoreMap":122},[127,171667,171668,171670],{"class":129,"line":130},[127,171669,171272],{"class":290},[127,171671,4281],{"class":147},[127,171673,171674,171676,171678,171680,171682,171684,171686,171688],{"class":129,"line":137},[127,171675,46133],{"class":147},[127,171677,725],{"class":290},[127,171679,2924],{"class":154},[127,171681,681],{"class":147},[127,171683,54356],{"class":154},[127,171685,681],{"class":147},[127,171687,156186],{"class":781},[127,171689,31037],{"class":147},[127,171691,171692,171694,171696],{"class":129,"line":151},[127,171693,171284],{"class":290},[127,171695,152616],{"class":154},[127,171697,4281],{"class":147},[127,171699,171700,171702,171704,171706],{"class":129,"line":167},[127,171701,31839],{"class":154},[127,171703,681],{"class":147},[127,171705,153604],{"class":781},[127,171707,687],{"class":147},[127,171709,171710,171712],{"class":129,"line":415},[127,171711,2244],{"class":290},[127,171713,4281],{"class":147},[127,171715,171716,171718,171720,171722,171725,171727,171729,171731,171733],{"class":129,"line":421},[127,171717,31839],{"class":154},[127,171719,681],{"class":147},[127,171721,731],{"class":290},[127,171723,171724],{"class":781},"\"输入正确:",[127,171726,1570],{"class":154},[127,171728,2208],{"class":147},[127,171730,1620],{"class":154},[127,171732,926],{"class":781},[127,171734,687],{"class":147},[127,171736,171737,171739],{"class":129,"line":1766},[127,171738,171659],{"class":290},[127,171740,4281],{"class":147},[127,171742,171743,171745,171747,171750],{"class":129,"line":1856},[127,171744,31839],{"class":154},[127,171746,681],{"class":147},[127,171748,171749],{"class":781},"\"程序结束\"",[127,171751,687],{"class":147},[19,171753,171754,171756],{},[124,171755,171659],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171758,171760],{"id":171759},"_97-抛出异常","9.7 抛出异常",[19,171762,171763],{},"程序可以主动抛出异常。",[117,171765,171767],{"className":30918,"code":171766,"language":30920,"meta":122,"style":122},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[124,171768,171769,171778,171790,171803,171823,171827,171831],{"__ignoreMap":122},[127,171770,171771,171773,171776],{"class":129,"line":130},[127,171772,32487],{"class":290},[127,171774,171775],{"class":143}," set_age",[127,171777,161805],{"class":147},[127,171779,171780,171782,171784,171786,171788],{"class":129,"line":137},[127,171781,3643],{"class":290},[127,171783,16248],{"class":147},[127,171785,1584],{"class":290},[127,171787,4635],{"class":154},[127,171789,4281],{"class":147},[127,171791,171792,171794,171796,171798,171801],{"class":129,"line":151},[127,171793,103961],{"class":290},[127,171795,152616],{"class":154},[127,171797,681],{"class":147},[127,171799,171800],{"class":781},"\"年龄不能为负数\"",[127,171802,687],{"class":147},[127,171804,171805,171807,171809,171811,171813,171815,171817,171819,171821],{"class":129,"line":167},[127,171806,31839],{"class":154},[127,171808,681],{"class":147},[127,171810,731],{"class":290},[127,171812,162373],{"class":781},[127,171814,1570],{"class":154},[127,171816,70754],{"class":147},[127,171818,1620],{"class":154},[127,171820,926],{"class":781},[127,171822,687],{"class":147},[127,171824,171825],{"class":129,"line":415},[127,171826,2942],{"emptyLinePlaceholder":606},[127,171828,171829],{"class":129,"line":421},[127,171830,2942],{"emptyLinePlaceholder":606},[127,171832,171833,171836,171838,171840],{"class":129,"line":1766},[127,171834,171835],{"class":147},"set_age(",[127,171837,1207],{"class":290},[127,171839,893],{"class":154},[127,171841,687],{"class":147},[19,171843,171844],{},"调用者可以捕获：",[117,171846,171848],{"className":30918,"code":171847,"language":30920,"meta":122,"style":122},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[124,171849,171850,171856,171867,171877],{"__ignoreMap":122},[127,171851,171852,171854],{"class":129,"line":130},[127,171853,171272],{"class":290},[127,171855,4281],{"class":147},[127,171857,171858,171861,171863,171865],{"class":129,"line":137},[127,171859,171860],{"class":147},"    set_age(",[127,171862,1207],{"class":290},[127,171864,893],{"class":154},[127,171866,687],{"class":147},[127,171868,171869,171871,171873,171875],{"class":129,"line":151},[127,171870,171284],{"class":290},[127,171872,152616],{"class":154},[127,171874,65137],{"class":290},[127,171876,171616],{"class":147},[127,171878,171879,171881],{"class":129,"line":167},[127,171880,31839],{"class":154},[127,171882,67532],{"class":147},[14,171884,171886],{"id":171885},"_98-自定义异常","9.8 自定义异常",[117,171888,171890],{"className":30918,"code":171889,"language":30920,"meta":122,"style":122},"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",[124,171891,171892,171906,171910,171914,171918,171926,171936,171947,171957,171961,171965,171971,171988,171999],{"__ignoreMap":122},[127,171893,171894,171896,171899,171901,171904],{"class":129,"line":130},[127,171895,15236],{"class":290},[127,171897,171898],{"class":143}," BalanceNotEnoughError",[127,171900,681],{"class":147},[127,171902,171903],{"class":154},"Exception",[127,171905,31326],{"class":147},[127,171907,171908],{"class":129,"line":137},[127,171909,149927],{"class":290},[127,171911,171912],{"class":129,"line":151},[127,171913,2942],{"emptyLinePlaceholder":606},[127,171915,171916],{"class":129,"line":167},[127,171917,2942],{"emptyLinePlaceholder":606},[127,171919,171920,171922,171924],{"class":129,"line":415},[127,171921,32487],{"class":290},[127,171923,150576],{"class":143},[127,171925,163202],{"class":147},[127,171927,171928,171930,171932,171934],{"class":129,"line":421},[127,171929,3643],{"class":290},[127,171931,150532],{"class":147},[127,171933,1634],{"class":290},[127,171935,162979],{"class":147},[127,171937,171938,171940,171943,171945],{"class":129,"line":1766},[127,171939,103961],{"class":290},[127,171941,171942],{"class":147}," BalanceNotEnoughError(",[127,171944,150627],{"class":781},[127,171946,687],{"class":147},[127,171948,171949,171951,171953,171955],{"class":129,"line":1856},[127,171950,4632],{"class":290},[127,171952,163209],{"class":147},[127,171954,1207],{"class":290},[127,171956,150565],{"class":147},[127,171958,171959],{"class":129,"line":1862},[127,171960,2942],{"emptyLinePlaceholder":606},[127,171962,171963],{"class":129,"line":1874},[127,171964,2942],{"emptyLinePlaceholder":606},[127,171966,171967,171969],{"class":129,"line":2155},[127,171968,171272],{"class":290},[127,171970,4281],{"class":147},[127,171972,171973,171975,171977,171980,171982,171984,171986],{"class":129,"line":2160},[127,171974,162880],{"class":147},[127,171976,725],{"class":290},[127,171978,171979],{"class":147}," withdraw(",[127,171981,986],{"class":154},[127,171983,12977],{"class":147},[127,171985,2265],{"class":154},[127,171987,687],{"class":147},[127,171989,171990,171992,171995,171997],{"class":129,"line":2166},[127,171991,171284],{"class":290},[127,171993,171994],{"class":147}," BalanceNotEnoughError ",[127,171996,31923],{"class":290},[127,171998,171616],{"class":147},[127,172000,172001,172003],{"class":129,"line":2171},[127,172002,31839],{"class":154},[127,172004,67532],{"class":147},[19,172006,172007],{},"入门阶段大多数情况使用内置异常即可。",[14,172009,172011],{"id":172010},"_99-traceback","9.9 traceback",[19,172013,172014],{},"调试时可以输出完整异常堆栈。",[117,172016,172018],{"className":30918,"code":172017,"language":30920,"meta":122,"style":122},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[124,172019,172020,172027,172031,172037,172047,172055],{"__ignoreMap":122},[127,172021,172022,172024],{"class":129,"line":130},[127,172023,30932],{"class":290},[127,172025,172026],{"class":147}," traceback\n",[127,172028,172029],{"class":129,"line":137},[127,172030,2942],{"emptyLinePlaceholder":606},[127,172032,172033,172035],{"class":129,"line":151},[127,172034,171272],{"class":290},[127,172036,4281],{"class":147},[127,172038,172039,172041,172043,172045],{"class":129,"line":167},[127,172040,2527],{"class":154},[127,172042,681],{"class":147},[127,172044,156270],{"class":781},[127,172046,687],{"class":147},[127,172048,172049,172051,172053],{"class":129,"line":415},[127,172050,171284],{"class":290},[127,172052,152616],{"class":154},[127,172054,4281],{"class":147},[127,172056,172057],{"class":129,"line":421},[127,172058,172059],{"class":147},"    traceback.print_exc()\n",[19,172061,172062],{},"日志系统中常把异常堆栈记录到文件。",[14,172064,172066],{"id":172065},"_910-什么是模块","9.10 什么是模块",[19,172068,172069,172070,126512],{},"模块就是一个 ",[124,172071,146742],{},[19,172073,172074,172075,25159],{},"例如创建 ",[124,172076,172077],{},"my_math.py",[117,172079,172081],{"className":30918,"code":172080,"language":30920,"meta":122,"style":122},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[124,172082,172083,172091,172101,172105,172109,172118],{"__ignoreMap":122},[127,172084,172085,172087,172089],{"class":129,"line":130},[127,172086,32487],{"class":290},[127,172088,5751],{"class":143},[127,172090,151483],{"class":147},[127,172092,172093,172095,172097,172099],{"class":129,"line":137},[127,172094,4632],{"class":290},[127,172096,11411],{"class":147},[127,172098,1156],{"class":290},[127,172100,151494],{"class":147},[127,172102,172103],{"class":129,"line":151},[127,172104,2942],{"emptyLinePlaceholder":606},[127,172106,172107],{"class":129,"line":167},[127,172108,2942],{"emptyLinePlaceholder":606},[127,172110,172111,172113,172116],{"class":129,"line":415},[127,172112,32487],{"class":290},[127,172114,172115],{"class":143}," sub",[127,172117,151483],{"class":147},[127,172119,172120,172122,172124,172126],{"class":129,"line":421},[127,172121,4632],{"class":290},[127,172123,11411],{"class":147},[127,172125,1207],{"class":290},[127,172127,151494],{"class":147},[19,172129,172130],{},"在另一个文件中导入：",[117,172132,172134],{"className":30918,"code":172133,"language":30920,"meta":122,"style":122},"import my_math\n\nprint(my_math.add(1, 2))\n",[124,172135,172136,172143,172147],{"__ignoreMap":122},[127,172137,172138,172140],{"class":129,"line":130},[127,172139,30932],{"class":290},[127,172141,172142],{"class":147}," my_math\n",[127,172144,172145],{"class":129,"line":137},[127,172146,2942],{"emptyLinePlaceholder":606},[127,172148,172149,172151,172154,172156,172158,172160],{"class":129,"line":151},[127,172150,30955],{"class":154},[127,172152,172153],{"class":147},"(my_math.add(",[127,172155,893],{"class":154},[127,172157,12977],{"class":147},[127,172159,530],{"class":154},[127,172161,31037],{"class":147},[14,172163,172165],{"id":172164},"_911-import导入","9.11 import导入",[62,172167,172169],{"id":172168},"_9111-导入模块","9.11.1 导入模块",[117,172171,172173],{"className":30918,"code":172172,"language":30920,"meta":122,"style":122},"import random\n\nprint(random.randint(1, 10))\n",[124,172174,172175,172181,172185],{"__ignoreMap":122},[127,172176,172177,172179],{"class":129,"line":130},[127,172178,30932],{"class":290},[127,172180,45868],{"class":147},[127,172182,172183],{"class":129,"line":137},[127,172184,2942],{"emptyLinePlaceholder":606},[127,172186,172187,172189,172192,172194,172196,172198],{"class":129,"line":151},[127,172188,30955],{"class":154},[127,172190,172191],{"class":147},"(random.randint(",[127,172193,893],{"class":154},[127,172195,12977],{"class":147},[127,172197,1121],{"class":154},[127,172199,31037],{"class":147},[62,172201,172203],{"id":172202},"_9112-导入指定内容","9.11.2 导入指定内容",[117,172205,172207],{"className":30918,"code":172206,"language":30920,"meta":122,"style":122},"from random import randint\n\nprint(randint(1, 10))\n",[124,172208,172209,172220,172224],{"__ignoreMap":122},[127,172210,172211,172213,172215,172217],{"class":129,"line":130},[127,172212,31277],{"class":290},[127,172214,58329],{"class":147},[127,172216,30932],{"class":290},[127,172218,172219],{"class":147}," randint\n",[127,172221,172222],{"class":129,"line":137},[127,172223,2942],{"emptyLinePlaceholder":606},[127,172225,172226,172228,172231,172233,172235,172237],{"class":129,"line":151},[127,172227,30955],{"class":154},[127,172229,172230],{"class":147},"(randint(",[127,172232,893],{"class":154},[127,172234,12977],{"class":147},[127,172236,1121],{"class":154},[127,172238,31037],{"class":147},[62,172240,172242],{"id":172241},"_9113-起别名","9.11.3 起别名",[117,172244,172246],{"className":30918,"code":172245,"language":30920,"meta":122,"style":122},"import random as rd\n\nprint(rd.randint(1, 10))\n",[124,172247,172248,172259,172263],{"__ignoreMap":122},[127,172249,172250,172252,172254,172256],{"class":129,"line":130},[127,172251,30932],{"class":290},[127,172253,58329],{"class":147},[127,172255,31923],{"class":290},[127,172257,172258],{"class":147}," rd\n",[127,172260,172261],{"class":129,"line":137},[127,172262,2942],{"emptyLinePlaceholder":606},[127,172264,172265,172267,172270,172272,172274,172276],{"class":129,"line":151},[127,172266,30955],{"class":154},[127,172268,172269],{"class":147},"(rd.randint(",[127,172271,893],{"class":154},[127,172273,12977],{"class":147},[127,172275,1121],{"class":154},[127,172277,31037],{"class":147},[117,172279,172281],{"className":30918,"code":172280,"language":30920,"meta":122,"style":122},"from random import randint as rint\n\nprint(rint(1, 10))\n",[124,172282,172283,172299,172303],{"__ignoreMap":122},[127,172284,172285,172287,172289,172291,172294,172296],{"class":129,"line":130},[127,172286,31277],{"class":290},[127,172288,58329],{"class":147},[127,172290,30932],{"class":290},[127,172292,172293],{"class":147}," randint ",[127,172295,31923],{"class":290},[127,172297,172298],{"class":147}," rint\n",[127,172300,172301],{"class":129,"line":137},[127,172302,2942],{"emptyLinePlaceholder":606},[127,172304,172305,172307,172310,172312,172314,172316],{"class":129,"line":151},[127,172306,30955],{"class":154},[127,172308,172309],{"class":147},"(rint(",[127,172311,893],{"class":154},[127,172313,12977],{"class":147},[127,172315,1121],{"class":154},[127,172317,31037],{"class":147},[62,172319,172321],{"id":172320},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[117,172323,172325],{"className":30918,"code":172324,"language":30920,"meta":122,"style":122},"from random import *\n",[124,172326,172327],{"__ignoreMap":122},[127,172328,172329,172331,172333,172335],{"class":129,"line":130},[127,172330,31277],{"class":290},[127,172332,58329],{"class":147},[127,172334,30932],{"class":290},[127,172336,172337],{"class":290}," *\n",[19,172339,172340],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172342,172344],{"id":172343},"_912-常用内置模块","9.12 常用内置模块",[62,172346,172348],{"id":172347},"_9121-random","9.12.1 random",[117,172350,172352],{"className":30918,"code":172351,"language":30920,"meta":122,"style":122},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[124,172353,172354,172360,172364,172378,172397],{"__ignoreMap":122},[127,172355,172356,172358],{"class":129,"line":130},[127,172357,30932],{"class":290},[127,172359,45868],{"class":147},[127,172361,172362],{"class":129,"line":137},[127,172363,2942],{"emptyLinePlaceholder":606},[127,172365,172366,172368,172370,172372,172374,172376],{"class":129,"line":151},[127,172367,30955],{"class":154},[127,172369,172191],{"class":147},[127,172371,893],{"class":154},[127,172373,12977],{"class":147},[127,172375,1121],{"class":154},[127,172377,31037],{"class":147},[127,172379,172380,172382,172385,172387,172389,172391,172393,172395],{"class":129,"line":167},[127,172381,30955],{"class":154},[127,172383,172384],{"class":147},"(random.choice([",[127,172386,150278],{"class":781},[127,172388,12977],{"class":147},[127,172390,151326],{"class":781},[127,172392,12977],{"class":147},[127,172394,160121],{"class":781},[127,172396,33683],{"class":147},[127,172398,172399,172401,172404,172406,172408,172410,172412,172414,172416,172418,172420,172422,172424,172426],{"class":129,"line":415},[127,172400,30955],{"class":154},[127,172402,172403],{"class":147},"(random.sample([",[127,172405,893],{"class":154},[127,172407,12977],{"class":147},[127,172409,530],{"class":154},[127,172411,12977],{"class":147},[127,172413,749],{"class":154},[127,172415,12977],{"class":147},[127,172417,968],{"class":154},[127,172419,12977],{"class":147},[127,172421,994],{"class":154},[127,172423,112731],{"class":147},[127,172425,530],{"class":154},[127,172427,31037],{"class":147},[62,172429,172431],{"id":172430},"_9122-time","9.12.2 time",[117,172433,172435],{"className":30918,"code":172434,"language":30920,"meta":122,"style":122},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[124,172436,172437,172443,172447,172454,172462],{"__ignoreMap":122},[127,172438,172439,172441],{"class":129,"line":130},[127,172440,30932],{"class":290},[127,172442,32369],{"class":147},[127,172444,172445],{"class":129,"line":137},[127,172446,2942],{"emptyLinePlaceholder":606},[127,172448,172449,172451],{"class":129,"line":151},[127,172450,30955],{"class":154},[127,172452,172453],{"class":147},"(time.time())\n",[127,172455,172456,172458,172460],{"class":129,"line":167},[127,172457,95600],{"class":147},[127,172459,893],{"class":154},[127,172461,687],{"class":147},[127,172463,172464,172466,172468,172471],{"class":129,"line":415},[127,172465,30955],{"class":154},[127,172467,681],{"class":147},[127,172469,172470],{"class":781},"\"1秒后执行\"",[127,172472,687],{"class":147},[62,172474,172476],{"id":172475},"_9123-datetime","9.12.3 datetime",[117,172478,172480],{"className":30918,"code":172479,"language":30920,"meta":122,"style":122},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[124,172481,172482,172494,172498,172508,172515],{"__ignoreMap":122},[127,172483,172484,172486,172489,172491],{"class":129,"line":130},[127,172485,31277],{"class":290},[127,172487,172488],{"class":147}," datetime ",[127,172490,30932],{"class":290},[127,172492,172493],{"class":147}," datetime\n",[127,172495,172496],{"class":129,"line":137},[127,172497,2942],{"emptyLinePlaceholder":606},[127,172499,172500,172503,172505],{"class":129,"line":151},[127,172501,172502],{"class":147},"now ",[127,172504,725],{"class":290},[127,172506,172507],{"class":147}," datetime.now()\n",[127,172509,172510,172512],{"class":129,"line":167},[127,172511,30955],{"class":154},[127,172513,172514],{"class":147},"(now)\n",[127,172516,172517,172519,172522,172525,172527,172530],{"class":129,"line":415},[127,172518,30955],{"class":154},[127,172520,172521],{"class":147},"(now.strftime(",[127,172523,172524],{"class":781},"\"%Y-%m-",[127,172526,157081],{"class":154},[127,172528,172529],{"class":781}," %H:%M:%S\"",[127,172531,31037],{"class":147},[62,172533,172535],{"id":172534},"_9124-os","9.12.4 os",[117,172537,172539],{"className":30918,"code":172538,"language":30920,"meta":122,"style":122},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[124,172540,172541,172547,172551,172558],{"__ignoreMap":122},[127,172542,172543,172545],{"class":129,"line":130},[127,172544,30932],{"class":290},[127,172546,45845],{"class":147},[127,172548,172549],{"class":129,"line":137},[127,172550,2942],{"emptyLinePlaceholder":606},[127,172552,172553,172555],{"class":129,"line":151},[127,172554,30955],{"class":154},[127,172556,172557],{"class":147},"(os.getcwd())\n",[127,172559,172560,172562,172565,172568],{"class":129,"line":167},[127,172561,30955],{"class":154},[127,172563,172564],{"class":147},"(os.listdir(",[127,172566,172567],{"class":781},"\".\"",[127,172569,31037],{"class":147},[62,172571,172573],{"id":172572},"_9125-sys","9.12.5 sys",[117,172575,172577],{"className":30918,"code":172576,"language":30920,"meta":122,"style":122},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[124,172578,172579,172586,172590,172597],{"__ignoreMap":122},[127,172580,172581,172583],{"class":129,"line":130},[127,172582,30932],{"class":290},[127,172584,172585],{"class":147}," sys\n",[127,172587,172588],{"class":129,"line":137},[127,172589,2942],{"emptyLinePlaceholder":606},[127,172591,172592,172594],{"class":129,"line":151},[127,172593,30955],{"class":154},[127,172595,172596],{"class":147},"(sys.version)\n",[127,172598,172599,172601],{"class":129,"line":167},[127,172600,30955],{"class":154},[127,172602,172603],{"class":147},"(sys.path)\n",[14,172605,172607,172608,172610,172611,926],{"id":172606},"_913-if-name-main","9.13 if ",[30,172609,80339],{}," == \"",[30,172612,102587],{},[19,172614,172615,172616,172619],{},"模块被直接运行和被导入时，",[124,172617,172618],{},"__name__"," 的值不同。",[19,172621,172622,172623,25159],{},"创建 ",[124,172624,172625],{},"my_module.py",[117,172627,172629],{"className":30918,"code":172628,"language":30920,"meta":122,"style":122},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[124,172630,172631,172639,172649,172653,172657,172669],{"__ignoreMap":122},[127,172632,172633,172635,172637],{"class":129,"line":130},[127,172634,32487],{"class":290},[127,172636,5751],{"class":143},[127,172638,151483],{"class":147},[127,172640,172641,172643,172645,172647],{"class":129,"line":137},[127,172642,4632],{"class":290},[127,172644,11411],{"class":147},[127,172646,1156],{"class":290},[127,172648,151494],{"class":147},[127,172650,172651],{"class":129,"line":151},[127,172652,2942],{"emptyLinePlaceholder":606},[127,172654,172655],{"class":129,"line":167},[127,172656,2942],{"emptyLinePlaceholder":606},[127,172658,172659,172661,172663,172665,172667],{"class":129,"line":415},[127,172660,2075],{"class":290},[127,172662,31760],{"class":154},[127,172664,102088],{"class":290},[127,172666,102091],{"class":781},[127,172668,4281],{"class":147},[127,172670,172671,172673,172675,172677,172679,172681],{"class":129,"line":421},[127,172672,31839],{"class":154},[127,172674,166990],{"class":147},[127,172676,893],{"class":154},[127,172678,12977],{"class":147},[127,172680,530],{"class":154},[127,172682,31037],{"class":147},[19,172684,172685],{},"作用：",[632,172687,172688,172691],{},[635,172689,172690],{},"直接运行该文件时，执行测试代码。",[635,172692,172693],{},"被其他文件导入时，不执行测试代码。",[19,172695,172696],{},"这是写模块时很常用的习惯。",[14,172698,172700],{"id":172699},"_914-包","9.14 包",[19,172702,172703,172704,172707],{},"包是包含 ",[124,172705,172706],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172709,172710],{},"目录结构：",[117,172712,172715],{"className":172713,"code":172714,"language":5729,"meta":122},[5727],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[124,172716,172714],{"__ignoreMap":122},[19,172718,172719],{},"导入：",[117,172721,172723],{"className":30918,"code":172722,"language":30920,"meta":122,"style":122},"from utils.file_utils import read_file\n",[124,172724,172725],{"__ignoreMap":122},[127,172726,172727,172729,172732,172734],{"class":129,"line":130},[127,172728,31277],{"class":290},[127,172730,172731],{"class":147}," utils.file_utils ",[127,172733,30932],{"class":290},[127,172735,172736],{"class":147}," read_file\n",[19,172738,172739,172741],{},[124,172740,172706],{}," 可以为空，也可以写包初始化逻辑。",[14,172743,172745],{"id":172744},"_915-第三方包","9.15 第三方包",[19,172747,172748,172749,172751],{},"第三方包通过 ",[124,172750,24371],{}," 安装。",[117,172753,172755],{"className":24362,"code":172754,"language":24364,"meta":122,"style":122},"pip install requests\n",[124,172756,172757],{"__ignoreMap":122},[127,172758,172759,172761,172763],{"class":129,"line":130},[127,172760,24371],{"class":143},[127,172762,24374],{"class":781},[127,172764,146488],{"class":781},[19,172766,172767],{},"使用：",[117,172769,172771],{"className":30918,"code":172770,"language":30920,"meta":122,"style":122},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[124,172772,172773,172779,172783,172798],{"__ignoreMap":122},[127,172774,172775,172777],{"class":129,"line":130},[127,172776,30932],{"class":290},[127,172778,146488],{"class":147},[127,172780,172781],{"class":129,"line":137},[127,172782,2942],{"emptyLinePlaceholder":606},[127,172784,172785,172788,172790,172793,172796],{"class":129,"line":151},[127,172786,172787],{"class":147},"response ",[127,172789,725],{"class":290},[127,172791,172792],{"class":147}," requests.get(",[127,172794,172795],{"class":781},"\"https:\u002F\u002Fwww.example.com\"",[127,172797,687],{"class":147},[127,172799,172800,172802],{"class":129,"line":167},[127,172801,30955],{"class":154},[127,172803,172804],{"class":147},"(response.status_code)\n",[19,172806,172807],{},"查看已安装包：",[117,172809,172811],{"className":24362,"code":172810,"language":24364,"meta":122,"style":122},"pip list\n",[124,172812,172813],{"__ignoreMap":122},[127,172814,172815,172817],{"class":129,"line":130},[127,172816,24371],{"class":143},[127,172818,119484],{"class":781},[19,172820,172821],{},"导出项目依赖：",[117,172823,172824],{"className":24362,"code":146683,"language":24364,"meta":122,"style":122},[124,172825,172826],{"__ignoreMap":122},[127,172827,172828,172830,172832,172834],{"class":129,"line":130},[127,172829,24371],{"class":143},[127,172831,146692],{"class":781},[127,172833,26763],{"class":290},[127,172835,146697],{"class":781},[19,172837,172838],{},"安装项目依赖：",[117,172840,172841],{"className":24362,"code":146703,"language":24364,"meta":122,"style":122},[124,172842,172843],{"__ignoreMap":122},[127,172844,172845,172847,172849,172851],{"class":129,"line":130},[127,172846,24371],{"class":143},[127,172848,24374],{"class":781},[127,172850,120168],{"class":154},[127,172852,146697],{"class":781},[14,172854,172856],{"id":172855},"_916-模块搜索路径","9.16 模块搜索路径",[19,172858,172859,172860,172863],{},"Python 导入模块时会在 ",[124,172861,172862],{},"sys.path"," 中查找。",[117,172865,172867],{"className":30918,"code":172866,"language":30920,"meta":122,"style":122},"import sys\n\nfor path in sys.path:\n    print(path)\n",[124,172868,172869,172875,172879,172891],{"__ignoreMap":122},[127,172870,172871,172873],{"class":129,"line":130},[127,172872,30932],{"class":290},[127,172874,172585],{"class":147},[127,172876,172877],{"class":129,"line":137},[127,172878,2942],{"emptyLinePlaceholder":606},[127,172880,172881,172883,172886,172888],{"class":129,"line":151},[127,172882,3567],{"class":290},[127,172884,172885],{"class":147}," path ",[127,172887,26584],{"class":290},[127,172889,172890],{"class":147}," sys.path:\n",[127,172892,172893,172895],{"class":129,"line":167},[127,172894,31839],{"class":154},[127,172896,169619],{"class":147},[19,172898,172899],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172901,158013],{},[117,172903,172906],{"className":172904,"code":172905,"language":5729,"meta":122},[5727],"random.py\njson.py\ntime.py\n",[124,172907,172905],{"__ignoreMap":122},[19,172909,172910],{},"这些文件名可能导致导入异常。",[14,172912,172914],{"id":172913},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172916,172710],{},[117,172918,172921],{"className":172919,"code":172920,"language":5729,"meta":122},[5727],"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",[124,172922,172920],{"__ignoreMap":122},[19,172924,172925,25159],{},[124,172926,172927],{},"utils\u002Ffile_utils.py",[117,172929,172931],{"className":30918,"code":172930,"language":30920,"meta":122,"style":122},"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",[124,172932,172933,172939,172949,172953,172957,172967,172977,172985,172991,172995,173022,173032,173036,173040,173050,173076],{"__ignoreMap":122},[127,172934,172935,172937],{"class":129,"line":130},[127,172936,30932],{"class":290},[127,172938,147481],{"class":147},[127,172940,172941,172943,172945,172947],{"class":129,"line":137},[127,172942,31277],{"class":290},[127,172944,108840],{"class":147},[127,172946,30932],{"class":290},[127,172948,108845],{"class":147},[127,172950,172951],{"class":129,"line":151},[127,172952,2942],{"emptyLinePlaceholder":606},[127,172954,172955],{"class":129,"line":167},[127,172956,2942],{"emptyLinePlaceholder":606},[127,172958,172959,172961,172964],{"class":129,"line":415},[127,172960,32487],{"class":290},[127,172962,172963],{"class":143}," read_json",[127,172965,172966],{"class":147},"(path):\n",[127,172968,172969,172972,172974],{"class":129,"line":421},[127,172970,172971],{"class":147},"    path ",[127,172973,725],{"class":290},[127,172975,172976],{"class":147}," Path(path)\n",[127,172978,172979,172981,172983],{"class":129,"line":1766},[127,172980,3643],{"class":290},[127,172982,39470],{"class":290},[127,172984,169700],{"class":147},[127,172986,172987,172989],{"class":129,"line":1856},[127,172988,15294],{"class":290},[127,172990,52373],{"class":147},[127,172992,172993],{"class":129,"line":1862},[127,172994,2942],{"emptyLinePlaceholder":606},[127,172996,172997,172999,173001,173004,173006,173008,173010,173012,173014,173016,173018,173020],{"class":129,"line":1874},[127,172998,34718],{"class":290},[127,173000,147181],{"class":154},[127,173002,173003],{"class":147},"(path, ",[127,173005,147191],{"class":781},[127,173007,12977],{"class":147},[127,173009,147196],{"class":5758},[127,173011,725],{"class":290},[127,173013,147201],{"class":781},[127,173015,14256],{"class":147},[127,173017,31923],{"class":290},[127,173019,148543],{"class":5758},[127,173021,4281],{"class":147},[127,173023,173024,173026,173028,173030],{"class":129,"line":2155},[127,173025,15294],{"class":290},[127,173027,148554],{"class":147},[127,173029,45894],{"class":5758},[127,173031,687],{"class":147},[127,173033,173034],{"class":129,"line":2160},[127,173035,2942],{"emptyLinePlaceholder":606},[127,173037,173038],{"class":129,"line":2166},[127,173039,2942],{"emptyLinePlaceholder":606},[127,173041,173042,173044,173047],{"class":129,"line":2171},[127,173043,32487],{"class":290},[127,173045,173046],{"class":143}," write_json",[127,173048,173049],{"class":147},"(path, data):\n",[127,173051,173052,173054,173056,173058,173060,173062,173064,173066,173068,173070,173072,173074],{"class":129,"line":2185},[127,173053,34718],{"class":290},[127,173055,147181],{"class":154},[127,173057,173003],{"class":147},[127,173059,152366],{"class":781},[127,173061,12977],{"class":147},[127,173063,147196],{"class":5758},[127,173065,725],{"class":290},[127,173067,147201],{"class":781},[127,173069,14256],{"class":147},[127,173071,31923],{"class":290},[127,173073,148543],{"class":5758},[127,173075,4281],{"class":147},[127,173077,173078,173081,173083,173085,173087,173089,173091,173093,173095,173097,173099],{"class":129,"line":2190},[127,173079,173080],{"class":147},"        json.dump(data, ",[127,173082,45894],{"class":5758},[127,173084,12977],{"class":147},[127,173086,147527],{"class":5758},[127,173088,725],{"class":290},[127,173090,34527],{"class":154},[127,173092,12977],{"class":147},[127,173094,152402],{"class":5758},[127,173096,725],{"class":290},[127,173098,530],{"class":154},[127,173100,687],{"class":147},[19,173102,173103,25159],{},[124,173104,154997],{},[117,173106,173108],{"className":30918,"code":173107,"language":30920,"meta":122,"style":122},"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",[124,173109,173110,173121,173125,173138,173158],{"__ignoreMap":122},[127,173111,173112,173114,173116,173118],{"class":129,"line":130},[127,173113,31277],{"class":290},[127,173115,172731],{"class":147},[127,173117,30932],{"class":290},[127,173119,173120],{"class":147}," read_json, write_json\n",[127,173122,173123],{"class":129,"line":137},[127,173124,2942],{"emptyLinePlaceholder":606},[127,173126,173127,173129,173131,173134,173136],{"class":129,"line":151},[127,173128,160106],{"class":147},[127,173130,725],{"class":290},[127,173132,173133],{"class":147}," read_json(",[127,173135,152221],{"class":781},[127,173137,687],{"class":147},[127,173139,173140,173142,173144,173146,173148,173150,173152,173154,173156],{"class":129,"line":167},[127,173141,170924],{"class":147},[127,173143,63212],{"class":781},[127,173145,158],{"class":147},[127,173147,150278],{"class":781},[127,173149,12977],{"class":147},[127,173151,151862],{"class":781},[127,173153,158],{"class":147},[127,173155,1663],{"class":154},[127,173157,165542],{"class":147},[127,173159,173160,173163,173165],{"class":129,"line":415},[127,173161,173162],{"class":147},"write_json(",[127,173164,152221],{"class":781},[127,173166,173167],{"class":147},", students)\n",[14,173169,173171],{"id":173170},"_918-易错点","9.18 易错点",[632,173173,173174,173177,173182,173187,173190,173193],{},[635,173175,173176],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[635,173178,173179,173180,28925],{},"能指定异常类型就不要裸写 ",[124,173181,171284],{},[635,173183,173184,173186],{},[124,173185,171659],{}," 无论是否出错都会执行。",[635,173188,173189],{},"模块文件名不要和标准库重名。",[635,173191,173192],{},"导入自己写的模块时，要注意运行目录。",[635,173194,173195],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173197,173199],{"id":173198},"_919-本章练习","9.19 本章练习",[632,173201,173202,173205,173208,173214,173221],{},[635,173203,173204],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[635,173206,173207],{},"写函数读取文件，如果文件不存在则返回空字符串。",[635,173209,172622,173210,173213],{},[124,173211,173212],{},"math_utils.py","，实现加减乘除函数并导入使用。",[635,173215,173216,173217,173220],{},"创建一个 ",[124,173218,173219],{},"utils"," 包，把 JSON 读写函数放进去。",[635,173222,173223],{},"写一个程序，捕获除零异常和输入格式异常。",[575,173225,173226],{},"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":122,"searchDepth":137,"depth":137,"links":173228},[173229,173230,173231,173232,173233,173234,173235,173236,173237,173238,173239,173245,173252,173254,173255,173256,173257,173258,173259],{"id":171081,"depth":137,"text":171082},{"id":171209,"depth":137,"text":171210},{"id":171258,"depth":137,"text":171259},{"id":171407,"depth":137,"text":171408},{"id":171579,"depth":137,"text":171580},{"id":171648,"depth":137,"text":171649},{"id":171759,"depth":137,"text":171760},{"id":171885,"depth":137,"text":171886},{"id":172010,"depth":137,"text":172011},{"id":172065,"depth":137,"text":172066},{"id":172164,"depth":137,"text":172165,"children":173240},[173241,173242,173243,173244],{"id":172168,"depth":151,"text":172169},{"id":172202,"depth":151,"text":172203},{"id":172241,"depth":151,"text":172242},{"id":172320,"depth":151,"text":172321},{"id":172343,"depth":137,"text":172344,"children":173246},[173247,173248,173249,173250,173251],{"id":172347,"depth":151,"text":172348},{"id":172430,"depth":151,"text":172431},{"id":172475,"depth":151,"text":172476},{"id":172534,"depth":151,"text":172535},{"id":172572,"depth":151,"text":172573},{"id":172606,"depth":137,"text":173253},"9.13 if name == \"main\"",{"id":172699,"depth":137,"text":172700},{"id":172744,"depth":137,"text":172745},{"id":172855,"depth":137,"text":172856},{"id":172913,"depth":137,"text":172914},{"id":173170,"depth":137,"text":173171},{"id":173198,"depth":137,"text":173199},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171073,"description":603},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173266,"title":173267,"body":173268,"description":173431,"extension":604,"meta":173432,"navigation":606,"path":173433,"seo":173434,"stem":173435,"__hash__":173436},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173269,"toc":173426},[173270,173273,173276,173279,173290,173292,173366,173369,173372,173375,173378,173381,173384,173387,173390,173393,173396],[10,173271,173267],{"id":173272},"python教程",[19,173274,173275],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173277,173278],{},"建议学习环境：",[632,173280,173281,173284,173287],{},[635,173282,173283],{},"Python 版本：Python 3.10 及以上。",[635,173285,173286],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[635,173288,173289],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173291,117607],{"id":117607},[632,173293,173294,173300,173306,173312,173318,173324,173330,173336,173342,173348,173354,173360],{},[635,173295,173296],{},[457,173297,173299],{"href":173298},".\u002Fch1-Python","Python环境与第一个程序",[635,173301,173302],{},[457,173303,173305],{"href":173304},".\u002Fch2","基础语法、变量与字符串",[635,173307,173308],{},[457,173309,173311],{"href":173310},".\u002Fch3","判断语句",[635,173313,173314],{},[457,173315,173317],{"href":173316},".\u002Fch4","循环语句",[635,173319,173320],{},[457,173321,173323],{"href":173322},".\u002Fch5","函数基础",[635,173325,173326],{},[457,173327,173329],{"href":173328},".\u002Fch6","数据容器",[635,173331,173332],{},[457,173333,173335],{"href":173334},".\u002Fch7","函数进阶",[635,173337,173338],{},[457,173339,173341],{"href":173340},".\u002Fch8","文件操作",[635,173343,173344],{},[457,173345,173347],{"href":173346},".\u002Fch9","异常、模块与包",[635,173349,173350],{},[457,173351,173353],{"href":173352},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[635,173355,173356],{},[457,173357,173359],{"href":173358},".\u002Fch11","面向对象基础",[635,173361,173362],{},[457,173363,173365],{"href":173364},".\u002Fch12","综合案例与复习路线",[14,173367,173368],{"id":173368},"学习路线",[19,173370,173371],{},"第一阶段：能运行程序。",[19,173373,173374],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173376,173377],{},"第二阶段：能组织数据。",[19,173379,173380],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173382,173383],{},"第三阶段：能封装逻辑。",[19,173385,173386],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173388,173389],{},"第四阶段：能做小项目。",[19,173391,173392],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173394,173395],{"id":173395},"参考资料",[632,173397,173398,173405,173412,173419],{},[635,173399,173400,173401],{},"黑马程序员 Python 入门教程推荐：",[457,173402,173403],{"href":173403,"rel":173404},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24405],[635,173406,173407,173408],{},"Python 官方中文教程：",[457,173409,173410],{"href":173410,"rel":173411},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24405],[635,173413,173414,173415],{},"Python 标准库文档：",[457,173416,173417],{"href":173417,"rel":173418},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24405],[635,173420,173421,173422],{},"pyecharts 文档：",[457,173423,173424],{"href":173424,"rel":173425},"https:\u002F\u002Fpyecharts.org\u002F",[24405],{"title":122,"searchDepth":137,"depth":137,"links":173427},[173428,173429,173430],{"id":117607,"depth":137,"text":117607},{"id":173368,"depth":137,"text":173368},{"id":173395,"depth":137,"text":173395},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23919},"\u002Fwiki\u002F2024-10-10-python",{"title":173267,"description":173431},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426817]